ผู้ใช้ส่งอินพุตที่ไม่คาดคิดและระบบต้องตรวจสอบที่ขอบเขตความเชื่อถือ จึงถามว่า เว็บแอปพลิเคชันต้องการ Transaction ที่ครอบคลุมหลาย Microservices เช่น ระบบ Order ต้องตัดสต็อกสินค้าและตัดยอดเงินในบัญชีพร้อมกัน หากบริการใดบริการหนึ่งล้มเหลวต้องยกเลิกทั้งหมด ควรใช้ Pattern ใด
กใช้ Two-Phase Commit (2PC) เพราะรองรับ ACID Transaction ข้ามหลาย Service
ขใช้ Database Foreign Key Constraint เพื่อบังคับความสอดคล้อง
คใช้ Single Shared Database สำหรับทุก Microservice เพื่อให้ Transaction ทำงานได้
งใช้ Saga Pattern โดยแบ่งเป็น Compensating Transactions สำหรับแต่ละ Step เมื่อเกิดความล้มเหลว
เฉลยอธิบาย
Saga Pattern เป็นแนวทางมาตรฐานสำหรับ Distributed Transaction ใน Microservices โดยแบ่ง Transaction ออกเป็น Series of Local Transactions แต่ละ Step มี Compensating Transaction สำหรับยกเลิกหากเกิดความล้มเหลว ตัวเลือก A Two-Phase Commit มีปัญหา Blocking และ Single Point of Failure ไม่เหมาะกับ Distributed System, ตัวเลือก C Foreign Key ใช้ได้เฉพาะ Database เดียวกัน, ตัวเลือก D Shared Database ขัดหลัก Loose Coupling ของ Microservices