در بحث معماری های مبتنی بر رویداد (event-driven) همیشه یکی از مهم ترین مسائل خودکفایی (idempotency) و مرتب سازی (ordering) است.
طبق تجربیاتی که از شرکت های بزرگ وجود داره و همچنین تجربه شخصی ای که در این زمینه بوجود اومده، مساله مرتب سازی میتونه بسیار چالش برانگیز باشه و شاید یه جورایی با اصل قضیه event driven کردن سیستم هم مغایرت داشته باشه. بنابراین خیلی از سرویس ها best-effort ordering رو پیشنهاد میکنند، این یعنی اینکه سرویس سعی میکنه همیشه event هارو به ترتیب publish شدنشون broadcast و deliver کنه، اما تضمین نمیکنه که همیشه این اتفاق بیفته. به همین دلیل در معماری سیستم ما باید حواسمون باشه که به هیچ وجه روی ترتیب دریافت event ها حساب باز نکنیم. هر چند گاهی اوقات به خاطر ذات بیزینس مجبور هستیم order رو حفظ کنیم. مقاله ای که در پایان مقاله لینکش رو قرار دادم راه حل هایی برای این مساله پیشنهاد داده، هر چند در نهایت باز هم نویسنده مقاله تاکید میکنه که سعی کنید تا میتونید معماری سیستم وابسته نشه به مرتب بودن eventها.
مساله خودکفایی یا همون idempotency هم به این موضوع اشاره داره که سیستم باید انتظار این رو داشته باشه که یک event معین رو بیش از یکبار دریافت کنه، اما هرگز بیشتر از یکبار نباید state سیستم رو با توجه به اون رویداد (event) تغییر بده. در واقع اگه سیستم یک رویداد رو ۱۰ بار هم دریافت کنه و وضعیت (state) سیستم دقیقا همون وضعیتی باشه که انگار رویداد رو فقط یکبار دریافت کرده این سیستم خودکفاست.
مقاله زیر سعی کرده این دو موضوع رو مفصل تر توضیح بده
Idempotency and Ordering in Event-Driven Systems
همچنین میتونید از طریق لینک زیر در خبرنامه ! Hey Mate عضو بشید.