จากสิ่งที่ฉันเข้าใจเกี่ยวกับความสอดคล้องในที่สุดบริการเหล่านี้ (ผู้บริโภค) จะได้รับเหตุการณ์ในเวลาเดียวกันและดำเนินการแยกต่างหากซึ่งในสถานการณ์ที่ดีจะนำไปสู่ข้อมูลที่สอดคล้องกัน
ไม่ไม่จำเป็น ตามที่ฉันแสดงความคิดเห็นเราไม่สามารถยกเลิกอีเมลที่ส่งดังนั้นเราจึงยังต้องการ "ลำดับ" เรียงลำดับ IPCมากกว่าการจัดการข้อมูลเหตุการณ์ที่ขับเคลื่อนด้วยไม่ได้รับการยกเว้นของ orchestation 1
ตัวอย่างเช่นไม่ควรส่งอีเมลเว้นแต่ว่าการทำธุรกรรมก่อนหน้านี้จะเสร็จสมบูรณ์และบริการอีเมลได้รับการพิสูจน์ 3
อย่างไรก็ตามจะเกิดอะไรขึ้นถ้าบริการล้มเหลวในการประมวลผลเหตุการณ์ เช่นการตัดการเชื่อมต่ออย่างฉับพลันข้อผิดพลาดของฐานข้อมูล ฯลฯ ... รูปแบบ / การปฏิบัติที่ดีในการจัดการกับความล้มเหลวของธุรกรรมคืออะไร
ทักทายกับความล้มเหลวของการคำนวณแบบกระจาย พวกมันคือสิ่งที่ทำให้สิ่งต่าง ๆ ซับซ้อนและตามปกติไม่มีกระสุนเงินที่จะจัดการกับพวกเขา
ก่อนที่จะเริ่มการเดินทางเพื่อค้นหา Lost Ark เราต้องพิจารณาถามองค์กรก่อน บ่อยครั้งที่การแก้ปัญหาคือในวิธีการที่องค์กรเผชิญกับปัญหาเหล่านี้ในโลกแห่งความจริง
ทุกคน (แผนก) ทำอะไรเมื่อข้อมูลบางอย่างขาดหายไปหรือไม่สมบูรณ์
เราจะได้ตระหนักว่าแผนกต่าง ๆ มีโซลูชั่นที่แตกต่างกันซึ่งรวมกันเป็นโซลูชั่นที่จะดำเนินการ
อย่างไรก็ตามนี่คือแนวทางปฏิบัติบางอย่างที่สามารถช่วยเราในการทำตามกลยุทธ์
แทนที่จะทำให้แน่ใจว่าระบบอยู่ในสถานะที่สอดคล้องกันตลอดเวลา แต่เราสามารถยอมรับได้ว่าระบบจะได้รับมันในบางจุดในอนาคต วิธีนี้มีประโยชน์อย่างยิ่งสำหรับการดำเนินธุรกิจในระยะยาว
วิธีการที่ระบบจะเข้าถึงความสอดคล้องนั้นแตกต่างกันไปในแต่ละระบบ อาจเกี่ยวข้องกับกระบวนการอัตโนมัติจนถึงการแทรกแซงของมนุษย์บางประเภท ยกตัวอย่างเช่นปกติพยายามมันอีกครั้งในภายหลังหรือติดต่อกับบริการลูกค้า
ยกเลิกการดำเนินงานทั้งหมด
ใส่ระบบกลับเข้าสู่สถานะที่สอดคล้องกันผ่านการทำธุรกรรมการชดเชย อย่างไรก็ตามเราต้องคำนึงถึงว่าการทำธุรกรรมเหล่านี้อาจล้มเหลวเช่นกันสิ่งที่อาจนำเราไปสู่จุดที่ความไม่สอดคล้องกันนั้นยากยิ่งขึ้นในการแก้ไข และอีกครั้งเราไม่สามารถยกเลิกอีเมลที่ส่งได้
สำหรับธุรกรรมจำนวนน้อยวิธีการนี้มีความเป็นไปได้เนื่องจากจำนวนธุรกรรมที่มีการชดเชยต่ำเกินไป หากมีธุรกรรมทางธุรกิจหลายอย่างที่เกี่ยวข้องกับ IPC การจัดการธุรกรรมที่ชดเชยหนึ่งรายการสำหรับแต่ละรายการนั้นจะเป็นสิ่งที่ท้าทาย
ถ้าเราไปเพื่อชดเชยการทำธุรกรรมที่เราจะได้พบกับรูปแบบการออกแบบวงจรที่จะเป็นประโยชน์มาก - และบังคับฉันจะกล้าที่จะพูด -
การทำธุรกรรมแบบกระจาย
มีแนวคิดที่จะขยายการทำธุรกรรมหลายรายการภายในรายการเดียวผ่านกระบวนการปกครองโดยรวมที่รู้จักในฐานะผู้จัดการของธุรกรรม อัลกอริทึมที่พบบ่อยสำหรับการจัดการการทำธุรกรรมการกระจายสองเฟสกระทำ
ข้อกังวลหลักของการทำธุรกรรมแบบกระจายคือพวกเขาต้องอาศัยการล็อคทรัพยากรในช่วงเวลาชีวิตของมันและอย่างที่เรารู้ว่าสิ่งต่าง ๆ อาจผิดพลาดสำหรับผู้จัดการธุรกรรมด้วยเช่นกัน
หากผู้จัดการธุรกรรมได้รับผลกระทบเราสามารถจบลงด้วยการล็อคหลาย ๆ อันในบริบทที่แตกต่างกันซึ่งส่งผลให้เกิดพฤติกรรมที่ไม่คาดคิดเนื่องจากการเข้าคิวข้อความ 2
การสลายตัวของการดำเนินงาน ทำไม?
หากคุณกำลังสลายระบบที่มีอยู่และค้นหาชุดของแนวคิดที่ต้องการให้อยู่ภายในขอบเขตการทำธุรกรรมเพียงครั้งเดียว
แซมนิวแมน
ตามข้อโต้แย้งข้างต้นแซมในหนังสือMicroservices Buildingของเขาระบุว่าถ้าเราจริง ๆ แล้วไม่สามารถมีความสอดคล้องในที่สุดเราควรหลีกเลี่ยงการแยกการดำเนินการตอนนี้
หากเราไม่สามารถแบ่งการดำเนินงานบางอย่างออกเป็นสองธุรกรรมหรือมากกว่านั้นอาจกล่าวได้ว่า - อาจเป็นไปได้ - ธุรกรรมเหล่านี้อยู่ในบริบทที่มีขอบเขตเดียวกันหรือ - อย่างน้อยก็เป็นบริบทที่ตัดกัน
ยกตัวอย่างเช่นในกรณีของเราเรามาตระหนักถึงการทำธุรกรรมที่ # 1 และ # 2 มีความสัมพันธ์แน่นอีกคนหนึ่งและอาจทั้งอาจจะจัดอยู่เหมือนกัน bounded บริบทบัญชี , ผู้ใช้ , สมัครสมาชิก , สิ่งที่ ...
พิจารณาวางการดำเนินการทั้งสองไว้ภายในขอบเขตของธุรกรรมเดียวกัน มันจะทำให้การดำเนินการทั้งหมดง่ายขึ้นในการจัดการ นอกจากนี้เรายังยกระดับความสำคัญของแต่ละธุรกรรม อาจเป็นไปได้หากธุรกรรม # 2 ล้มเหลวก็ไม่ควรประนีประนอมการดำเนินงานทั้งหมด ในกรณีที่มีข้อสงสัยถามไปยังองค์กร
1: ไม่ใช่การประสานเสียงแบบที่คุณคิด ฉันไม่ได้พูดถึงการดัดแปลงของ ESB ฉันกำลังพูดถึงการทำให้การบริการตอบสนองต่อเหตุการณ์ที่เหมาะสม
2: คุณอาจพบความคิดเห็นที่น่าสนใจของSam Newmanเกี่ยวกับการทำธุรกรรมแบบกระจาย
3: ตรวจสอบคำตอบของ David Parker's เกี่ยวกับเรื่องนี้