تا حالا شده فکر کنی چطوری بعضی از اپلیکیشنها میتونن اینقدر سریع و دقیق به درخواستهات جواب بدن؟ مثلاً وقتی توی یه سایت خرید آنلاین هستی و با کلیک روی یه محصول، بلافاصله محصولات مشابه هم بهت پیشنهاد میشه. این جادوی معماری مبتنی بر رویداد (EDA) است. EDA یه روش جذاب و کارآمد برای طراحی سیستمهای نرمافزاریه که باعث میشه اپلیکیشنها سریعتر، منعطفتر و هوشمندتر کار کنن. این معماری به سیستمها اجازه میده که بهصورت همزمان و بدون نیاز به انتظار، به رویدادها واکنش نشون بدن. در ادامه قراره بیشتر با این معماری آشنا بشیم و ببینیم چطور میتونه به رشد و موفقیت کسبوکارت کمک کنه.
معماری مبتنی بر رویداد (Event-Driven Architecture) یه روش طراحی نرمافزاریه که به اپلیکیشنهای جدا از هم اجازه میده تا به صورت غیرهمزمان (یعنی بدون اینکه منتظر هم بمونن) رویدادها رو از طریق یه واسطه به اسم "مدیریت کننده رویداد" منتشر کنن یا بهشون گوش بدن.
این معماری به سیستمهای فناوری اطلاعات سازمانی کمک میکنه که اطلاعات بهطور همزمان بین اپلیکیشنها، میکروسرویسها و دستگاههای متصل جریان پیدا کنه، اونم درست وقتی که یه رویداد در کسبوکار اتفاق میافته.
در این روش، یه واسطه به اسم "مدیریت کننده رویداد" بین اپلیکیشنها قرار میگیره و باعث میشه که اپلیکیشنها و دستگاهها نیازی نداشته باشن بدونن اطلاعات رو کجا میفرستن یا از کجا دارن اطلاعات دریافت میکنن. به این میگن کاهش وابستگی.
هر تغییری که توی وضعیت رخ میده، یه رویداد محسوب میشه. توی معماری مبتنی بر رویداد، هر اتفاقی که توی کسبوکار یا سیستم شما میافته، مثل درخواستهای مشتری، بهروزرسانی موجودی، یا خوندن اطلاعات از سنسورها، یه رویداد به حساب میاد.
ارزش دونستن یه رویداد و واکنش نشون دادن بهش با گذشت زمان کاهش پیدا میکنه. هرچقدر سریعتر بتونی اطلاعات رو درباره یه رویداد به جایی که نیاز دارن برسونی، کسبوکارت بهتر میتونه به فرصتها واکنش نشون بده، مشتریها رو خوشحال کنه، تولید رو تغییر بده و منابع رو بازتخصیص بده.
برای همین، معماری مبتنی بر رویداد که اطلاعات رو به محض وقوع رویداد منتقل میکنه، رویکرد بهتری نسبت به روشهای قدیمیتریه که سیستمها باید منتظر بمونن تا بهروزرسانیها رو بهصورت دورهای بگیرن، مثل چیزی که توی معماری API محور رایج هست.
معماری مبتنی بر رویداد این اطمینان رو میده که وقتی یه رویداد اتفاق میافته، اطلاعات مربوط به اون رویداد به همه سیستمها و افرادی که بهش نیاز دارن میرسه. این یه مفهوم سادهست، ولی این رویدادها مسیر طولانیای رو طی میکنن. باید از بین تعداد زیادی اپلیکیشن که به زبانهای مختلف نوشته شدن، با APIها و پروتکلهای مختلف کار میکنن، و به مقصدهای مختلفی مثل اپلیکیشنها، موتورهای تحلیل و رابطهای کاربری میرسن، به درستی عبور کنن.
اگه این اطلاعات به مقصد نرسه چی؟ خب، دستگاههای متصل نمیتونن ارتباط برقرار کنن، سیستمها و اپلیکیشنهایی که بهشون اعتماد داری از کار میافتن، و افراد در شرکتت نمیتونن به موقع به مسائلی که نیاز به توجه دارن واکنش نشون بدن.
معماری مبتنی بر رویداد (EDA) میتونه برای هر نوع کسبوکاری مفید باشه، ولی بهخصوص برای شرکتهایی که محیطهای فناوری اطلاعات بزرگ و پیچیدهای دارن، خیلی ارزشمنده.
مثلاً شرکتهایی که سعی میکنن سیستمهایی رو که توی پلتفرمهای تکنولوژی مختلف اجرا میشن با هم ترکیب کنن، میتونن از ویژگیهای جداسازی EDA استفاده کنن تا دادههای رویداد رو بدون وابستگی به سیستم خاصی مدیریت کنن و قابلیت همکاری بین سیستمها رو بهبود بدن. شرکتهای چندملیتی هم میتونن از EDA برای هماهنگی سیستمها در حسابها و مناطق مختلف استفاده کنن، بهطوری که هر بخش از معماری رو به صورت مستقل گسترش بدن. و برای کسبوکارهایی که سیستمهای مختلفشون بخشهای مختلف یک رویداد رو پردازش میکنن، ویژگی انتشار گسترده EDA این امکان رو میده که رویدادها بدون نیاز به کدنویسی جدید به هر مصرفکنندهای ارسال بشن و بهطور موازی در سیستم پردازش بشن.
در تجارت الکترونیک، معماری مبتنی بر رویداد میتونه رویدادها رو بهصورت لحظهای فیلتر و مسیریابی کنه تا مطمئن بشه فقط به اون مشترکینی که به دادههاشون علاقه دارن ارسال میشن. خریدهای جدید مستقیماً به مصرفکنندههای پردازش سفارش میرن، مشکلات سفارش به کانالهای خدمات مشتری منتقل میشن و همینطور ادامه داره.
معماری مبتنی بر رویداد (EDA) داره تبدیل به یه بخش ضروری برای کسبوکارها میشه تا با سرعت بازار همگام بشن و آماده آینده بشن. جالبه بدونی که ۲۶ درصد از سازمانها در حال برنامهریزی برای استفاده از EDA هستن، در حالی که تقریباً ۳۷ درصد از شرکتها قبلاً این روش رو به کار گرفتن. همچنین، پیشبینی شده که صنعت نرمافزارهای EDA تا سال ۲۰۲۷ دو برابر بشه و به بیش از ۱۶.۵ میلیارد دلار درآمد برسه.
هر روز هزاران رویداد تجاری توی بخشهای مختلف یه سازمان جریان پیدا میکنه و این رویدادها اطلاعات ارزشمندی رو درباره هر لحظه از کسبوکار ارائه میدن. اما بدون فناوری مناسب، بسیاری از کسبوکارها نمیتونن این دادهها رو پردازش کنن و ازشون برای تصمیمگیریهای دقیق در مورد مشتریها، محصولات یا کسبوکارشون استفاده کنن.
اینجاست که پلتفرمهای EDA بهطور بینظیری ارزشمند میشن. این پلتفرمها با خودکارسازی فرآیندها با حجم بالا و تأخیر کم و ارائه ابزارهای پیشرفته برای استفادههای مختلف، کمک بزرگی میکنن. برخی از کاربردهای مهم EDA عبارتاند از:
وقتی صحبت از معماری مبتنی بر رویداد (EDA) میشه، چند تا مفهوم کلیدی هست که باید خوب بشناسی تا بتونی از این معماری بهترین استفاده رو ببری. اینجا هشت تا از این مفاهیم رو به زبان ساده برات توضیح میدم:
مدیریتکننده رویداد، مثل یه واسطه عمل میکنه که مسئولیت انتقال رویدادها بین سیستمها رو به عهده داره. همه اپلیکیشنها به این مدیریتکننده وصل میشن و این واسطه رویدادها رو از فرستندهها میگیره و به سیستمهایی که عضو دریافت اون رویداد هستن، میرسونه. این کار نیاز به طراحی خوب سیستم و مدیریت داره تا مطمئن بشیم که رویدادها به جاهایی که باید برن، میرسن.
پورتال رویداد یه ابزار عالی برای مستندسازی، طراحی، و مدیریت رویدادهاست. معماران، توسعهدهندهها و دانشمندان داده از این پورتال استفاده میکنن تا رویدادها رو طراحی کنن، دربارهشون بحث کنن، و ازشون استفاده کنن. این پورتال کمک میکنه تا همه اطلاعات مربوط به رویدادها بهصورت یکجا و قابل دسترس باشه.
هر رویداد یه برچسب یا موضوع داره که توصیفکننده اون رویداده. این موضوعات کمک میکنن که رویدادها به سیستمهای درست فرستاده بشن. کاربرها میتونن علاقهمندیهای خودشون رو به رویدادهای مربوط به یه موضوع خاص اعلام کنن و فقط اون رویدادها رو دریافت کنن.
شبکه رویداد یه لایه زیرساختیه که از طریق شبکهای از مدیریتکنندههای رویداد ساخته میشه. این شبکه به صورت دینامیک رویدادها رو به هر اپلیکیشن یا سرویسی که بهش نیاز داره، میرسونه، چه توی فضای ابری باشه، چه توی محل کار، یا حتی توی یه محیط اینترنت اشیا.
وقتی توی معماری مبتنی بر رویداد یه رویداد منتشر میکنی، منتظر پاسخ نمیمونی. مدیریتکننده رویداد این رویداد رو نگه میداره تا وقتی که مصرفکنندهها اون رو دریافت کنن. این یعنی یه سری رویدادها ممکنه بعداً بهطور مستقل از هم رخ بدن، ولی همه در نهایت به هم مربوط میشن.
چون اجرای رویدادها به تأخیر میافته، نمیتونی بگی که همه چیز فوراً بهروز شده. ولی در نهایت، همه چیز با هم سازگار میشه و همه اجزا به یه حالت پایدار میرسن.
به جای اینکه یه سرویس اصلی همه کارها رو کنترل کنه (که بهش ارکستراسیون میگن)، توی معماری مبتنی بر رویداد، هر سرویس خودش میدونه که با رویداد ورودی چی کار کنه. اینجوری هر سرویس به تنهایی کار خودش رو انجام میده و در نهایت یه واکنش هماهنگ و منظم ایجاد میشه.
برای اینکه یه میکروسرویس رو بهتر گسترش بدی، میتونی سرویسهایی که مسئول انجام یه کار (فرمان) هستن رو از سرویسهایی که به پرسشها جواب میدن جدا کنی. معماری مبتنی بر رویداد این کار رو راحتتر میکنه، چون میتونی سرویسهای مختلف رو برای موضوعات مختلف تنظیم کنی و گسترش بدی.
با شناخت این مفاهیم، میتونی بهتر از معماری مبتنی بر رویداد توی کسبوکارت استفاده کنی و از تمام مزایای اون بهره ببری.
توی معماری مبتنی بر رویداد (EDA)، اپلیکیشنها و سرویسها به عنوان تولیدکننده یا مصرفکننده رویداد (یا حتی هر دو) عمل میکنن.
فرض کن یه اپ یا سرویس یه کاری رو انجام میده که ممکنه یه اپ یا سرویس دیگه بخواد ازش خبردار بشه. تو این حالت، یه رویداد جدید (که در واقع یه نوع گزارش از اون عمل یا تغییر هست) تولید میشه. این رویداد توسط یه سرویس دیگه مصرف میشه و ممکنه باعث بشه که یه کار جدیدی انجام بشه.
تولیدکننده رویداد این پیام رو به یه مدیریتکننده رویداد یا یه نوعی از روتر رویداد ارسال میکنه. این واسطه ترتیب زمانی رویدادها رو حفظ میکنه و مطمئن میشه که همه چیز به ترتیب درست پیش میره. از طرف دیگه، مصرفکننده رویداد این پیام رو در لحظه (یعنی بهصورت آنی) یا در زمانی که نیاز باشه دریافت و پردازش میکنه و ممکنه این پردازش باعث ایجاد یه رویداد جدید یا شروع یه فرآیند دیگه بشه.
مثال سادهش توی یه بانک اینه که وقتی یه "سپردهگذاری" انجام میدی، یه سرویس دیگه از بانک اون رویداد رو دریافت میکنه و به حساب مشتری اضافه میکنه.
اما این معماری فقط به این چیزهای ساده محدود نمیشه. مثلاً وقتی توی یه سایت خرید آنلاین روی یه محصول کلیک میکنی، سیستم ممکنه بلافاصله بر اساس خریدهای مشتریهای دیگه، بهت محصولات مشابه رو پیشنهاد بده.
معماری مبتنی بر رویداد، بیشترین پتانسیل رو برای اپلیکیشنهای ابری و تکنولوژیهای پیشرفته مثل تحلیل لحظهای دادهها و پشتیبانی از تصمیمگیریها فراهم میکنه. در واقع، این معماری جایگزین روش سنتی "درخواست/پاسخ" میشه، جایی که یه اپ باید اطلاعاتی رو از یه اپ دیگه درخواست کنه و تا وقتی که جواب نگرفته، نمیتونه کار دیگهای انجام بده.
اما EDA فقط یه مدل نیست؛ چندین الگوی معماری مختلف زیر این عنوان قرار میگیرن که هر کدوم برای موارد خاصی مناسبن:
توی مدل انتشار/اشتراک، که مبتنی بر رابطه یک به چند بین اشیاء و یه ارتباط غیرهمزمان بین تولیدکننده و مصرفکننده رویداده، تولیدکننده نیازی نداره بدونه که چه کسی رویدادش رو میگیره. فقط رویداد رو به یه کانال مشترک میفرسته و مصرفکنندهها هم هر کدوم به صورت مستقل و در لحظه به اون رویداد واکنش نشون میدن.
معمولاً یه مدیریتکننده پیام (مثل روتر) وظیفه انتقال پیامهای رویداد بین تولیدکنندهها و مصرفکنندهها رو به عهده داره. این واسطه هر پیام رویداد رو دریافت، تغییر (اگه لازم باشه) و به ترتیب صحیح به مصرفکنندهها میرسونه و بعد از مصرف شدن، پیام رو حذف میکنه تا دوباره استفاده نشه.
این الگوی پیامرسانی برای کسبوکارهایی که کدهای بزرگ و پیچیده دارن و نیاز به پخش اطلاعات به چندین مصرفکننده دارن (مثل سیستمهای اعلان و فیدهای داده لحظهای) خیلی مناسب هست.
مشابه مدل Pub/Sub، جریان رویداد هم تولیدکنندهها و مصرفکنندهها رو جدا از هم نگه میداره و ارتباطات غیرهمزمان رو ممکن میکنه. اما توی این مدل، مصرفکنندهها نیازی به اشتراک در جریانها ندارن؛ تولیدکنندهها جریانهای رویداد رو به یه لاگ واسطه میفرستن و مصرفکنندهها میتونن در هر نقطهای از جریان وارد بشن و فقط رویدادهایی رو که میخوان مصرف کنن.
برخلاف Pub/Sub، در جریان رویداد، واسطهها پیامها رو حتی بعد از اینکه مصرفکنندهها اونها رو دریافت کردن هم نگه میدارن.
چون مصرفکنندهها میتونن هر زمانی بعد از انتشار پیامها رو پردازش کنن، رکوردهای جریان رویداد پایدار هستن و برای مدت زمان قابل تنظیمی (از چند ثانیه تا همیشه) نگهداری میشن. مصرفکنندهها میتونن هر زمانی به جریان دسترسی داشته باشن تا پیامهای جدید رو بخونن، یه سری پیامها رو بهصورت دستهای پردازش کنن یا پیامهای مربوط به گذشته رو بررسی کنن.
فناوریهای جریان رویداد (مثل Apache Kafka، AWS Kinesis و IBM Event Automation) دو مدل هم دارن: مدل "کشیدن" (Pull) که توش واسطه فقط وقتی که مصرفکنندهها اعلام آمادگی میکنن، داده رو میفرسته؛ و مدل "هل دادن" (Push) که توش منطق تجاری واسطه تعیین میکنه کدوم مصرفکنندهها رویدادها رو دریافت کنن.
الگوهای جریان رویداد برای اپهایی که هم بهروزرسانیهای لحظهای و هم دسترسی به رویدادهای گذشته نیاز دارن (مثل سیستمهای تشخیص تقلب در مؤسسات مالی) خیلی کاربردی هستن.
علاوه بر دو الگوی اصلی معماری EDA، سه الگوی طراحی هم وجود دارن که نحوه پردازش رویدادها توسط مصرفکنندهها رو تعیین میکنن:
این سه الگوی پردازش (و البته الگوهای دیگه) توی هر دو الگوی Pub/Sub و جریان رویداد قابل استفاده هستن، ولی ESP بهطور طبیعی توی الگوی جریان رویداد بیشتر رایج هست.
معماری مبتنی بر رویداد (EDA) کمک میکنه تا رویدادهای کسبوکاری بهصورت هوشمندانه مورد استفاده قرار بگیرن. این معماری به کاربرها اجازه میده تا موقعیتهای جدید رو شناسایی کنن، بهصورت آنی واکنش نشون بدن، تصمیمگیریها رو خودکار کنن و پتانسیل درآمدزایی رو به حداکثر برسونن. EDA میتونه به شرکتها کمک کنه تا رشد خودشون رو حفظ کنن و حتی سرعت بدن. حالا چطوری؟ با این ویژگیها:
این مزایا نشون میده که چرا معماری مبتنی بر رویداد میتونه گزینه عالیای برای کسبوکارهای مدرن باشه.
معماری مبتنی بر رویداد (EDA) به سیستمها اجازه میده به صورت همزمان و غیرهمزمان به رویدادها واکنش نشون بدن، در حالی که معماریهای سنتی بیشتر بر اساس درخواست/پاسخ عمل میکنن که نیاز به انتظار برای پاسخ داره.
EDA برای کسبوکارهایی که محیطهای فناوری اطلاعات بزرگ و پیچیدهای دارن، یا نیاز به واکنش سریع به تغییرات دارن، خیلی مناسبه. بهخصوص برای شرکتهایی که میخوان سیستمهاشون رو بهطور مستقل و بدون وابستگی به همدیگه گسترش بدن.
استفاده از EDA میتونه پیچیدگیهای جدیدی به همراه داشته باشه، مثل نیاز به مدیریت دقیقتر رویدادها و هماهنگی بین سرویسها. اما با ابزارهای مناسب و طراحی خوب، این چالشها قابل حل هستن.
بله، معماری مبتنی بر رویداد میتونه بهصورت تدریجی در کنار سیستمهای قدیمیتر پیادهسازی بشه و به مرور زمان جایگزین اونها بشه.
ابزارهای مختلفی برای پیادهسازی EDA وجود دارن، مثل Apache Kafka برای جریان رویدادها یا AWS Kinesis برای مدیریت دادههای لحظهای. انتخاب ابزار مناسب بستگی به نیازهای خاص کسبوکار و سیستم شما داره.
معماریهای مبتنی بر رویداد یه راه عالی برای طراحی سیستمهایی هستن که به اپلیکیشنهات انعطاف بیشتری میدن و کمک میکنن که بدون دردسر با کسبوکار تو رشد کنن. البته این روش ممکنه چالشها و پیچیدگیهای جدیدی رو هم به همراه بیاره، اما یه راه خوب برای ساخت اپلیکیشنهای پیچیدهست که به گروههای مختلف اجازه میده هر کدوم روی بخش خودشون کار کنن. حتی بعضی از سرویسهای ابری ابزارهای مدیریتشدهای رو ارائه میدن که میتونه به سازمانت کمک کنه تا این نوع معماریها رو بسازی.
توی این راهنما، کلی مفاهیم مربوط به معماریهای مبتنی بر رویداد توضیح داده شد، بهترین روشها پیشنهاد شد و سرویسهای مفیدی معرفی شد که میتونه به تیم توسعهات کمک کنه. یادت باشه که انتخاب معماری مبتنی بر رویداد فقط مربوط به تکنولوژی نیست؛ برای اینکه واقعاً از این روش بهره ببری، باید نحوه فکر کردن به توسعه و نحوه کار تیمت رو تغییر بدی. توسعهدهندهها باید آزادی کافی داشته باشن تا تکنولوژی و طراحی مناسب برای بخش خودشون رو انتخاب کنن.
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: