5 الگوی عمده معماری نرم‌افزار

دوشنبه 24 شهریور 1399

اول از همه ببینیم الگوی معماری نرم‌افزار چیست. الگوی‌های معماری روش‌هایی برای به دست آوردن طراحی ساختارهای خوب و اثبات‌شده هستند، به طوری که می‌توان از آن‌ها استفاده مجدد کرد.

5 الگوی عمده معماری نرم‌افزار

به طور خاص، الگوی معماری بسته‌ای از تصمیمات طراحی است که به طور مکرر در عمل یافت می‌شود، دارای خصوصیات کاملا مشخصی است که می‌تواند مورد استفاده مجدد قرار گیرد و معماری را توصیف می‌کند.

توسعه معماری را می‌توان به عنوان فرآیندی برای انتخاب، سر هم کردن و ترکیب الگوها دانست. معمار نرم‌افزار باید تصمیم بگیرد که چگونه یک الگو را نمونه‌سازی کند، چگونه آن را متناسب با زمینه‌ای خاص و محدودیت‌های مسأله سازگار کند.

طبق گفته Mark Richards در کتابی به نام Software Architecture Patterns، پنج الگوی عمده معماری نرم‌افزار وجود دارد: microkernel، microservices، معماری Layered، event-based و space-based.

5 الگوی مهم معماری نرم‌افزار

1. الگوی Microkernel

الگوی معماری microkernel به عنوان معماری پلاگین نیز شناخته می‌شود. معمولا وقتی تیم‌های نرم‌افزاری سیستم‌هایی با اجزای قابل تعویض ایجاد می‌کنند، استفاده می‌شود.

این الگو برای سیستم‌های نرم‌افزاریی ارائه می‌شود که باید بتوانند خودشان را با تغییرات نیازهای سیستم وفق دهند.

الگوی معماری microkernel یک الگوی طبیعی برای پیاده‌سازی برنامه‌های مبتنی بر محصول است. و یک برنامه مبتنی بر محصول که به صورت یک محصول شخص ثالث بسته‌بندی شده و برای دانلود در نسخه‌های مختلف در دسترس است. با این حال، بسیاری از شرکت‌ها برنامه‌های تجاری داخلی خود را مانند محصولات نرم‌افزاری، همراه با نسخه‌ها، یادداشت‌های منتشر شده و ویژگی‌های مختلف توسعه و منتشر می‌کنند.

الگوی معماری میکروکرنل به شما امکان می‌دهد ویژگی‌های اضافی برنامه را به عنوان پلاگین به برنامه اصلی اضافه کنید، و قابلیت توسعه و همچنین جداسازی و تفکیک ویژگی‌ها را نیز فراهم می‌کند.

الگوی معماری میکروکرنل از دو نوع از اجزای معماری تشکیل شده است: سیستم اصلی و ماژول‌های پلاگین. منطق برنامه بین ماژول‌های پلاگین مستقل و سیستم اصلی تقسیم شده است، که قابلیت توسعه، انعطاف‌پذیری و جداسازی ویژگی‌های برنامه و منطق پردازش سفارشی را فراهم می‌کند. سیستم اصلی الگوی معماری میکروکرنل به طور معمول شامل حداقل عملکردهای لازم می‌باشد تا سیستم را قابل استفاده بسازد.

شاید بهترین نمونه از معماری میکروکرنل Eclipse IDE باشد. دانلود Eclipse چیزی بیش از یک ویرایشگر را برای شما فراهم نمی‌کند. با این وجود، به محض شروع افزودن پلاگین‌ها، به یک محصول کاملا قابل سفارشی‌سازی و مفید تبدیل می‌شود.

مزایا

انعطاف‌پذیری عالی

برخی از پیاده‌سازی‌ها به شما اجازه می‌دهد تا در حالی که برنامه در حال اجراست پلاگین‌ها را اضافه کنید

قابلیت حمل خوب

سهولت در deploy کردن

پاسخ سریع به محیطی که دائما در حال تغییر است

