รู้จักกับ Event-driven Architecture และ Kafka

Sharing is caring!

ในยุคที่ระบบซอฟต์แวร์ต้องการความเร็ว ความยืดหยุ่น และรองรับการสเกลแบบกระจาย (Distributed System) Event-driven Architecture หรือ EDA ได้กลายเป็นรูปแบบการออกแบบระบบที่ได้รับความนิยมอย่างมาก โดยเฉพาะเมื่อใช้ร่วมกับ Apache Kafka ซึ่งเป็นแพลตฟอร์มในการจัดการ Event ขนาดใหญ่

Event-driven Architecture คืออะไร?

EDA เป็นรูปแบบการออกแบบระบบที่มุ่งเน้นการสื่อสารระหว่าง Component ต่าง ๆ ด้วย “Event” แทนการเรียกใช้โดยตรง เช่น แทนที่จะสั่ง “บันทึกข้อมูลลูกค้า” โดยตรง → ระบบจะ “ปล่อย Event ว่ามีลูกค้าใหม่” แล้วระบบอื่น ๆ มาจับ (Subscribe) และดำเนินการต่อเอง

องค์ประกอบของ EDA

  • Event Producer: เป็นผู้สร้าง Event เช่น ระบบ Order สร้าง Event “OrderPlaced”
  • Event Consumer: ระบบที่รับ Event ไปใช้งาน เช่น ระบบ Inventory ลดสต็อก
  • Event Broker: ตัวกลางสำหรับส่งต่อ Event เช่น Apache Kafka, RabbitMQ

Apache Kafka คืออะไร?

Apache Kafka เป็นระบบ distributed streaming platform ที่ออกแบบมาเพื่อจัดการข้อความขนาดใหญ่แบบ real-time ซึ่งเหมาะอย่างยิ่งกับ Event-driven Architecture

จุดเด่นของ Kafka

  • รองรับการสเกลสูงมาก
  • เก็บ Event ได้หลายวัน/สัปดาห์
  • สามารถ Reprocess ข้อมูลได้
  • รองรับระบบที่มีหลาย Consumer

คำศัพท์ที่ต้องรู้ใน Kafka

  • Producer: ตัวส่ง Event
  • Consumer: ตัวรับ Event
  • Broker: Server ที่รับผิดชอบการจัดเก็บ Event
  • Topic: หมวดหมู่ของ Event เช่น “user-created”, “order-placed”
  • Partition: การแบ่ง topic เพื่อรองรับ parallel

ตัวอย่างการใช้ Kafka ในระบบ E-commerce

  • User สั่งซื้อสินค้า → สร้าง Event “OrderPlaced”
  • ระบบ Inventory ลดจำนวนสินค้า
  • ระบบ Email ส่งอีเมลยืนยัน
  • ระบบ Payment ตรวจสอบการชำระเงิน

ทั้งหมดนี้สามารถทำงานแยกกันโดยไม่มีการเรียก API ตรง ซึ่งช่วยลด Coupling และเพิ่ม Flexibility

ตัวอย่างโค้ด Python ส่ง Event ด้วย Kafka

from kafka import KafkaProducer
import json

producer = KafkaProducer(
    bootstrap_servers='localhost:9092',
    value_serializer=lambda v: json.dumps(v).encode('utf-8')
)

event = {"order_id": 123, "status": "placed"}
producer.send('order-topic', value=event)
producer.flush()

ข้อดีของ Event-driven Architecture

  • ระบบหลวม (Loose Coupling)
  • ขยายระบบง่าย เพิ่ม Consumer ได้ทันที
  • เก็บ Event ไว้ใช้ในอนาคตได้
  • รองรับ High Throughput

ข้อควรระวัง

  • ต้องออกแบบ Topic และ Partition อย่างรอบคอบ
  • ระบบ Debug อาจยาก เพราะทุกอย่างแยกกัน
  • ต้องมีเครื่องมือ Monitor ที่ดี เช่น Prometheus, Grafana

Kafka vs RabbitMQ?

  • Kafka: เหมาะกับ Big Data, Logging, Real-time stream processing
  • RabbitMQ: เหมาะกับระบบขนาดกลาง-เล็ก ที่ต้องการ reliable queue

สรุป

Event-driven Architecture และ Apache Kafka คือเครื่องมือที่ช่วยให้ระบบซอฟต์แวร์มีความยืดหยุ่นสูง ตอบสนองเร็ว และสามารถเติบโตได้ในอนาคต หากคุณเริ่มสร้างระบบขนาดใหญ่ หรือเน้นการ scale หลาย microservices — การนำ EDA เข้ามาใช้คือการลงทุนที่คุ้มค่ามาก

ภาพประกอบจาก: Unsplash & Medium (Kafka Architecture)

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *