ในโลกของการพัฒนา Backend สมัยใหม่ ระบบองค์กรขนาดใหญ่ไม่ได้ทำงานแบบเป็นเส้นตรง แต่ประกอบขึ้นจาก Microservices จำนวนมากที่ต้องสื่อสารกันอย่างต่อเนื่อง ความท้าทายที่สำคัญคือการทำให้ระบบเหล่านี้สามารถขยายตัว (Scale) และมีความยืดหยุ่นสูง (Resilient) โดยไม่จำเป็นต้องพึ่งพาการเรียกใช้ API แบบ Synchronous ตลอดเวลา
การออกแบบสถาปัตยกรรมที่ช่วยให้ส่วนประกอบต่างๆ สามารถทำงานร่วมกันได้อย่างอิสระ (Decoupling) จึงเป็นหัวใจสำคัญของการสร้างระบบระดับ Enterprise ซึ่งหัวใจหลักของแนวคิดนี้คือ **Event-Driven Architecture (EDA)**
💡 Event-Driven Architecture คืออะไร?
EDA เปลี่ยนรูปแบบการสื่อสารจาก ‘การเรียกใช้ (Call)’ ไปเป็น ‘การประกาศ (Publish)’ เมื่อบริการ A เกิดเหตุการณ์บางอย่าง (Event) เช่น ‘UserRegistered’ บริการ A จะไม่เรียกใช้บริการ B โดยตรง แต่จะส่ง Event นี้ไปยังตัวกลางที่เรียกว่า **Message Broker**
Message Broker ทำหน้าที่เป็นศูนย์กลางการสื่อสารที่เชื่อถือได้ โดยจะรับ Event นั้นและส่งต่อไปยังผู้รับที่สนใจทั้งหมด (Subscribers) ทำให้ผู้ส่ง (Publisher) ไม่ต้องรู้ว่าใครคือผู้รับ (Subscriber) ซึ่งเป็นการแยกส่วนประกอบออกจากกันโดยสมบูรณ์ (Decoupling) และเพิ่มความทนทานของระบบได้อย่างมหาศาล
⚙️ Message Brokers: Kafka vs RabbitMQ
Message Brokers คือเครื่องมือสำคัญที่ทำให้ EDA เป็นจริง ในการใช้งานจริง เราต้องเลือกเครื่องมือให้เหมาะสมกับ Use Case:
- **Apache Kafka**: เหมาะสำหรับสถานการณ์ที่ต้องการ Throughput สูงมาก (High Throughput) และการเก็บข้อมูลเหตุการณ์ (Event Log) แบบเรียลไทม์เพื่อนำไปวิเคราะห์ย้อนหลัง (Stream Processing) เช่น การบันทึกกิจกรรมผู้ใช้ทั้งหมด
- **RabbitMQ**: เหมาะสำหรับกรณีที่เน้นความน่าเชื่อถือในการส่งข้อความ (Guaranteed Delivery) และการจัดการรูปแบบ Queue ที่ซับซ้อน เช่น การประมวลผลคำสั่งซื้อที่ต้องส่งให้หลายบริการตามลำดับ
💾 การเชื่อมต่อกับ PostgreSQL ในระบบ EDA
แม้ว่า PostgreSQL จะเป็นระบบฐานข้อมูล (Database) แต่ก็มีบทบาทสำคัญในการเป็นแหล่งเก็บข้อมูลสถานะ (Source of Truth) และเป็นจุดที่บริการต่างๆ จะเข้ามาอ่านหรือเขียนข้อมูลหลังจากได้รับ Event ผ่าน Message Broker
สมมติว่าบริการ ‘Order Service’ ได้รับ Event ว่า ‘OrderPlaced’ จาก Kafka แล้ว หน้าที่ต่อไปของบริการนี้คือการบันทึกข้อมูลลงใน PostgreSQL:
SQL
INSERT INTO orders (order_id, user_id, total_amount) VALUES (1001, 5, 99.99);
การใช้ PostgreSQL ในลักษณะนี้ทำให้มั่นใจได้ว่าข้อมูลที่ได้รับจาก Event จะถูกบันทึกอย่างเป็นระเบียบและเป็นแหล่งอ้างอิงที่ถูกต้องสำหรับระบบทั้งหมด
✅ สรุป: ประโยชน์ของ EDA
การใช้ Event-Driven Architecture ร่วมกับ Message Brokers อย่าง Kafka หรือ RabbitMQ ช่วยให้ Backend ของคุณมีความยืดหยุ่นสูง สามารถขยายตัวได้ง่าย (Scalability) และมีความทนทานต่อความล้มเหลว (Resilience) ได้อย่างเหนือกว่าการเรียกใช้ API แบบเดิมๆ การออกแบบสถาปัตยกรรมที่เน้นการสื่อสารผ่าน Event จึงเป็นมาตรฐานสำคัญสำหรับระบบระดับองค์กรในปัจจุบัน