หลังจากทำบิตการวิจัยมากขึ้นฉัน stumbled เมื่อนี้บทความจากที่ผมได้ดึงคำพูดบางส่วนออกจากที่ฉันคิดว่าจะเป็นประโยชน์สำหรับสิ่งที่ฉันต้องการจะประสบความสำเร็จ (และสำหรับผู้อ่านใด ๆ ในอนาคต) นี่เป็นวิธีนำรูปแบบการเขียนโปรแกรมปฏิกิริยามาใช้กับรูปแบบการเขียนโปรแกรมที่จำเป็น
จัดกิจกรรมจัดหา
แนวคิดในที่นี้คือการนำเสนอการเปลี่ยนแปลงสถานะของแอปพลิเคชันทุกรูปแบบในเหตุการณ์ที่ไม่เปลี่ยนรูป กิจกรรมจะถูกจัดเก็บในรูปแบบบันทึกหรือบันทึกตามที่เกิดขึ้น (เรียกอีกอย่างว่า 'ที่จัดเก็บกิจกรรม') พวกเขายังสามารถสอบถามและจัดเก็บอย่างไม่มีกำหนดโดยมีวัตถุประสงค์เพื่อแสดงให้เห็นว่าสถานะของแอปพลิเคชันโดยรวมมีการพัฒนาอยู่ตลอดเวลา
สิ่งนี้จะช่วยให้ประสบความสำเร็จคือว่าถ้า MICROSERVICE ลงไปยังกิจกรรมอื่น ๆ ที่เกี่ยวข้องกับการที่มันจะได้รับการตีพิมพ์และเหตุการณ์ที่เกิดขึ้นมีการบริโภคโดยการพูด, กรณีอื่น ๆ ของ MICROSERVICE ว่าเมื่อ MICROSERVICE ที่กลับขึ้นมาก็สามารถอ้างถึงนี้event store
เพื่อดึงข้อมูลทั้งหมด เหตุการณ์ที่พลาดไปในช่วงเวลานั้นลดลง
Apache Kafka รับหน้าที่เป็นนายหน้า
พิจารณาการใช้ Apache Kafka ซึ่งสามารถจัดเก็บและส่งเหตุการณ์นับพันต่อวินาทีและมีกลไกการจำลองแบบและการยอมรับข้อบกพร่องในตัว มีที่เก็บถาวรของเหตุการณ์ที่สามารถเก็บไว้ในดิสก์ได้ตลอดเวลาและบริโภคได้ตลอดเวลา (แต่ไม่ได้ลบ) จากหัวข้อ (คิวแฟนซีของ Kafka) ถูกส่งไปยัง
จากนั้นเหตุการณ์จะถูกกำหนด offsets ที่ระบุอย่างไม่เจาะจงในหัวข้อ - Kafka สามารถจัดการ offsets เองได้อย่างง่ายดายให้ "อย่างมากที่สุดครั้งเดียว" หรือ "อย่างน้อยหนึ่งครั้ง" ความหมายของการจัดส่ง แต่พวกเขายังสามารถเจรจาเมื่อผู้บริโภคเหตุการณ์เข้าร่วมหัวข้อ อนุญาตให้ microservices เริ่มต้นการบริโภคกิจกรรมจากที่ใดก็ได้ตามเวลาที่กำหนด - โดยปกติแล้วผู้บริโภคจะออกไป หากการชดเชยเหตุการณ์ที่ใช้ล่าสุดถูกเก็บรักษาไว้เป็นธุรกรรมในหน่วยเก็บข้อมูลภายในของเซอร์วิสเมื่อการดำเนินการเสร็จสมบูรณ์แล้วการชดเชยนั้นสามารถนำมาใช้เพื่อให้เกิดความหมายของการจัดส่งเหตุการณ์
ในความเป็นจริงเมื่อผู้บริโภคระบุตัวตนให้คาฟคาคาฟคาจะบันทึกข้อความที่ส่งไปยังผู้บริโภครายใดเพื่อที่จะไม่ให้บริการมันอีก
โศกนาฏกรรม
สำหรับ usecases ที่ซับซ้อนมากขึ้นซึ่งการสื่อสารระหว่างบริการต่าง ๆ เป็นสิ่งจำเป็นจริง ๆ ความรับผิดชอบในการทำให้เสร็จสิ้น usecase จะต้องได้รับการยอมรับอย่างดี - usecase นั้นจะกระจายอำนาจและเสร็จสิ้นก็ต่อเมื่อบริการทั้งหมดที่เกี่ยวข้องยอมรับว่างานของพวกเขาสำเร็จ และมาตรการแก้ไขต้องถูกกระตุ้นให้ย้อนกลับสถานะท้องถิ่นที่ไม่ถูกต้องใด ๆ
นี่คือเมื่อเทพนิยายเข้ามาเล่น Saga คือลำดับของธุรกรรมในท้องถิ่น ธุรกรรมในท้องถิ่นแต่ละรายการจะอัพเดตฐานข้อมูลและเผยแพร่ข้อความหรือเหตุการณ์เพื่อกระตุ้นการทำธุรกรรมในท้องถิ่นครั้งต่อไปใน saga หากการทำธุรกรรมในท้องถิ่นล้มเหลวเนื่องจากเป็นการฝ่าฝืนกฎทางธุรกิจ Saga จะดำเนินการตามลำดับของการชดเชยธุรกรรมที่ยกเลิกการเปลี่ยนแปลงที่เกิดขึ้นจากการทำธุรกรรมในท้องถิ่นก่อนหน้านี้ อ่านนี้สำหรับข้อมูลเพิ่มเติม