แอปพลิเคชันแบบ Event-driven

การพัฒนาแอปพลิเคชันบน AWS

Ricardo Sueiras

Principal Technologist

Event คืออะไร

 

event-vs-messages

  • Message คือหน่วยของงานที่ส่งระหว่างคอมโพเนนต์
  • Event คือการบันทึกว่ามีบางอย่างเกิดขึ้นแล้ว
  • Service สื่อสารกันโดยการเผยแพร่ event
  • Service อื่นตอบสนองต่อ event เหล่านั้นอย่างอิสระ
  • การแยกส่วน (Decoupling) ลดการพึ่งพาและเพิ่ม scalability
การพัฒนาแอปพลิเคชันบน AWS

Event producers

 

event producers

  • Producer สร้างและเผยแพร่ event เมื่อมีการดำเนินการเกิดขึ้น
  • ทั้ง AWS service และแอปพลิเคชันที่กำหนดเองสามารถสร้าง event ได้
  • การอัปโหลดไฟล์ไปยัง Amazon S3 เป็นตัวอย่างหนึ่ง
  • Amazon S3 จะส่ง event แจ้งว่ามีออบเจกต์ถูกสร้างขึ้น
การพัฒนาแอปพลิเคชันบน AWS

Event consumers

 

consumers

  • Consumer รับและประมวลผล event แบบ asynchronous
  • Event source ใช้รูปแบบการส่งที่แตกต่างกัน
  • แบบ Push: ส่ง event ทันทีที่เกิดขึ้น
  • แบบ Poll: Consumer ดึง event เมื่อทำการ poll
การพัฒนาแอปพลิเคชันบน AWS

Event source mapping

  • AWS Lambda เป็น event consumer ที่ใช้งานทั่วไป
  • Lambda จะ poll แหล่งข้อมูลและดึง record เป็นชุดโดยอัตโนมัติ

 

event source mapping

การพัฒนาแอปพลิเคชันบน AWS

การปรับแต่ง Lambda event source mapping

  • ปรับแต่ง event source mapping เพื่อเพิ่ม throughput
  • ปรับ batch size เพื่อควบคุมจำนวน record ต่อการเรียกใช้
  • กำหนดค่า retry สำหรับ record ที่ล้มเหลว
  • ใช้ partial batch response บน source ที่รองรับ
  • ReportBatchItemFailures ช่วยหลีกเลี่ยงการประมวลผล record ที่สำเร็จซ้ำ

 

event source mapping

การพัฒนาแอปพลิเคชันบน AWS

Amazon EventBridge

  • EventBridge กำหนดเส้นทาง event ระหว่าง service และแอปพลิเคชัน
  • รองรับการกำหนดเส้นทางแบบ dynamic โดยไม่ต้องผูก service เข้าด้วยกัน
  • แอปพลิเคชันเผยแพร่ event ไปยัง EventBridge
  • Routing rule กำหนดว่า target ใดจะรับ event แต่ละรายการ

 

event bridge

การพัฒนาแอปพลิเคชันบน AWS

ความสามารถของ EventBridge

 

capabilities

  • EventBridge มีความสามารถด้านการกำหนดเส้นทางหลายรูปแบบ
  • Rule ช่วยกระจาย event หนึ่งรายการไปยัง target หลายตัว
  • Scheduled rule ขจัดความจำเป็นในการใช้ cron server
  • Schedule รองรับ expression แบบ rate(), at(), และ cron()
  • Pipe ให้การเชื่อมต่อแบบ point-to-point
  • Pipe ยังรองรับการกรองและแปลงข้อมูลด้วย
การพัฒนาแอปพลิเคชันบน AWS

Event buses

 

event bus

  • Event bus แต่ละประเภทปรับแต่งวิธีกำหนดเส้นทาง event ให้เหมาะสม
  • Default bus รับ event จาก AWS service
  • Custom bus รองรับ event เฉพาะของแอปพลิเคชัน
  • Partner bus รับ event จากผู้ให้บริการภายนอก
  • Rule ทำหน้าที่เชื่อมระหว่าง bus และ target แต่ละตัว
การพัฒนาแอปพลิเคชันบน AWS

Schema discovery

 

