Modular Monolithic
این معماری که به سادگی و قابلیت نگهداری بالا معروف است ترکیبی از معماری ماژولار و معماری مونولوتیک است. در این معماری کد بزرگ برنامه اصلی بر اساس منطق کسب و کار به تعدادی بخش با ارتباط کم (loosely coupled) تقسیم میشود تا در صورت نیاز به تغییر یا توسعهی هر بخش از کسب و کار، تاثیرهای ناخواسته بر کل برنامه کم شده و نیاز به بررسی کل کد برای سازگاری با هر تغییر نباشد.
هرچند این معماری شباهت زیادی به معماری میکروسرویس دارد اما در معماری میکروسرویس استقلال بیشتری وجود داشته و هر میکروسرویس میتواند پایگاه داده، زبان برنامه نویسی و چهارچوب جدایی داشته باشد. اما معماری مونولوتیک ماژولار این تفاوتهای بین ماژولها وجود نداشته و بیشتر شبیه آنست که برنامهای که از ابتدا یک کد بزرگ بوده را به بخشهای کوچکتر بکشنیم. هرچند مقیاس پذیری معماری ماژولار مونولوتیک کمتر از معماری میکروسویس است اما در عوض پیچیدگی کمتری نسبت به آن دارد.
این معماری قابلیت استفاده مجدد، نگه داری، refactor کردن، کپسوله سازی و مدیریت برنامه را سادهتر میسازد. [1,2]
AWS
وب سرویس آمازون یا Amazone Web Service، نام مجموعهای از خدمات ابری شرکت آمازون شامل سرویسهای محاسباتی، ذخیرهسازی، شبکه، امینت و ... است که به توسعهدهندگان و استفادهکنندگان این امکان را میدهد تا به جای صرف انرژی و هزینه بر روی زیرساخت، بر روی ایدهی خود متمرکز شوند. این سرویسها قابلیت آن را دارند که مصرف کننده تنها به میزانی که از آنها استفاده می کند پول پرداخت کند و برای زمانهایی که استفادهای ندارد هزینه محاسبه نشود. Elastic Compute Cloud (EC2) ، Simple Storage Service (S3)، Amazon RDS, DynamoDB, Redshift، Virtual Private Cloud (VPC), Route 53تعدادی از زیرمجموعههای سرویس AWSآمازون هستند. [3,4]
API-first Approach
در این روش توسعهی نرمافزار، ابتدا APIها توسعه داده شده و سپس بقیهی بخشهایی که از این APIها استفاده میکنند را توسعه میدهیم.
این روش توسعه انهطاف پذیری، قابلیت استفاده مجدد، تست پذیریو سرعت توسعه را افزایش داده و اجازهی توزیع شده بودن را به ما میدهد. [5, 6]
این نوع پایگاه داده که برای دادههای غیر ساختاریافته و نیمه ساختاریافته مناسب است، در مواردی که نیاز به انعطاف پذیری بالا، کار با داده حجیم و متنوع است این نوع پایگاه داده به ذخیره و بازیابی و جستجتوی بهینه کمک شایانی میکند. [7,8]
برخی پایگاهدادههای غیررابطهای
این نوع معماری نرمافزار برای جداسازی دغدغههای سروری از نرمافزاری ساخته شده تا این مسئولیتهای بر دوش ارائه دهندهی خدمات ابری و نه توسعه دهنده باشد. توسعه دهنده برنامه را به صورت سرویسها پیادهسازی کرده و مدیریت سرور به عهده توسعه دهنده نیست. این معماری چندین نوع دارد از جمله :
این نوع معماری کاهش هزینه و افزایش مقایس پذیری و بهرهوری را به دنبال دارد. [9,10]
Domain Driven Design یا DDDطراحی دامنه مجور نرمافزار است که در آن برنامه با توجه بیشتری به موضوعات و مفاهیمی که در دامنه وجود دارند طراحی میشوند. مسائلی مانند کلاسها و متدها و اشیا از این دست موارد هستند. در این نوع توسعه به مفاهیم کسبپ کار توجه بیشتری میشود و هر ماژول برابر با یک دامنه مسئله خواهد بود. این نوع توسعه شامل Aggregate، Entity، Value Object و Repository است.
طراحی دامنه محور قابلیت نگهداری و تغییر در نرمافزار را افزایش میدهد اما افزایش هزینهی توسعه و پیچیدگی را به دنبال دارد. [11,12]
این نوع از معماری که در آن برنامه از طریق پورتها و یا آداپتورها با دیگر اجزا تعامل برقرار میکند به نامهای معاری پورت و معماری آداپتور هم معروف است. ورودیها و خروجیهای نرم افزار از هسته اصلی جدا هستند و معماری مستقل از رابط هم به آن گفته میشود.
مزیت بزرگ این معماری قابل تغییر و جایگزین بودن اجزای آن است. در این نوع معماری دامنهاصلی به صورت هستهای در وسط قرار داشته و آن را از جزییات فنی جدا میکنیم. با این جداسازی تست پذیری و توسعه آسان تر میشود. [13,14]
گاهی اوقات به دلایل مختلفی مانند پایش عملکرد برنامه و رفع باگ لازم است تا استیت برنامه مانند مقادیر متغییرها را ذخیره و تحلیل کنیم. بدیهی است که هر برنامه تعداد بسیار زیادی متغییر دارد و این مقادیر متغییرها با کمک الگوی نرمافزاری مدیریت رویدادها به صورت بهتری مدیریت میشوند.
از معایب استفاده از این روش میتوان به هزینه و پیچیدگی بالا اشاره نمود. [15,16]
امروزه برنامه نویسی و تولید نرمافزار تنها مختص به دانش آموختگان رشتهی مهندسی کامپویتر نیست و هر کسی ممکن است نیار به توسعهی نرمافزاری برای کار خود داشته باشد. جدای از افرادی که از طریق کانال ها و کتب آموزشی برنامه نویسی را یاد میگیرند، افرا بسیار زیادی نیز هستند که تنها یک بار در تمام عمر خویش ممکن است نیاز به توسعهی یک نرمافزار نسبتا ساده پیدا کنند و نمیخواهند مدت زمان زیادی را صرف آموزش مفاهیم پایهای و حتی پیچیدهی دنیای کامپیوتر و نرمافزار کنند. ابزارهای توسعهی برنامهی بدون نیاز به کد نویسی یا نیاز کم به کد نویسی مخصوص این افراد هستند. از جملهی این ابزارها میتوان به موارد زیر اشاره نمود: [17,18]
Salesforce Platformو Google AppSheet و Microsoft Power Appsو Appianو OutSystems
با کمک سیستمهای مدیریت فرآیند تجاری، نقاط ضعف و قوت سازمان و فرآیندها شناسایی شده و از هدر رفت انرژی و زمان حلوگیری میشود تا با صرف هزینه و انرژی انسانی و ماشینی کمتر بازدهی بیشتری به دست بیاوریم. [19,20]
هنگامی که معماریهایی مانند معماری میکرو سرویس برای شکستن برنامه به اجزای کوچک تر استفاده می:نیم، این روش عیوب خود را نیز دارد، مواردی مانند افزایش پیچیدگی برنامه به دلیل افزایش تعامل میان میکروسرویسها این تعاملات و پیامها ممکن است قابلیت دریافت و پردازش و پاسخ دهی در لحظه را به دلایلی مانند محدودیت منابع نداشته باشند. برای اینکه خللی در این پیامها به وجود نیاید میتوان از یک صف پیام مانند Apache Kafkaو RabbitMQ استفاده نمود به طوریکه پیامها بدون آنکه بلاک شوند با میکروسرویسی منتظر پیامی بماند بقیه بخش ها به درستی کار خود را انجام دهند. [21,22]
'=
امروزه که اکثر برنامههای خصوصا بزرگ و دارای چندین لایه مانند پایگاه داده، لاجیک و فرانت به صورت کانتینرهایی در محیط هایی مانند داکر اجرا میشوند، هماهنگی این کانتینرها نیازمند مدیریت خاصی است که ابزارهایی برای آنها وجود دارد. [23,24]
زمانی که برنامه به صورت توزیع شده بر روی بیش از یک سرور قرار گرفته باشد، مدیریت و بررسی لاگها نیازمند هزینه و زمان بیشتری است. ابزارهای مدیریت و پایش لاگ ابزارهایی هستند که برای جمعآوری، ذخیره، تجزیه و تحلیل، نمایش و مدیریت لاگها و رویدادهای سیستمی در یک سیستم نرمافزاری استفاده میشوند. این ابزارها به توسعهدهندگان و مدیران سیستم کمک میکنند تا به راحتی دسترسی به اطلاعات لازم برای مشاهده و تحلیل عملکرد سیستمها داشته باشند و مشکلات و مسائل عملیاتی را شناسایی کنند. ابزارهای مدیریت لاگ به صورت خودکار دادههای لاگ را از منابع مختلف سیستم، برنامهها، و سرویسها جمعآوری میکنند. این شامل پیامهای سیستم، خطاها، و رویدادهای مختلف میشود.
ابزار ELK (Elasticsearch, Logstash, Kibana) یکی از معروفترین مجموعههای ابزار مدیریت لاگ است. Elasticsearchبرای ذخیره و جستجوی لاگها و دادههای سیستمی استفاده میشود، Logstash برای تجمیع و پردازش لاگها، و Kibana برای تصویرسازی و نمایش دادهها به صورت گرافیکی و تحلیلی استفاده میشود.[25,26]
نظارت و مانیتور بخش مهمی از فرآیند نگهداری نرمافزار برای یافتن باگها و مشکلات پس از انتشار است. در برخی از این نرمافزارهای مانیتورینگ میتوان متریکهایی را تعریف نمود تا برخی باگها مانند باگهای امنیتی قبل رخدادن یا در زمانی که به میزان مشخصی رخ دهند هشداری داده شود. پرومتئوس یکی از ابزارهای مانیتورینگ است که اطلاعات را از منابع متعددی مانند سرورها، کانتینرها، سیستمهای ابری، و برنامهها جمعآوری میکند و امکان تجزیه و تحلیل آنها را فراهم میکند.ابزار پرومتئوس معمولا به همراه Kubernetesاستفاده میشود. [27, 28]
این روش تحلیل برنامه که زیرشاخه از white box testing است زیرا به کدبرنامه دسترسی داریم و جز اولین مراحل فرآیند CI/CD است به افزایش کیفیت و امینت برنامه کمک میکند. این ابزارها به توسعه دهندگان کمک میکند تا بدون نیاز به اجرای کد خطاهای اشتباهات نحوی و سینتکسی آن را پیدا کنند. مواردی مانند استفاده اشتباه از متغیرها، تعریف نادرست توابع و ...
اما از عیب های این روش میتوان به وجود موارد مثبت و منفی کاذب اشاره نمود.
SonarQube یکی از ابزارهای معروف تحلیل ایستای کد است که قابلیت تحیلیل برنامه نوشته شده به زبانهای مختلف و بررسی کیفیت کد، تستها، باگها و آسیبپذیریهای امنیتی را دارد. [29, 30]
2 - Modular Monolithic vs. Microservices (fullstacklabs.co)
4 - Overview of Amazon Web Services - Overview of Amazon Web Services
5 - Understanding the API-First Approach to Building Products (swagger.io)
6 - What is API-first? The API-first Approach Explained | Postman
7 - What Is NoSQL? NoSQL Databases Explained | MongoDB
8 - What is NoSQL? | Nonrelational Databases, Flexible Schema Data Models | AWS (amazon.com)
9 - Serverless Architectures (amazon.com)
10 - Serverless Architecture: What It Is & How It Works | Datadog (datadoghq.com)
11 - Best Practice - An Introduction To Domain-Driven Design | Microsoft Learn
12 - معرفی معماریDomain Driven Design (sokanacademy.com)
14 - Hexagonal architecture – overview and best practices (tsh.io)
15 - Event sourcing (microservices.io)
16 - Event Sourcing pattern - Azure Architecture Center | Microsoft Learn
17 - outsystems.com/guide/low-code/
18 - What is Low-Code Development? | Mendix
19 - Business process management - Wikipedia
20 - What is business process management software? (techtarget.com)
21 - Apache Kafka Vs RabbitMQ: Main Differences You Should Know (simplilearn.com)
22 - RabbitMQ vs Kafka - Difference Between Message Queue Systems - AWS (amazon.com)
23 - Beginner’s Guide to Containers and Orchestration (pluralsight.com)
24 - What is container orchestration? (redhat.com)
25 - Log Management Tools(such as ELK) - ویرگول (virgool.io)
26 - What Is ELK Stack: Tutorial on How to Use It for Log Management - Sematext
27 - BrowserStack Test Observability
28 - Remote Hands, server support and monitoring – CloudSolution (solutions-cloud.net)
29 - Static + Dynamic Code Analysis with SonarQube | by Sandeep Kumar | Medium