Workflow (เวิร์กโฟลว์)

เมื่อ ต้องการให้ไมโครเซอร์วิสหลายตัวทำงานร่วมกันเพื่อทำการดำเนินการโดยรวมบางอย่าง ให้มองหาการโมเดลกระบวนการนั้นอย่างชัดเจนด้วย saga ซึ่งเป็นหัวข้อที่เราสำรวจใน Chapter 6

โดยทั่วไปแล้ว distributed transaction ควรถูกหลีกเลี่ยงในสถานการณ์ที่คุณสามารถใช้ saga แทนได้ distributed transaction เพิ่มความซับซ้อนอย่างมากให้กับระบบ มี failure mode ที่มีปัญหา และมักไม่ให้ผลลัพธ์ตามที่คุณคาดหวังแม้ตอนที่มันทำงานได้ก็ตาม Saga เกือบทุกกรณีเหมาะกับการนำ business process ที่ครอบคลุมหลายไมโครเซอร์วิสไปปฏิบัติมากกว่า

มี saga สองรูปแบบให้พิจารณา คือ saga แบบ orchestrated และ saga แบบ choreographed Orchestrated saga ใช้ตัวประสานงานกลาง (centralized orchestrator) เพื่อประสานงานกับไมโครเซอร์วิสตัวอื่นและมั่นใจว่างานถูกทำ โดยทั่วไปนี่เป็นแนวทางที่ง่ายและตรงไปตรงมา แต่ตัวประสานงานกลางอาจกลายเป็นตัวทำงานมากเกินไปถ้าไม่ระวัง และอาจกลายเป็นแหล่งความขัดแย้งเมื่อหลายทีมทำงานในกระบวนการทางธุรกิจเดียวกัน ด้วย choreographed saga จะไม่มีตัวประสานงานกลาง แต่ความรับผิดชอบสำหรับกระบวนการทางธุรกิจถูกกระจายไปยังไมโครเซอร์วิสที่ทำงานร่วมกันหลายตัว นี่อาจเป็นสถาปัตยกรรมที่ซับซ้อนกว่าในการนำไปปฏิบัติ และต้องใช้ความพยายามมากขึ้นเพื่อมั่นใจว่าสิ่งที่ถูกต้องกำลังเกิดขึ้น แต่ในอีกด้านหนึ่ง มันมีแนวโน้มเกิด coupling น้อยกว่ามาก และทำงานได้ดีกับหลายทีม

ส่วนตัวผมชอบ choreographed saga แต่นั่นก็เพราะผมใช้มันมาเยอะและทำผิดพลาดมากมายในการนำมันไปปฏิบัติ คำแนะนำทั่วไปของผมคือ orchestrated saga ทำงานได้ดีเมื่อทีมเดียวรับผิดชอบทั้งกระบวนการ แต่จะมีปัญหามากขึ้นเมื่อมีหลายทีมเข้ามาเกี่ยวข้อง Choreographed saga สามารถคุ้มค่ากับความซับซ้อนที่เพิ่มขึ้นในสถานการณ์ที่คาดว่าหลายทีมจะทำงานร่วมกันในกระบวนการหนึ่ง