event schema and registry

  • Producer และ consumer มักพัฒนาแยกจากกัน
  • การเข้าใจโครงสร้างของ event จึงเป็นสิ่งสำคัญ
  • Schema discovery จะจับโครงสร้างของ event ที่รับเข้ามา
  • ใช้เพื่อตรวจสอบ payload ของ event
  • ใช้เพื่อยืนยันการเชื่อมต่อ
  • ใช้เพื่อสร้าง binding สำหรับภาษาที่รองรับ
การพัฒนาแอปพลิเคชันบน AWS

Schema registry

  • Schema registry เก็บ event schema ของคุณ
  • ช่วยให้นักพัฒนาเข้าใจโครงสร้าง event และสร้าง binding ได้

 

event schema and registry

การพัฒนาแอปพลิเคชันบน AWS

Event filtering

  • การกรองช่วยลดการประมวลผลที่ไม่จำเป็น
  • กำหนด match ด้วย JSON event pattern
  • Pattern จะคัดกรองเฉพาะ event ที่ต้องการ
  • ระบบ downstream จะประมวลผลเฉพาะ event ที่เกี่ยวข้อง

 

event filtering

การพัฒนาแอปพลิเคชันบน AWS

การเรียงลำดับ Event

  • ลำดับของ event ไม่ได้รับประกันเสมอไป
  • บาง service อาจประมวลผล event โดยไม่เรียงลำดับ
  • ใช้ ordering control เพื่อกำหนดลำดับอย่างชัดเจน

 

event ordering

การพัฒนาแอปพลิเคชันบน AWS

การเก็บถาวรและเล่น Event ซ้ำ

 

archiving and replaying

  • EventBridge สามารถเก็บถาวรและเล่น event ซ้ำในภายหลังได้
  • เล่น event ซ้ำเพื่อกู้คืนจากความล้มเหลว
  • เล่น event ซ้ำเพื่อทดสอบ consumer ใหม่
  • เล่น event ซ้ำเพื่อสร้างระบบ downstream ขึ้นใหม่
การพัฒนาแอปพลิเคชันบน AWS

การจัดการข้อผิดพลาด

 

handling errors

  • แอปพลิเคชันแบบ event-driven ต้องจัดการข้อผิดพลาดอย่างปลอดภัย
  • ความล้มเหลวรวมถึง event ที่ซ้ำกัน
    • การประมวลผลที่ล้มเหลว
    • Consumer ที่ไม่พร้อมใช้งาน
  • ออกแบบ consumer ให้เป็น idempotent ทุกครั้งที่ทำได้
การพัฒนาแอปพลิเคชันบน AWS

DLQ และ Destination

 

handling errors

  • ใช้ DLQ เพื่อแยก event ที่ล้มเหลวซ้ำๆ ออกมา
  • ใน EventBridge, DLQ กำหนดค่าต่อ rule target ไม่ใช่ต่อฟังก์ชัน
  • Lambda Destinations ขยายการกำหนดเส้นทางนี้เพิ่มเติม
  • Destination กำหนดเส้นทางทั้งผลลัพธ์ที่สำเร็จและล้มเหลว
การพัฒนาแอปพลิเคชันบน AWS

การทดสอบและยืนยัน Event

  • การทดสอบแอปพลิเคชันแบบ event-driven ช่วยยืนยัน routing
  • ยืนยัน event filtering
  • ยืนยัน event retry
  • ยืนยันการประมวลผลในระบบแบบกระจาย
  • ใช้ AWS SAM เพื่อสร้าง event ทดสอบตัวอย่าง
  • Event ตัวอย่างจำลอง JSON output ที่แท้จริง

 

testing

การพัฒนาแอปพลิเคชันบน AWS

สิ่งที่ควรทดสอบ

  • SAM ช่วยทดสอบในเครื่องก่อน deploy
  • ยืนยันการจับคู่ event pattern
  • ยืนยันพฤติกรรม retry
  • ยืนยันสถานการณ์ throttling
  • ยืนยันการส่ง event ซ้ำ
  • ยืนยันพฤติกรรม consumer แบบ idempotent

 

testing

การพัฒนาแอปพลิเคชันบน AWS

มาฝึกกันเถอะ!

การพัฒนาแอปพลิเคชันบน AWS

Preparing Video For Download...