دانش اولیه معماری نرم افزار

معماری ماژولار-مونولیتیکمعماری ماژولار مونولیتیک روشی برای سازماندهی یک برنامه نرم افزاری در مجموعه ای از ماژول ها است. این ماژول ها دارای عملکرد خاصی هستند که می توانند به طور مستقل توسعه یافته و آزمایش شوند، در حالی که کل برنامه به عنوان یک واحد مستقر می شود. معماری مونولیتیک ماژولار می تواند مزایایی مانند قابلیت استفاده مجدد، قابلیت maintainability و عملکرد را ارائه دهد، در حالی که از پیچیدگی و سربار سیستم های توزیع شده جلوگیری می کند.Amazon Web Service(AWS)سرویس ابری آمازون (AWS) جامع ترین و گسترده ترین پلتفرم ابری جهان است. AWS بیش از 200 سرویس کاملاً ویژه را برای محاسبات، ذخیره سازی، پایگاه های داده، شبکه، تجزیه و تحلیل، یادگیری ماشینی و اینترنت اشیا(IoT) ارائه می دهد. AWS به میلیون‌ها مشتری از جمله استارت‌آپ‌ ها، شرکت‌ ها و سازمان‌ های دولتی کمک می‌کند تا هزینه‌ ها را کاهش دهند، چابک‌تر شوند و سریع‌تر نوآوری کنند. AWS با 25 region و 81 availability zone، حضور جهانی دارد. AWS به دلیل scalability, reliability, security و نوآوری شناخته شده است. مزایای اصلی AWS:· اکوسیستم بزرگ و بالغی از شرکا، توسعه دهندگان و مشتریان دارد.· مجموعه ای جامع از خدمات برای محاسبات، ذخیره سازی، شبکه، پایگاه داده، تجزیه و تحلیل داده ها، یادگیری ماشین، iot و امنیت ارائه می دهد.· مدل pay as you go است که به مشتریان امکان می دهد به اندازه مصرفشان پول بدهند.· تمرکز زیادی بر رضایت و پشتیبانی مشتری دارد.API-First Approachرویکرد API-first یک متدولوژی توسعه نرم افزار است که طراحی و توسعه یک رابط برنامه نویسی کاربردی(API) را به عنوان اولین گام در فرآیند اولویت بندی می کند. رویکرد API-First، API ها را به عنوان محصولات قابل استفاده مجدد و به راحتی قابل دسترسی که برنامه های مشتری مصرف می کنند، در نظر می گیرد. رویکردAPI-first می تواند به اطمینان از ثبات، کیفیت و مقیاس پذیری API ها و همچنین تقویت همکاری و بازخورد بین توسعه دهندگان و ذینفعان کمک کند. این رویکرد به تسریع فرآیند توسعه کمک می‌کند،چرا که تیم‌ های مختلف می‌توانند به صورت همزمان روی بخش‌ های مختلف در یک پروژه کار کنند.دیتابیس های NoSQLپایگاه های داده NoSQL، پایگاه داده های Non-Relational هستند که داده ها را در قالب هایی غیر از جداول ذخیره می کنند. پایگاه داده های NoSQL در انواع مختلفی مانند Document، Key-value pair، wide-column و گراف وجود دارند. پایگاه داده های NoSQL شما های انعطاف‌پذیر و مقیاس‌پذیری را به‌راحتی با مقادیر زیاد داده و بارهای بالای کاربر فراهم می‌کنند. پایگاه داده های NoSQL برای برنامه‌ هایی مناسب هستند که نیاز به مدیریت داده‌ های بدون ساختار، نیمه ساختاریافته یا چند شکلی دارند یا به عملکرد بالا، در دسترس بودن یا مقیاس‌پذیری افقی نیاز دارند.معماری Serverlessمعماری بدون سرور یک الگو طراحی نرم افزاری است که به توسعه دهندگان اجازه می دهد بدون نیاز به مدیریت سرورها برنامه های کاربردی بسازند و اجرا کنند. معماری بدون سرور برای تهیه، نگهداری و مقیاس‌بندی زیرساخت سرور و اجرای کد برنامه به یک ارائه‌دهنده cloud متکی است. معماری بدون سرور می‌تواند پیچیدگی عملیاتی، هزینه و زمان عرضه به بازار برنامه‌ ها را کاهش دهد و در عین حال مقیاس‌پذیری، عملکرد و قابلیت اطمینان را بهبود بخشد. یکی از محبوب‌ترین معماری‌ های بدون سرور Function as a Service (FaaS) است که در آن توسعه‌دهندگان کد برنامه خود را به‌عنوان مجموعه‌ ای از توابع مجزا می‌نویسند که توسط رویدادها راه‌ اندازی می‌شوند.Domain Driven Designطراحی دامنه محور (DDD) یک رویکرد طراحی نرم‌ افزاری است که بر مدل‌سازی نرم‌ افزار با توجه به حوزه کسب‌ و کار و ورودی‌ های کارشناسان حوزه تمرکز دارد. هدف DDD این است که منطق پیچیده تجاری را به تصویر بکشد و شکاف بین واقعیت تجاری و کد را ببندد. DDD شامل ایجاد یک مدل دامنه، یک زبان فراگیر و یک مدل از دامنه است که می تواند برای حل مشکلات دامنه استفاده شود. DDD همچنین ابزار های طراحی استراتژیک و تاکتیکی را برای سازماندهی و پیاده سازی مدل دامنه فراهم می کند.Hexagonal architectureمعماری شش ضلعی یک الگوی طراحی نرم افزار است که منطق اصلی برنامه را از نگرانی های بیرونی مانند رابط های کاربر، پایگاه های داده یا خدمات خارجی جدا می کند. معماری شش ضلعی از رابط ها به عنوان پورت ها و آداپتورها برای اتصال کد اصلی و عناصر بیرونی استفاده می کند. معماری شش ضلعی می تواند تست پذیری، قابلیت نگهداری و قابلیت حمل برنامه را بهبود بخشد و همچنین امکان اتصال شل و وارونگی وابستگی را فراهم می کند. معماری شش ضلعی به پورت ها و آداپتورها یا معماری پیاز نیز معروف است.Event SourcingEvent Sourcing یک تکنیک طراحی نرم‌ افزاری است که وضعیت برنامه را به‌عنوان دنباله‌ ای از رویدادها ثبت و ذخیره می‌ کند، نه به‌عنوان یک عکس فوری از وضعیت فعلی. منبع‌ یابی رویداد به برنامه اجازه می‌ دهد تا با پخش مجدد رویدادها، وضعیت هر نقطه از زمان را بازسازی کند، یا حالت‌ های جدیدی را از رویدادها استخراج کند. منبع‌ یابی رویداد می‌ تواند مزایایی مانند قابلیت ممیزی، ردیابی، سازگاری و مقیاس‌ پذیری را فراهم کند و همچنین معماری‌ های رویداد محور و میکروسرویس ها را فعال کند.Low code platformsپلتفرم های Low Code پلتفرم های توسعه نرم افزاری هستند که به کاربران اجازه می دهند برنامه هایی را با حداقل کدنویسی، با استفاده از رابط های کاربری گرافیکی، اجزای Drag and Drop، و قالب های از پیش ساخته شده ایجاد کنند. پلتفرم‌ های کم کد می‌توانند به کاربران کمک کنند تا به سرعت برنامه‌ بسازند بدون اینکه مهارت یا تجربه برنامه‌ نویسی گسترده داشته باشند. پلتفرم های کم کد همچنین می توانند همکاری، سفارشی سازی و ادغام با سیستم های دیگر را بهبود دهند. پلتفرم های کم کد برای برنامه های کاربردی ساده یا نمونه اولیه یا برای تقویت برنامه های موجود با ویژگی های جدید مناسب هستند.Business Process Management Systems (BPMS)سیستم های مدیریت فرآیند کسب و کار (BPMS) پلتفرم هایی هستند که فرآیندهای تجاری را اجرا و خودکار می کنند. BPMS ابزارهایی را برای طراحی، اجرا، نظارت و بهینه سازی فرآیندهای کسب و کار، مانند گردش کار، وظایف، قوانین و رویدادها فراهم می کند. BPMS می تواند به سازمان ها در بهبود کارایی، بهره وری، کیفیت و انطباق فرآیندهای تجاری خود و همچنین کاهش هزینه ها و خطاها کمک کند. BPMS همچنین می تواند از همکاری، ادغام و تجزیه و تحلیل پشتیبانی کند.Message Queueصف پیام یک جزء نرم افزاری است که ارتباط آسنکرون بین برنامه ها یا سرویس ها را با ذخیره و انتقال پیام ها امکان پذیر می کند. صف پیام فرستنده و گیرنده پیام ها را جدا می کند و به آنها اجازه می دهد به طور مستقل و با سرعت های مختلف عمل کنند. صف پیام می تواند مقیاس پذیری، قابلیت اطمینان و عملکرد برنامه ها یا خدمات را بهبود بخشد، همچنین Load Balancing، Fault Tolerance و پردازش توزیع شده را امکان پذیر می کند. چند نمونه از نرم افزارهای صف پیام آپاچی کافکا و RabbitMQ هستند که کافکا برای داده های بزرگ و پیام رسانی در مقیاس بالا طراحی شده است در حالی که RabbitMQ یک سیستم پیام‌رسانی قابل اعتماد و مدیریت‌ پذیر در اختیار کاربر میگذارد.Container Orchestrationارکستراسیون کانتینر فرآیند خودکارسازی Deploy، مدیریت، مقیاس‌ بندی و شبکه‌ سازی کانتینرها است. کانتینرها واحدهای نرم افزاری سبک و قابل حمل هستند که کد و وابستگی های یک برنامه کاربردی را بسته بندی می کنند. هماهنگ‌ سازی کانتینر با ارائه ویژگی‌ هایی مانند Service Discovery، Load Balancing، نظارت بر سلامت و مدیریت پیکربندی، به ساده‌ سازی پیچیدگی اجرای چندین کانتینر در چندین میزبان کمک می‌ کند. برخی از نمونه‌ های ابزار ارکستراسیون کانتینر عبارتند از Kubernetes، Docker Swarm و Apache Mesos.Log Management Toolsابزارهای مدیریت گزارش، ابزارهای نرم افزاری هستند که داده های گزارش را جمع آوری، ذخیره، تجزیه و تحلیل و تجسم می کنند. داده‌ های گزارش، سوابق رویدادها یا فعالیت‌ هایی هستند که در یک برنامه، سیستم یا شبکه رخ می‌ دهند. ابزارهای مدیریت گزارش می‌ توانند به نظارت بر عملکرد، در دسترس بودن و امنیت برنامه‌ ها، سیستم‌ ها یا شبکه‌ ها و همچنین عیب‌ یابی مشکلات، شناسایی روندها و ایجاد بینش کمک کنند. چند نمونه از ابزارهای مدیریت لاگ عبارتند از ELK Stack (Elasticsearch، Logstash و Kibana)، Splunk و Graylog. این ابزارها به سازمان‌ ها امکان می‌ دهند تا به سرعت مشکلات را شناسایی و رفع کنند و به درک عمیق‌ تری از عملکرد سیستم‌ های خود دست یابند.Monitoring toolsابزارهای نظارتی ابزارهای نرم افزاری هستند که وضعیت، رفتار یا عملکرد یک برنامه کاربردی، سیستم یا شبکه را اندازه گیری و گزارش می کنند. ابزارهای مانیتورینگ می توانند به اطمینان از Reliability، در دسترس بودن و کیفیت خدمات برنامه ها، سیستم ها یا شبکه ها و همچنین شناسایی و حل مشکلات، بهینه سازی منابع و بهبود تجربه کاربر کمک کنند. چند نمونه از ابزارهای نظارتی Prometheus، Nagios و Datadog هستند.Static Code Analysisتجزیه و تحلیل کد استاتیک یک تکنیک تست نرم افزار است که سورس کد یک برنامه را بدون اجرای آن تجزیه و تحلیل می کند. تجزیه و تحلیل کد استاتیک می تواند به شناسایی و حذف خطاها، باگ ها، آسیب پذیری ها و code smell ها کمک کند و همچنین کیفیت، امنیت و قابلیت نگهداری کد را بهبود بخشد. تجزیه و تحلیل کد استاتیک را می توان به صورت دستی یا خودکار، با استفاده از ابزارهایی که قوانین یا استانداردهای از پیش تعریف شده را بر روی کد اعمال می کنند، انجام داد. چند نمونه از ابزارهای تحلیل کد استاتیک عبارتند از: SonarQube، PMD و ESLint.منابع:https://www.kamilgrzybek.com/blog/modular-monolith-primer/https://www.thoughtworks.com/en-us/insights/blog/microservices/modular-monolith-better-way-build-softwarehttps://aws.amazon.com/what-is-aws/https://www.ibm.com/topics/awshttps://www.postman.com/api-first/https://swagger.io/resources/articles/adopting-an-api-first-approach/https://www.mongodb.com/nosql-explainedhttps://www.ibm.com/topics/nosql-databaseshttps://www.datadoghq.com/knowledge-center/serverless-architecture/https://www.redhat.com/en/topics/cloud-native-apps/what-is-serverlesshttps://en.wikipedia.org/wiki/Domain-driven_designhttps://thedigitalprojectmanager.com/tools/domain-driven-design/https://dzone.com/articles/hexagonal-architecture-what-is-it-and-how-does-ithttps://www.redhat.com/en/topics/microservices/what-is-hexagonal-architecturehttps://learn.microsoft.com/en-us/azure/architecture/patterns/event-sourcinghttps://developer.ibm.com/articles/event-sourcing-introduction/https://www.g2.com/categories/low-code-development-platformshttps://powerapps.microsoft.com/en-us/what-is-low-code/https://www.processmaker.com/blog/what-is-a-bpms-a-guide-to-business-process-management-systems/https://www.softwareag.com/en_corporate/resources/application-integration/article/bpms.htmlhttps://www.ibm.com/cloud/learn/message-queueshttps://www.redhat.com/en/topics/integration/what-are-message-queueshttps://www.ibm.com/cloud/learn/container-orchestrationhttps://www.redhat.com/en/topics/containers/what-is-container-orchestrationhttps://www.ibm.com/cloud/learn/log-managementhttps://www.redhat.com/en/topics/automation/what-is-log-managementhttps://www.ibm.com/cloud/learn/monitoring-toolshttps://www.redhat.com/en/topics/automation/what-is-monitoringhttps://www.ibm.com/cloud/learn/static-code-analysishttps://www.redhat.com/en/topics/automation/what-is-static-code-analysis