Caching چیست؟
نوامبر 17, 2020CI/CD چیست؟
نوامبر 17, 2020معماری نرم افزار نمایانگر ساختار سازمان یک نرم افزار برای یک سیستم پیچیده است بدین معنی پیچیده که از المانها و اجزای مختلف که با یکدیگر ارتباط تنگانگ دارند تشکیل شده است.
الگوی طراحی (design Pattern) مشخص کننده نحوه بهبود ارتباط المانها و زیرسیستمهای یک سامانه است که درآن راهکار ارائه شده برای حوزه مسئله طراحی (design problem) به تصویر کشیده میشود.
معماری های نرم افزاری شناخته شده مثل لیست زیر است:
- معماری شی گرا (Object-Oriented Architecture)
- معماری مبتنی بر کامپوننت (Component-based assemble architecture)
- معماری مبتنی بر طراحی دامین (Domain-driven design architecture)
- معماری کلاینت سرور
- معماری چند لایه توزیع شده
- معماری لایه ای
- معماری سرویس گرا
- معماری مبتنی بر رویداد
- معماری سرویسگرای مبتنی بر رویداد
- معماری های real-time
- معماری های ترکیبی
چرا باید از الگوهای نرم افزاری استفاده کنیم؟
تغییراتی که در دنیای امروز نرم افزار در حال شکل گیری است بواسطه نیازمندیهای جدید و تقاضاها و انتظارات فراوانی است که از فناوری اطلاعات شکل گرفته است. از اینرو مسائل جدیدی در این فضای در حال تغییر بوجود می آید که راهکار بسیاری از آنها در الگوهای معماری دیده و تجربه شده است از اینرو بکارگیری الگوی معماری مناسب بسیار حائز اهمیت است. اهمییت بکارگیری از الگوهای معماری با پیچیده شدن سامانه ها و نرم افزارها دوچندان میشود بدین معنی که هرچقدر با سامانه پیچیده تری روبرو باشیم لزوم توجه به معماری بیشتر خواهد شد.
معماری event-driven
مقدمه:
یکی از معماری های فراگیر که امروزه اکثر نرم افزارها از آن بهره میبرند معماری چند لایه است. این معماری در واقع نوع بهبود یافته معماری client-server است که بخش عمده از مشکلات این معماری در آن اصلاح شده است. این معماری ویژگیهای زیر را دارد:
- قابل تست (maintainable)
- قابل تست (testable)
- امکان اختصاص نقشهای مشخص به لایه ها
- امکان ویرایش و بهبود لایه ها بصورت مستقل
این معماری برای توسعه سامانه های تحت وب بسیار ایده آل است و در آن معمولا لایه های زیر وجود دارند:
- لایه بانکهای اطلاعاتی (Database Layer)
- لایه ذخیره داده (Persistence Layer)
- لایه سرویس (Service Layer)
- لایه کسب و کار (Business Layer)
- لایه ارائه (Presentation Layer)
اما مبحث همیشگی معماری های enterprise و بحث قابل توسعه بودن و مفاهیمی همچون horizontal scalability در این الگو همچنان دغدغه است.
تعریف:
معماری event-driven یک الگوی طراحی نرم افزار است که بکارگیری از آن کمک خواهد کرد تا بتوان یک اپلیکیشن توسعه پذیر داشت. در آویهنگ بر اساس نیازمندیهای پروژههای مختلف معماری های مختلفی را تجربه کردیم که یکی از این معماری ها معماری مبتنی بر event است. برای اینکه بهتر بدانیم که این معماری چه ویژگیهایی دارد باید ابتدا مفاهیم مختلفی را بشناسیم و صورت مسئله را بهتر درک کنیم که در این مقاله برآنیم تا نگاهی مختصر به این معماری داشته باشیم و ابزارهایی که در این معماری به ما کمک میکنند را معرفی کنیم.
event چیست؟
یکی از مفاهیم مهمی که این معماری بر پایه آن طراحی شده است مفهوم event است که بر اساس تعاریف ارائه شده رویداد را یک اتفاق مهم در سامانه میشناسیم که منجر به تغییری در وضعیت یک موجودیت یا وضعیت آن در بانک اطلاعاتی میشود.
مثلا در معماری نسخه الکترونیک ثبت تجویز یک پزشک یا پیچیده شدن یک نسخه توسط داروخانه. به این رویداد مهم به اصطلاح یک رویداد (event) گفته میشه که طبیعتا معماری که بر اساس این مفهوم طراحی بشه رو بهش میگیم معماری مبتنی بر رویداد (event-driven).
هر event در این معماری توسط یک تولید کننده (producer) رویداد ایجاد و توسط یک مصرف کننده (consumer) به سرانجام میرسه.
در این معماری از یک کانال برای ارسال رویداد بین producer و consumer استفاده میشود و consumer که وظیفه پردازش رویداد رو داره معمولا توسط این کانال مطلع میشه. این مطلع شدن باعث میشه که امکان مدیریت و پردازش رویدادها بصورت async فراهم باشه. بعد از پردازش رویداد توسط consumer پاسخ اقدام انجام شده هم میتونه بعنوان یک رویداد دیگه تولید بشه.
یکی از پلتفرمهای شناخته شده معماری event-driven کافکا (Apache Kafka) است که امکان مدیریت رویدادها را در این معماری با توان پاسخگویی بسیار بالا بصورت در لحظه با قابلیت توزیع شدگی میدهد.
کافکا زیرساخت معماری مبتنی بر رویداد است که در مقالات بعدی در خصوص ان توضیحات کاملی ارائه خواهیم کرد.