ماژول‌های پلاگین می‌توانند به صورت جداگانه تست شوند و می‌توانند به راحتی توسط سیستم اصلی mock شوند تا ویژگی خاصی را با کمترین تغییر یا بدون تغییر در سیستم اصلی نشان دهند یا نمونه‌سازی اولیه کنند.

دارای عملکرد بالایی است چون می‌توانید برنامه را ساده و سفارشی کنید تا فقط شامل ویژگی‌های مورد نیاز شما باشد.

مناسب برای:

برنامه‌هایی که داده‌ها را از منابع مختلف می‌گیرند، آن‌ها را تغییر داده و در مقصدهای مختلف می‌نویسند

برنامه‌های گردش کار (Workflow)

برنامه‌های زمان‌بندی وظایف

2. الگوی Microservices

وقتی برنامه خود را به عنوان مجموعه‌ای از میکروسرویس‌ها می‌نویسید، در واقع چندین برنامه را می‌نویسید که با هم کار می‌کنند. هر میکروسرویس دارای مسئولیت مشخص خود است و تیم‌ها می‌تواند آن‌ها را به صورت مستقل از سایر میکروسرویس‌ها توسعه دهند. تنها وابستگی بین آ‌ن‌ها ارتباط است. از آنجا که میکروسرویس‌ها با یکدیگر ارتباط برقرار می‌کنند، شما باید اطمینان حاصل کنید که پیام‌های ارسالی بین آن‌ها به صورت معکوس نیز سازگار است.

مزایا

می‌توانید هر میکروسرویس را به صورت جداگانه بنویسید، نگهداری کرده و deploy کنید

مقیاس‌پذیری آسان است، زیرا می‌توانید فقط میکروسرویس‌هایی را مقیاس‌بندی‌ کنید که باید مقیاس‌بندی شوند

بازنویسی بخش‌های برنامه آسان‌تر است زیرا کوچک‌تر بوده و کمتر با بخش‌های دیگر مرتبط هستند

برنامه به راحتی قابل درک و اصلاح است

اعضای جدید تیم می‌توانند به سرعت بخش‌ها را درک کرده و مشغول به کار شوند

قابلیت نگهداری و تست بالایی دارد و امکان توسعه و deploy سریع و مکرر را فراهم می‌کند

قابلیت deploy به طور مستقل را دارد و تیم را قادر می‌سازد تا سرویس‌ها را بدون نیاز به هماهنگی با سایر تیم‌ها deploy کند

مناسب برای:

وب‌سایت‌هایی با اجزای کوچک

مراکز داده شرکتی با مرزهای کاملا مشخص

برنامه‌های وب و مشاغل جدید که سریعا در حال توسعه هستند

تیم‌های توسعه که اغلب در کل دنیا پخش هستند

3. الگوی معماری Layered (لایه‌ای)

رایج‌ترین الگوی معماری، الگوی معماری layered است. الگوی معماری layered یک الگوی n لایه‌ای (n-tier) است که اجزا در لایه‌های افقی سازمان یافته‌اند. این یک روش مرسوم برای طراحی بیشتر نرم‌افزارها است و به معنای خود استقلالی است. این یعنی همه اجزا به هم وصل هستند اما به یکدیگر وابسته نیستند. هر لایه از الگوی معماری لایه‌ای دارای نقش و مسئولیت خاصی در برنامه است. به عنوان مثال،presentation layer  مسئولیت مدیریت همه رابط های کاربری و منطق ارتباطات مرورگر را بر عهده دارد، در حالی که business layer مسئول اجرای قوانین خاص business مرتبط با درخواست است.

یکی از ویژگی‌های قدرتمند الگوی معماری layered جدایی وابستگی‌ها از اجزا است. اجزای موجود در یک لایه خاص فقط با منطقی سر و کار دارند که مربوط به آن لایه است.

مزایا

قابلیت تست بالا به دلیل اینکه اجزا به لایه‌های خاصی در معماری تعلق دارند، لایه‌های دیگر می‌توانند mock شوند، بنابراین تست این الگو نسبتا آسان است.

