Kafka เร็วก็จริง — แต่ฉันจะใช้ Postgres
(topicpartition.io)ประเด็นหลัก
วงการเทคโนโลยีกำลังแบ่งเป็นสองฝั่ง:
- ฝั่ง 1: ไล่ตามคำฮิตและนำสแตกเทคโนโลยีสมัยใหม่ที่ซับซ้อนมาใช้แบบไม่ยั้งคิด
- ฝั่ง 2: ใช้แนวทางที่สมเหตุสมผลและปฏิบัติได้จริง โดยใช้เท่าที่จำเป็น
ผู้เขียนเสนอว่าในกรณีส่วนใหญ่ สามารถใช้ Postgres แทน Kafka สำหรับระบบ pub/sub และคิวได้
ผลการเบนช์มาร์ก
ประสิทธิภาพ Pub/Sub
- โหนดเดี่ยว 4 vCPU: เขียนได้ 5,036 ข้อความต่อวินาที, อ่านได้ 25,183 ข้อความต่อวินาที (fan-out 5 เท่า)
- รีพลิเคชัน 3 โหนด 4 vCPU: รักษาปริมาณงานได้ใกล้เคียงเดิม โดยมี latency เพิ่มขึ้นเล็กน้อย
- โหนดเดี่ยว 96 vCPU: 243,000 ข้อความต่อวินาที, ความเร็วการอ่าน 1.16 GiB/s
ประสิทธิภาพคิว (Queue)
- โหนดเดี่ยว 4 vCPU: 2,885 ข้อความต่อวินาที
- โหนดเดี่ยว 96 vCPU: 20,144 ข้อความต่อวินาที
ประเด็นสำคัญ
- ฮาร์ดแวร์ก้าวหน้า: ฮาร์ดแวร์สมัยใหม่ (CPU 192 คอร์, RAM 4TB) ทำให้โหนดเดี่ยวมีพลังมากขึ้นมาก
- ยุคฟื้นคืนของ Postgres: กระแส "ใช้ Postgres กับทุกอย่าง" กำลังเติบโต
- ความเป็นประโยชน์ในทางปฏิบัติ: แม้แต่สตาร์ตอัปขนาดใหญ่อย่าง OpenAI ก็ยังใช้ Postgres instance เดี่ยวอยู่
- โอเวอร์เฮดระดับองค์กร: การนำเทคโนโลยีใหม่มาใช้ก่อให้เกิดต้นทุนด้านการเรียนรู้ การปฏิบัติการ การมอนิเตอร์ ฯลฯ
บทสรุป
"ใช้ Postgres ไปก่อน จนกว่ามันจะพัง"
บริษัทส่วนใหญ่ต้องการปริมาณงานเพียงระดับไม่กี่ MB ต่อวินาที ซึ่ง Postgres ก็รองรับได้สบาย ๆ ข้อความที่ต้องการสื่อคือควรนำระบบกระจายที่ซับซ้อนมาใช้เมื่อจำเป็นจริง ๆ เท่านั้น
8 ความคิดเห็น
Kafka ช้านะ...
ไม่แน่ใจว่า Postgres เหมาะกับทุกสถานการณ์หรือไม่ แต่ผมคิดว่ามักจะเห็นหลายกรณีที่จริง ๆ แล้วไม่จำเป็นต้องใช้ Kafka แต่กลับเลือกใช้ Kafka จนทำให้มีภาระงานเพิ่มขึ้นโดยใช่เหตุ
บทความสรรเสริญ postgresql อีกแล้ว...
สิ่งสำคัญคือใช้เท่าที่จำเป็น
และออกแบบให้สลับเปลี่ยนได้อย่างยืดหยุ่น
เห็นแล้วนึกถึง บทความเชียร์ Postgresql แบบสุดโต่งที่สุด เลยครับ
โอ้ เปลี่ยน title ได้ตามใจชอบยังไงเหรอ
ชื่อเรื่องน่ะเหรอ?
ก็ไม่ได้เล่นลูกไม้อะไรมากนักหรอกครับ
https://news.hada.io/guidelines
> รองรับ Markdown
> รองรับทั้งในเนื้อหาและคอมเมนต์
> โดยพื้นฐานเป็นไปตามข้อกำหนด CommonMark
> ไม่รองรับรูปภาพ
เพิ่มเติมคือ ในกรณีที่เป็น URL ของ GeekNews ดูเหมือนว่าจะแสดงไอคอนหน้าชื่อของลิงก์
ผมจะใช้แค่ SQLite ไปจนกว่ามันจะพัง