วันนี้นั่งอ่านบทความเรื่อง Postgres: a better message queue than Kafka?
ทำการอธิบายการสร้างระบบ logging
ซึ่งทำงานอยู่บน PostgreSQL
ว่ามีข้อดีและข้อเสียอย่างไร รวมทั้งการปรับปรุงในอนาคต
ทำไมถึงใช้งาน PostgreSQL แทนที่จะเป็น Apache Kafka สำหรับ message queue

สิ่งหนึ่งที่น่าสนใจคือ การเลือกใช้เครื่องมือกับงาน

โดยสิ่งที่ใช้ในการตัดสินใจอันดับแรกคือ เครื่องค่าใช้จ่าย
ยิ่งเป็นบริษัทขนาดเล็ก มีเงินทุนไม่มาก
การเพิ่ม infrastructure เข้ามาใหม่ ยิ่งเพิ่มต้นทุนให้มากขึ้น
ดังนั้นสิ่งที่ต้องดูก่อนคือ infrastructure เดิม
สามารถแก้ไขหรือจัดการปัญหาที่เราต้องการได้หรือไม่

ค่าใช้จ่ายที่สูงขึ้น ประกอบไปด้วย

  • เวลาในการประเมินเทคโนโลยีใหม่ ๆ
  • เวลาในการเรียนรู้
  • การ monitor
  • การ debug เพื่อหาปัญหาบน production
  • การดู ecosystem ของสิ่งที่นำมาใช้
  • ความเชี่ยวชาญ เพื่อให้การปรับไปใช้เป็นไปอย่างถูกต้อง

ดังนั้นในการสร้าง feature แรก ๆ
จึงเลือกใช้สิ่งที่ทีมมีความรู้ความเข้าใจ มีประสบการณ์ ก่อน
แน่นอนว่า มันต้องตอบโจทย์ในสิ่งที่เราต้องการก่อนด้วย
ทั้งค่าใช้จ่าย ประสิทธิภาพ และมีความปลอดภัย

หลังจากทำการสร้างเรียบร้อย ก็ต้องมีดูว่ามีข้อดีและข้อเสียอะไรบ้าง
ด้วยการ minitoring ระบบการทำงาน
เพื่อทำการปรับปรุงให้เหมาะสมต่อไป

ยกตัวอย่างของปัญหาที่เจอ

  • ID overflow จากการใช้งาน primary key เป็นแบบ auto increment 32 bit ซึ่งปัญหาเกิดขึ้นไปเมื่อผ่านไป 2 เดือน จึงทำการเปลี่ยนไปใช้ 64 bit
  • จัดการปัญหา traffic ที่สูงด้วย rate limit
  • การขยายขนาดของ DB server ซึ่งทำให้ระบบ down ลงไป เมื่อต้องทำการ scale ในช่วง peak time ซึ่งมีค่าใช้จ่ายที่สูงอีกด้วย

ต่อไปในอนาคตเมื่อขยายการทำงานมากขึ้น
ก็อาจจะต้องมีการเปลี่ยนแปลงต่อไป ทั้ง
การใช้งาน Sharding ใน PostgreSQL
หรือไปใช้งาน messaging server อื่น ๆ เช่น Apache Kafka เป็นต้น
หรืออาจจะไปใช้ database อื่น ๆ ก็ได้ เช่น Neon, CockroachDB และ DynamoDB เป็นต้น