سهولت بالای توسعه به دلیل اینکه این الگو کاملا شناخته‌شده است و پیاده‌سازی آن بیش از حد پیچیده نیست، همچنین اکثر شرکت‌ها با جداسازی مجموعه مهارت‌ها توسط لایه‌ها، برنامه‌ها را توسعه می‌دهند. این الگو به یک انتخاب طبیعی برای توسعه بیشتر برنامه‌های تجاری تبدیل شده است.

قابل نگهداری

به راحتی می‌توان نقش‌های جداگانه را اختصاص داد

به روز رسانی و افزایش لایه‌ها به صورت جداگانه آسان است

مناسب برای:

برنامه‌های تجاری که کارهایی فراتر از عملیات CRUD انجام می‌دهند

برنامه‌های جدیدی که باید سریع ساخته شوند

تیم‌هایی با توسعه‌دهنگان بی‌تجربه که هنوز معماری‌های دیگر را به خوبی درک نکرده‌اند

برنامه‌هایی که به استانداردهای دقیق نگهداری و تست نیاز دارند

4. الگوی Event-based (مبتنی بر رویداد)

این رایج‌ترین معماری توزیع‌شده ناهمزمان است که برای توسعه سیستم‌های بسیار مقیاس‌پذیر استفاده می‌شود. این معماری شامل اجزای پردازش رویداد تک منظوره است که به رویدادها گوش می‌دهد و آن‌ها را به صورت ناهمزمان پردازش می‌کند. معماری رویداد محور یک واحد مرکزی ایجاد می‌کند که همه داده‌ها را می‌پذیرد و سپس آن را به ماژول‌های جداگانه‌ای که نوع خاصی را مدیریت می‌کنند، واگذار می‌کند.

مزایا

به راحتی برای محیط‌های پیچیده و اغلب بی‌نظم مناسب است

به راحتی مقیاس‌بندی می‌شود

در صورت نمایان شدن انواع رویدادهای جدید، به راحتی توسعه‌پذیر است

مناسب برای:

سیستم‌های ناهمزمان با جریان داده ناهمزمان

رابط‌های کاربری

5. الگو Space-based (مبتنی بر فضا)

الگوی معماری space-based به طور خاص برای پرداختن به و حل مسائل مقیاس‌پذیری و همزمانی طراحی شده است. همچنین یک الگوی معماری مفید برای برنامه‌هایی است که دارای کاربران همزمان تغییرپذیر و غیر قابل پیش‌بینی هستند. مقیاس‌پذیری بالا با حذف محدودیت‌های دیتابیس مرکزی و در عوض استفاده از شبکه‌های داده‌ای موجود در حافظه که تکرار شده‌اند به دست می‌آید.

معماری space-based برای جلوگیری از سقوط عملکرد زیر بار زیاد، با تقسیم پردازش و ذخیره‌سازی بین چندین سرور طراحی شده است.

مزایا

به سرعت به محیطی که مدام درحال تغییر است پاسخ می‌دهد.

اگرچه معماری مبتنی بر فضا به طور کلی جدا و توزیع نمی‌شوند، اما پویا هستند، و ابزارهای سطح بالای مبتنی بر cloud به برنامه‌ها اجازه می‌دهد تا به راحتی عملیات push را برای سرورها انجام دهند، و deploy را ساده می‌کند.

عملکرد بالا از طریق دسترسی به داده‌های حافظه و مکانیزم کشینگ در این الگو حاصل می‌شود.

مقیاس‌پذیری بالا که از این واقعیت ناشی می‌شود که وابستگی کم یا هیچ وابستگی به دیتابیس مرکزی دارد.

مناسب برای:

داده‌های با حجم زیاد مانند جریان‌های کلیک و لاگ‌های کاربر

داده‌ها با مقادیر کم که می‌توانند گاهی اوقات بدون عواقب زیادی از دست بروند

شبکه‌های اجتماعی

امیدوارم که این مقاله برای شما مفید بوده باشد.

ایمان مدائنی

نویسنده 1299 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید