Common Risks (ความเสี่ยงทั่วไป)

หนึ่งในความเสี่ยงหลักที่เกี่ยวข้องกับ EDA คือการประมวลผล event ที่ไม่กำหนดแน่นอน (nondeterministic) ของมันสามารถก่อให้เกิดผลข้างเคียง เช่น event processor trigger derived event โดยไม่คาดคิด หรือไม่ตอบสนองต่อ event ทั้งที่ควรจะตอบสนอง event workflow อาจซับซ้อนมากใน event-driven architecture และหลายครั้งก็ยากที่จะรู้แน่ชัดว่าจะเกิดอะไรขึ้นเมื่อ event ถูก trigger

ความเสี่ยงใหญ่อีกอย่างคือการมี static coupling มากเกินไป (และด้วยเหตุนี้จึงเปราะบาง) ภายใน event-driven architecture แม้ EDA จะ coupled แบบ dynamic สูงมาก แต่ event payload contract (ดู “Event Payload” ) ก็สามารถนำมาซึ่ง static coupling ที่แน่นหนาได้เช่นกัน การเปลี่ยน contract อาจเป็นงานที่น่ากลัว เพราะสถาปนิกไม่รู้เสมอไปว่า event processor ตัวไหนตอบสนองต่อ event หนึ่งๆ บ้าง เมื่อ event payload contract เปลี่ยนแปลงจริง มันอาจส่งผลกระทบเชิงลบต่อ event processor อื่นๆ หลายตัว เพิ่มความเปราะบางโดยรวมของสไตล์สถาปัตยกรรมนี้ key-based event payload ช่วยลดความเสี่ยงนี้ได้ แต่ความเสี่ยงของแนวทางนี้ก็รวมถึงปัญหาด้าน scalability และ performance และความเป็นไปได้ที่จะเกิด anemic event (ดู “Event Payload” )

ระวังการสื่อสารแบบซิงโครนัสมากเกินไประหว่าง event processor ด้วยเช่นกัน event-driven architecture ได้พลังพิเศษของมันมาจาก event processor ที่ decoupled แบบ dynamic สูง อย่างไรก็ตาม ถ้า event processor ยังต้องสื่อสารแบบซิงโครนัสอยู่เรื่อยๆ นั่นเป็นสัญญาณที่ดีว่า EDA ไม่ใช่สไตล์สถาปัตยกรรมที่เหมาะสมที่สุดแล้ว

สุดท้าย การจัดการ state โดยรวมเป็นทั้งความเสี่ยงและความท้าทายใน EDA เป็นเรื่องดีที่จะรู้ว่า initiating event ถูกประมวลผลเสร็จสมบูรณ์แล้วเมื่อไร แต่นั่นอาจหายากมากเนื่องจากการประมวลผล event แบบขนาน ไม่กำหนดแน่นอน และอะซิงโครนัสของ EDA บางครั้งสถาปนิกอาจระบุจุดสิ้นสุดการประมวลผลได้และให้ event processor ที่รับ initiating event มา subscribe event “จบ” นั้น แต่ในกรณีส่วนใหญ่มันยากที่จะระบุได้ ดังนั้นจึงยากที่จะรู้ว่า initiating event ถูกประมวลผลเสร็จสมบูรณ์เมื่อไร หรือแม้แต่ state ปัจจุบันของมันคืออะไร