Saeid Noormohammadi
Saeid Noormohammadi
خواندن ۳ دقیقه·۳ ماه پیش

باران و رویدادها - هر قطره یک رویدا: نقش Event-Drive Design در بهبود نرم افزار


امروز صبح وقتی زیر بارش بارون نشسته بودم و به بارش قطره ها بارون و برخوردشون به محیط نگاه می کردم, به صورت ناخودآگاه ذهنم رفت سمت اینکه بارش بارون چقدر شبیه به event ها در دنیای نرم افزار هستش. هر قطره بارانی که می بارد تاثیرات و مصرف کننده های زیاد و مختلفی بر/در محیط دارد. مثل گیاهان که برای رشد و فتوسنتز به آن نیاز دارند, مثل جانوران که برای آشامیدن و تمیز شدن به آن نیاز دارند, مثل جذب شدن توسط رودخانه ها و دریاچه ها که پر از آب می شوند, مثل نفوذ به خاک و سفره های آب زیر زمینی که از آن تغذیه می کنند. هر قطره باران را می توان یک event در نظر گرفت که می تواند باعث واکنش و تغییرات در محیط شود, درست مثل event هایی که در سیستم ها داریم. جانوران, گیاهان و دیگر موارد را می توان به عنوان consumer ها در نظر گرفت که هرکدام در برابر قطره های باران(event) واکنش متفاوتی دارند.

در معماری Event-Driven Design سیستم ها بر اساس Event ها کار می کنند. این Event ها به معنی تغییر یا رخ دادن یک اتفاق هستند که توسط producer ها ایجاد و توسط consumer ها استفاده می شوند. اما بیایید ببینم این معماری که مشابه بارش باران می باشد چگونه به بهبود نرم افزار کمک می کند:
پردازش غیر هم زمان (Asynchronous Processing): باران در مناطق زیادی رخ می دهد و در هر منطقه موجودات/اجزا می توانند به صورت مستقل واکنش خود را داشته باشند. در این معماری هم هر consumer می تواند به صورت همزمان واکنش مستقل خود را داشته باشد.
کاهش وابستگی (Loose Coupling): همانطور که ابرها(producers) از جزئیات و دریافت کننده باران هیچ اطلاعی ندارند و موجودات/اجزا(consumers) اطلاع ندارن باران(event) از کجا می آید, در این معماری هم producer ها و consumer ها هیچ اطلاعی ندارند. به این ترتیب هر دو به صورت مستقل کار می کنند و باعث اختلال در یکدیگر نمی شوند.
مقیاس پذیری (Scalability): همانطور که باران می تواند با شدت و وسعت بیشتری ببارد و موجودات/اجزا بیشتری برای تاثیر/مصرف داشته باشد در این معماری هم با افزایش تعداد event ها می توان تعداد producer ها و consumer ها را به راحتی افزایش داد. این کار باعث می شود که سیستم بدون افت کارایی به کار خود ادامه دهد.
انعطاف‌پذیری (Flexibility): همانطور که موجودات/اجزا در طبیعت به شیوه‌های متفاوتی به باران واکنش نشان می‌دهند، در این معماری هم می توان consumer های جدید را بدون تغییر و مشکل در سیستم اضافه کرد.
بهبود نگهداری و توسعه (Maintainability and Extensibility): همانطور که طبیعت بدون مشکل و عدم وابستگی به بارش باران واکنش نشان می دهد, در این معماری هم با توجه به مستقل عمل کردن هر بخش و کاهش وابستگی ها می توانیم ویژگی های جدید و تغییرات خودمان را بدون نگرانی انجام دهیم.
تحمل خطا (Fault Tolerance): با توجه به مستقل بودن اجزا در صورت بروز مشکل در یک قسمت بخش های دیگر بدون مشکل به کار خود ادامه می دهند و همچنین event های مربوط به یک بخش تا زمان رفع مشکل در صف باقی می مانند.

در پایان, باید بدانیم همانطور که بارش شدید باران می تواند باعث سیلاب و ایجاد مشکلات برای حیوانات/اجزا/محیط شود, در Event-Driven Design هم اگر event ها بیش از حد زیاد یا پیچیده شوند ممکن است باعث ایجاد مشکلات در سیستم شوند که نیاز به مدیریت مناسب مثل Queueing دارد که از ایجاد مشکلات جلوگیری شود.

system design
شاید از این پست‌ها خوشتان بیاید