معماری رویدادمحور (Event Driven Architecture) رویکردی در طراحی سیستمهای نرمافزاری است که بر مبنای تولید و مصرف رویدادها عمل میکند. در این مطلب، به توضیح این معماری و اجزای اصلی آن شامل تولیدکنندهها، مصرفکنندهها و واسطهها میپردازیم و مثالهای کاربردی از صنایع مختلف مانند خردهفروشی و تولید را بررسی میکنیم. همچنین به مزایای استفاده از این معماری در بهبود واکنش سریع به تغییرات و افزایش مقیاسپذیری سیستمها اشاره خواهیم کرد. با ما همراه باشید تا با جزئیات بیشتری از این رویکرد مُدرن در طراحی سیستمهای دیجیتال آشنا شوید.
Event Driven Architecture چیست؟
معماری Event-driven یا به اختصار EDA الگوی طراحی نرمافزار است که به سازمانها اجازه میدهد «رویدادها» (Event) یا لحظات مهم در کسبوکارها (مثل تراکنش، بازدید سایت، ترک سبد خرید و غیره) را تشخیص داده و به آنها در زمان واقعی یا نزدیک به زمان واقعی واکنش نشان دهند. این الگو جایگزین معماری سُنتی «درخواست/پاسخ» (request/response) میشود که در آن سرویسها باید منتظر پاسخ میماندند تا به کار بعدی بروند. جریان معماری Event-driven توسط eventها هدایت میشود و به گونهای طراحی شده که به آنها پاسخ داده یا عملی را در پاسخ به یک event انجام دهد.
معماری Event-driven اغلب بهعنوان ارتباط «asynchronous» یا «غیرهمزمان» شناخته میشود. یعنی فرستنده و گیرنده لازم نیست برای انجام کار بعدی منتظر یکدیگر بمانند و سیستمها به یک پیام وابسته نیستند. مثلاً تماس تلفنی ارتباط «همزمان» محسوب میشود، مثل معماری سنتیِ «درخواست/پاسخ»، که در آن درخواستدهنده منتظر پاسخ میماند. یک مثال غیرهمزمان، پیامک است. شما پیامک میفرستید و ممکن است ندانید که گیرنده کیست یا آیا کسی پیام را میخواند، اما منتظر پاسخ نمیمانید.
![معماری رویداد محور Event Driven Architecture](https://blog.hamravesh.com/blog/wp-content/uploads/2024/05/Event-Driven_Architecture.png)
سیر تکامل معماری Event Driven و مقایسه آن با معماری دادهمحور
در چند سال گذشته، تمرکز از دادههای ثابت (Service Oriented Architecture) به سمت رویدادها (Event-driven Architecture) تغییر کرده است. بهجای انباشتن دادهها و ایجاد Data Lake، اکنون به دادههای در جریان و ردیابی آنها در حرکت توجه میشود. سیستمهای سنتی عمدتاً در یک مدل دادهمحور کار میکردند که دادهها منبع اصلی حقیقت بودند. تغییر به سمت معماری Event-driven به معنای حرکت از مدل دادهمحور به مدل رویدادمحور است.
در مدل رویدادمحور، دادهها همچنان مهم هستند، اما eventها به مهمترین بخش تبدیل میشوند. در مدل سرویسمحور، اولویت اصلی حفظ دادهها بود، اما در معماری Event-driven، اولویت اصلی پاسخ به رویدادها بهصورت همزمان است؛ زیرا ارزش رویدادها با گذشت زمان کاهش پیدا میکند. با این حال، امروزه معماری سرویسمحور و معماری رویدادمحور اغلب به همراه هم استفاده میشوند.
استفاده از log و مخزن اطلاعات در Event Driven Architecture
معماری Event-driven اغلب از log برای پیگیری رویدادها استفاده میکند. تحلیلگران eventها را بهعنوان وقایع رخ داده غیرقابل تغییر در نظر میگیرند. اگر بخواهید بفهمید چه اتفاقی در گذشته افتاده، میتوانید به log مراجعه کرده و آن را دوباره بازبینی کنید. در حالی که در مدل دادهمحور، تمرکز اصلی بر وضعیت فعلی دادهها است. آخرین قیاسی که تحلیلگران برای توصیف تفاوت بین معماری دادهمحور و رویدادمحور استفاده میکنند، مقایسه آنها با یک مخزن اطلاعات و یک سیستم عصبی است که پیامها را در سراسر سازمان منتقل میکند.
Event Producerها در معماری رویدادمحور
در معماری Event-driven، تولیدکنندههای رویداد را داریم که نوتیفیکیشنهای event را ایجاد و ارسال میکنند و ممکن است یک یا چند مصرفکننده event هم وجود داشته باشد که در آنجا دریافت event باعث اجرای منطق پردازش (Processing Logic) میشود.
مثلاً فرض کنید نتفلیکس فیلم جدیدی را آپلود کرده است. چندین اپلیکیشن میتوانند منتظر این نوتیفیکیشن باشند و سپس سیستمهای داخلی خود را فعال کنند تا اطلاعات مربوط به آن event را به کاربرانشان بفرستند. این روش با پیامرسانی درخواست-پاسخ سنتی متفاوت است؛ در اینجا اپلیکیشنها در حال اجرا هستند و حتی اگر منتظر این رویداد باشند، معطل نمیمانند و میتوانند به محض دریافت پیام، پاسخ دهند. به این ترتیب، بسیاری از سرویسها میتوانند بهصورت همزمان اجرا شوند.
مفهوم Event در Event Driven Architecture چیست؟
رویداد یا همان Event به تغییر وضعیت یک سیستم کلیدی کسبوکار گفته میشود. مثلاً، شخصی محصولی میخرد، فردی برای پرواز چکاین میکند یا اتوبوسی دیر به مقصد میرسد. اگر دقت کنیم، Eventها در همه جا و در هر صنعتی رخ میدهند. هر چیزی که یک «پیام» ایجاد کند، از تولید و انتشار گرفته تا شناسایی و مصرف، بهعنوان رویداد شناخته میشود. رویداد از پیام جداست، چون Event وقوع یک تغییر است و پیام، اعلان (نوتیفیکیشن) در حال حرکتِ این وقوع را انتقال میدهد. در معماری Event-driven، رویداد ممکن است یک یا چند عمل یا فرآیند را در پاسخ به وقوع خود تحریک (Trigger) کند. نمونههایی از رویدادها شامل موارد زیر هستند:
- درخواست برای بازنشانی رمز عبور
- تحویل بسته به مقصد
- بهروزرسانی موجودی یک انبار مواد غذایی
- رد تلاش برای دسترسی غیرمجاز
هر یک از این رویدادها ممکن است یک یا چند عمل یا فرآیند را در پاسخ، Trigger کنند. یکی از پاسخها ممکن است به سادگیِ ثبت Event برای اهداف نظارتی باشد. پاسخهای دیگر میتوانند شامل موارد زیر باشند:
- ارسال ایمیل برای بازنشانی رمز عبور به مشتری
- بسته شدن فروش بلیط
- ثبت سفارش جدید برای کالاهای در حال اتمام مانند کاهو
- قفل شدن حساب و اطلاعرسانی به پرسنل امنیتی
در معماری Event-driven، زمانی که نوتیفیکیشن رویداد ارسال میشود، سیستم ثبت میکند که تغییری رخ داده است و منتظر میماند تا پاسخ را به هر فردی که درخواست کرده، هر زمان که درخواست کند، ارسال کند. اپلیکیشنی که آن پیام را دریافت کرده میتواند بلافاصله پاسخ دهد یا تا زمانی که تغییر وضعیت مورد انتظار رخ دهد، منتظر بماند.
اپلیکیشنهای مبتنی بر معماری Event-driven امکان ایجاد کسبوکارهای دیجیتال سریعتر، مقیاسپذیرتر، با زمینه بهتر و پاسخگوتر را فراهم میکنند.
نحوه عملکرد معماری Event Driven چگونه است؟
اجزای معماری رویدادمحور شامل ۳ بخش «تولیدکننده» (Producer)، «مصرفکننده» (Consumer) و «واسطه» (Broker) است. واسطه ممکن است اختیاری باشد، بهخصوص زمانی که تولیدکننده و مصرفکننده مستقیماً با هم در ارتباط هستند و تولیدکننده eventها را به مصرفکننده میفرستد. به عنوان مثال، تولیدکننده میتواند رویدادها را فقط به یک پایگاه داده یا انبار داده ارسال کند تا رویدادها برای تحلیل جمعآوری و ذخیره شوند. معمولاً در شرکتها، منابع متعددی وجود دارند که انواع مختلف رویدادها را ارسال میکنند و یک یا چند مصرفکننده به برخی یا همه آن رویدادها علاقهمند هستند.
به یک مثال توجه کنیم. مثلاً اگر شما خردهفروش هستید، ممکن است تمامی خریدهایی را که در تمام فروشگاههای شما در سراسر جهان انجام میشوند، جمعآوری کنید. این رویدادها را که بر تقلب نظارت میکنند به معماری رویدادمحور خود میخورانید و آنها را به پردازشگر کارت اعتباری ارسال میکنید یا هر اقدام مورد نیاز دیگر را انجام میدهید. برای تولیدکننده، شما انواع دادهها را از تجهیزات خود دریافت میکنید. این دادهها به شما اطلاعاتی مانند دما و فشار را میدهند تا بتوانید بسته به آنچه دادهها به شما میگویند، این رویدادها را بهصورت لحظهای نظارت کنید و اقداماتی مانند پیشبینی خرابیها یا برنامهریزی تعمیرات را انجام دهید.
جمعبندی
معماری رویدادمحور رویکرد نوینی در طراحی سیستمهای نرمافزاری است که بر اساس تولید و مصرف رویدادها کار میکند. این معماری از تولیدکنندگان و مصرفکنندگان رویدادها تشکیل شده است و میتواند شامل واسطههایی برای مدیریت بهتر جریان دادهها باشد. در این سیستم، رویدادها به صورت لحظهای تولید و پردازش میشوند، که این امر امکان واکنش سریع به تغییرات و رویدادها را فراهم میکند. به عنوان مثال، در صنعت خردهفروشی، این معماری میتواند برای نظارت بر خریدها و تشخیص تقلب استفاده شود و در تولید، میتواند دادههای مربوط به تجهیزات را برای پیشبینی خرابیها و برنامهریزی تعمیرات جمعآوری کند. در کل، معماری رویدادمحور به کسبوکارها امکان میدهد تا سامانههای دیجیتال خود را به شکل انعطافپذیرتر، مقیاسپذیرتر و پاسخگوتر طراحی کنند.