توی این مقاله قصد دارم چندتا از موضوعات و کانسپت های پر کاربرد معماری نرم افزار رو بررسی کنم و یه توضیح کوتاهی به زبان ساده در مورد هر کدوم بدم صرفا برای اشنایی اولیه تا اگه علاقه به این موضوعات داشتین در موردش بیشتر تحقیق کنین . قبل از اینکه مقاله رو شروع کنم بزارین یک توضیح کوتاه راجب معماری نرم افزار بدم. معماری نرمافزار مجموعه قواعد و ساختارهایی است که مشخص میکنند چگونه نرمافزار ساخته شده و سازماندهی میشود. این ساختار نشان میدهد چگونه مؤلفهها و اجزا در نرمافزار با یکدیگر تعامل میکنند و چگونه دادهها و عملیاتها مدیریت میشوند. در واقع، معماری نرمافزار به ما کمک میکند تا بفهمیم که چگونه قسمتهای مختلف نرمافزار با هم ترتیب داده شده و کار میکنند تا یک نرمافزار کامل ایجاد شود. خوب دیگه مقدمه رو تموم کنیم و بریم سراغ مقاله.
معماری ماژولار مونولوتیک (Modular Monolithic)
یکی از الگو های رایج معماری مونولوتیک است که در ان یک برنامه یکپارچه (مونولوتیک) به قسمت های کوچک تر و مستقل (ماژولار) تقسیم می شود و هر بخش به صورت مستقل و جداگانه توسعه ، تست و نگهداری می شوند اما در پایان همه ی این بخش ها در یک برنامه یکپارچه ادغام می شوند . برای اشنایی با این معماری باید با معماری مونولوتیک و معماری ماژولار اشنا باشید زیرا ترکیب این دو است و تقریبا مزایای این دو معماری را دارد و بخشی از معایب ان ها را از بین برده است. وردپرس ، معروف ترین و پر استفاده ترین سیستم مدیریت محتوای جهان از این معماری استفاده می کند به این صورت که قسمت های مختلف مثل هسته ی اصلی وردپرس ، قالب ، افزونه و... به صورت ماژول های مختلف نگهداری و توسعه داده می شوند اما همه در یک نرم افزار وردپرس قرار دارند. مثلا وقتی می خواهید امکانات جدید به وبسایتون اضافه کنید کافی است که یک افزونه نصب کنید.
سرویسهای وب آمازون (Amazon Web Services)
سرویس های وب امازون که به صورت مخفف به آن aws گفته می شود یک پلتفرم رایانش ابری است که همانطور که از نامش پیداست شرکت امازون به کاربران خدمات زیرساختی مختلفی مانند ذخیرهسازی دادهها، قدرت پردازشی، پایگاههای داده ، یادگیری ماشین و ... را اراعه می دهد. این سرویس ها به صورت پرداخت به ازای استفاده به مشتریان فروخته می شود به این صورت که شما فقط به ازای منابع و ماشین های مجازی که استفاده میکنید هزینه پرداخت می کنید و هر زمان نیاز بیشتری داشتید به سرعت برای شما فراهم می شود.
رویکرد API-first
رویکرد api first به این صورت است که ما api ها را به عنوان محصول در نظر بگیریم و در سطح معماری مهم ترین و بالاترین ارزش را برای api ها قرار دهیم. به این صورت که در فرایند تولید نرم افزار ابتدا api ها را بسازیم و سپس با توجه به ان بقیه مراحل را پیش ببریم. api اهای ساخته شده باید قابل استفاده ی مجدد و سازگار باشند. مراقب باشید که این رویکرد را با موبایل فرست اشتباه نگرید ، در رویکرد موبایل فرست api فقط بخشی از نرم افزار موبایل هستند اما در این رویکرد مهم ترین قسمت نرم افزار ما حساب می شوند.
دیتابیس NoSQL
پایگاههای داده NoSQL، که مخفف Not Only SQL است ، یک پایگاه داده متفاوت با پایگاه داده های سنتی مانند mysql و اوراکل است. در پایگاه های داده سنتی از مدل های رابطه ای استفاده می کنند که در ان ها داده ها در جدول ها توسط سطون و ردیف مدیریت می شوند و جداول با همدیگه ارتباطات خاص خود را دارند و تمامی این اطلاعات در فایل های اسکیما ذخیره می شود اما پایگاه داده NoSQL داده ها را در XML یا JSON ذخیره می کند و از اسکیما پویا استفاده می کند که این کار باعث می شود دسترسی ، کارایی ، مقیاس پذیری بالا برود. پایگاههای داده NoSQL انواع مختلفی دارد مانند : پایگاههای داده گرافی ، پایگاههای داده چند مدله ، ایگاههای داده سندی و... که هر کدوم داستان خودشون دارند که در صورت علاقه میتونین دنبال کنید.
معماری بدون سرور (Serverless Architecture)
همانطور که از اسم این معماری پیداست ،در معماری بدون سرور اجرای برنامهها و سرویسها بدون نیاز به مدیریت سرورها انجام می شود . در این معماری توسعه دهندگان تمرکزشان را فقط روی برنامه نویسی و توسعه نرم افزار ها می گذارند و دیگر کوچک ترین دغدغه ای راجب زیرساخت مانند : نگهداری سرور ها ، کم یا زیاد کردن سرور ها با افزایش یا کاهش حجم درخواست ، تعادل بار، پیادهسازی سرورها، مراقبت و مانیتورینگ و دیباگینگ و ... ندارند و این کار ها را شرکت های سرویس دهنده ی ابری مثل گوگل کلود و aws که بالاتر تو همین مقاله توضیح دادیم برایشان انجام می دهد. مهم ترین ویژگی این معماری این است که سرویسی که به شما داده می شود کاملا پویا است و شرکت شما باید فقط به ازای مصرفش هزینه پرداخت می کند و از هدر رفت سرمایه برای خرید سرور اضافی یا از کم اومدن سرور در صورت رشد نرم افزار و مصرف جلوگیری می کند. نتفلیکس یکی از معروف ترین شرکت هایی است که از این معماری استفاده می کند.
معماری طراحی دامنه محور Domain Driven Design
بهترین تعریف برای این معماری را می توانیم جمله خود مبدع این معماری اقای Eric Evans بدانیم که اکثر اطلاعات مفیدی که از این معماری است از داخل کتاب همین شخص گرفته شده است.
برای ایجاد نرم افزار خوب، باید بدانید که آن نرم افزار چیست. شما نمی توانید یک سیستم نرم افزاری بانکی ایجاد کنید مگر اینکه درک خوبی از چیستی بانکداری داشته باشید، باید حوزه بانکداری را درک کنید.
مفهموم دامنه در این مثال را اگه بخوام با یه مثال بگم اینکه فرض کنید شما می خواهید یک فروشگاه اینترنتی ایجاد کنید. این فروشگاه آنلاین دارای محصولات، مشتریان، سفارشات، و سایر مفاهیم مرتبط با فروش است. این مفاهیم را میتوان به عنوان دامنه نرمافزار فروشگاه آنلاین شما در نظر گرفت.
معماری شش ضلعی (Hexagonal Architecture)
معماری شش ضلعی یک الگوی معماری نرمافزاری است که تمرکز اصلی آن، جداسازی منطق نرمافزار از زیرساخت است. در این رویکرد طراحی، نرمافزار به عنوان یک شش ضلعی در نظر گرفته میشود که در مرکز آن، منطق نرمافزار قرار دارد و در اطراف آن، زیرساخت قرار دارد. در این معماری، نرمافزار به دو بخش تقسیم میشود: مرکز نرمافزار که منطق کاربردی را شامل میشود و پورتها و آداپتورها که ارتباط با ورودی و خروجیهای خارجی را مدیریت میکنند و کاملا مستقل از زیرساخت هستند. این تفکیک این کمک را به ما می کند که فرایند تست و توسعه و تغیرات بسیار راحت تر و سریع تر انجام شود و از اتصال مستقیم به جزئیات خارجی جلوگیری میکند.
منبع یابی رویداد (Event Sourcing)
یک روش ذخیره داده در نرمافزار است که همه وقایع و تغییرات در سیستم را به صورت رویدادها ثبت میکند. به جای ذخیره وضعیت فعلی، همه تغییرات از طریق وقایع ثبت میشوند. این معماری امکان دسترسی به تاریخچه کامل تغییرات را فراهم میکند و به تحلیل و بازسازی وضعیتها در زمانهای مختلف کمک میکند. Event Sourcing در بسیاری از بخشها و قسمت های یک سیستم، از جمله امور مالی، مراقبتهای بهداشتی، خردهفروشی، حملونقل، توسعه بازیهای ویدیویی و بسیاری موارد دیگر، کاربردهای گستردهای دارد.
نرمافزارهایی هستند که به افراد بدون تجربه گسترده در برنامهنویسی اجازه میدهند تا نرمافزارها و برنامههای کاربردی پیچیده را به سادگی ایجاد کنند همچنین این کمک را به برنامه نویسان حرفه ای می کند که با سرعت و کیفیت بالاتری نرم افزار های پیچیده ایجاد کنند. این پلتفرمها از طریق ارائه ابزارها و ماژولهای آماده، کار توسعه نرمافزار را سادهتر میکنند. استفاده از این پلتفرم در شرکت ها و سازمان ها باعث افزایش چابکی و چالاکی ، کاهش هزینهها ، افزایش دقت در تصمیمگیری ، دسترسی به فناوریهای نوین و ... می شود .
سیستمهای مدیریت فرایند کسبوکار(BPMS)
به مجموعهای از ابزارها و روشهایی که برای بهبود، بهینهسازی، و اتوماسیون فرایندهای کسبوکار استفاده میشوند Business Process Management Systems می گویند. این سیستمها به سازمانها کمک میکنند تا فرایندهای خود را به شکلی مؤثرتر مدیریت کنند و به این ترتیب بهرهوری و کیفیت خدمات خود را افزایش دهند.این سیستم شامل اجزایی مانند نرمافزار مدلسازی فرایند، ابزارهای اتوماسیون، و داشبوردهای تحلیلی است. BPMS به کاربران اجازه میدهد تا فرایندهای کاری خود را شناسایی، طراحی، اجرا، نظارت و بهبود بخشند. اگه بخوایم یک مثلا عملی بزنیم مثلا یک شرکت ممکنه برای اتوماتیک کردن فرایندهایی مثل سفارشات مشتریان، مدیریت موجودی، یا پردازش حقوق و دستمزد و... از این سیستم استفاده کند.
صف پیام (Message Queue)
صف پیامرسانی (Message Queue) یک سیستم نرمافزاری است که برای مبادله پیامها بین برنامهها و سیستمهای کامپیوتری استفاده میشود. در واقع، این سیستم به برنامهها اجازه میدهد تا پیامها را بدون نیاز به اتصال مستقیم یا همزمان با یکدیگر ارسال و دریافت کنند. پیامها میتوانند از هر نوع دادهای از جمله متن، JSON، یا XML باشند.هنگامی که برنامه مقصد مشغول است یا متصل نیست، صف پیام ، پیام ارسال شده را به صورت موقت نگهداری می کند و تا زمانی که پیام توسط گیرنده دریافت نشود در ان جا ذخیره می ماند. استفاده از صفهای پیام به سیستمها امکان میدهد که به طور مؤثرتری با یکدیگر ارتباط برقرار کنند، کارایی سیستم را افزایش دهند و از ازدحام و بار اضافی بر سرورها جلوگیری کند. این فناوری در معماریهای مبتنی بر میکروسرویسها و سیستمهای توزیعشده کاربرد فراوانی دارد.
ارکستراسیون کانتینر (Container orchestration)
به معنای خودکار سازی فرایند ها برای اجرا در کانتینر ها و مدیریت و کنترل گروهی از کانتینرها است که درون آنها برنامهها و خدمات اجرا میشوند. این فناوری به ایجاد، مقیاسپذیری، مدیریت، و پیگیری کانتینرها کمک میکند . پر استفاده ترین و معروف ترین پلتفرم ارکستراسیون در کلاد ، کوبرنتیز است .
معروف ترین مسئله در این مورد صحبت در مورد اپلیکیشن هاست. در گذشته فرایند های مختلف تولید و منتشر کردن نرم افزار مانند کامپایل کردن کدها، پیکر بندی اجزا ، فعالیت های سمت سرور به صورت دستی انجام می شد که این اتفاق باعث بالا رفتن خطاها و اشتباهات می شود اما امروز با استفاده از این تکنولوژی این فرایند ها به صورت خودکار انجام می شود و از بسیاری از خطا ها جلوگیری می کند.
ابزار های مدیریت لاگ ( Log Management Tools )
ابزارهای مدیریت لاگ (Log Management Tools) دادههای لاگ را به طور مداوم جمعآوری، تجزیه و تحلیل کرده و به مدت زمان طولانی نگهداری میکنند. این دادهها برای مانیتورینگ عملکرد پویا و هشداردهی به زمان واقعی استفاده میشوند تا سازمانها نسبت به امنیت، کارایی و سلامت سیستمهای خود بیشترین دید و درک را داشته باشند. لاگها به تعداد زیادی در مراحل مختلف برنامهها و زیرساختهای سیستمی تولید میشوند. وقتی که جمعآوری و به کار گرفته میشوند، میتوانند به تجزیه و تحلیل اطلاعات حیاتی کمک کنند.
نرمافزارهای مدیریت لاگ با فیلتر کردن حجم عظیم داده و تبدیل آن به اطلاعات قابل مدیریت، چارتها، نقشهها و خلاصههای سادهتری از فعالیتهای شرکت ارائه میدهند.
ابزار های نظارت فناوری اطلاعات ( Monitoring tools )
نظارت بر IT یا فناوری اطلاعات، به مجموعه ابزارها و فرآیندهایی گفته میشود که برای تعیین کارکرد صحیح تجهیزات و خدمات IT یک سازمان و شناسایی و حل مشکلات استفاده میشوند. این ابزارها میتوانند از ابزارهای ساده تا راهحلهای پیشرفتهای که از هوش مصنوعی برای پیشبینی و جلوگیری از قطعی قبل از وقوع آن استفاده میکنند، متغیر باشند. با افزایش پیچیدگی محیطهای IT و رشد محبوبیت رایانش ابری، نظارت بر IT بهطور قابل توجهی تکامل یافته است. این نظارت شامل نظارت بر زیرساختهای مبتنی بر ابر و محلی (on-premises) میشود. انواع مختلفی از نظارت بر IT وجود دارد، از جمله نظارت بر دسترسی، نظارت بر عملکرد وب، مدیریت برنامههای کاربردی، نظارت بر API، نظارت بر کاربران واقعی، نظارت بر امنیت، و نظارت بر فعالیتهای تجاری. نظارت بر IT میتواند به سه دسته کلی ابزارهای نظارتی - تحلیلی، مشاهداتی، و تعاملی - تقسیمبندی شود. این ابزارها به تیمهای IT کمک میکنند تا درک بهتری از عملکرد سیستمهای خود در لحظه و برای مدت زمان طولانیتر داشته باشند و بتوانند تصمیمات کوتاهمدت و بلندمدت مؤثری بگیرند.
تحلیل استاتیک کد (Static Code Analysis)
یک روش اشکالزدایی است که بدون اجرای برنامه، بهطور خودکار کدهای منبع را بررسی میکند. این روش به توسعهدهندگان کمک میکند تا از انطباق، امنیت و ایمنی کد خود مطمئن شوند. تحلیل استاتیک کد به تجزیه و تحلیل کدها در برابر مجموعهای از قوانین برنامهنویسی اطلاق میشود و به شناسایی نقاط ضعفی که ممکن است به آسیبپذیریها منجر شوند، میپردازد. این فرآیند معمولاً در ابتدای توسعه، قبل از شروع تستهای نرمافزاری انجام میشود و با ایجاد یک حلقه بازخورد خودکار، به توسعهدهندگان کمک میکند تا از مشکلات احتمالی کدهای خود زودتر آگاه شوند و به راحتی آنها را برطرف کنند. تحلیل استاتیک در مقایسه با تحلیل دینامیک که پس از اجرای برنامه صورت میگیرد، نقایص را قبل از اجرای برنامه شناسایی میکند. این روش دارای محدودیتهایی است، از جمله عدم درک از قصد توسعهدهنده، قوانینی که بهطور استاتیک اجرا نمیشوند و احتمال گزارش اشتباهات کاذب. تحلیل استاتیک کد مزایایی از جمله سرعت، عمق و دقت در شناسایی مشکلات دارد و به بهبود کیفیت کد، افزایش امنیت، اطمینان از انطباق و افزایش کارایی کمک میکند.
منابع :
https://swagger.io/resources/articles/adopting-an-api-first-approach/ رویکرد api-first
https://7learn.com/blog/what-is-nosql : دیتابیس NoSQL
https://www.eventstore.com/event-sourcing : منبع یابی رویداد
https://rns.ir/blog/what-is-low-code-platforms : توسعه کم کد
https://www.ibm.com/topics/business-process-management : مدیریت فرایند کسبوکار
https://www.cloudamqp.com/blog/what-is-message-queuing.html : صف پیام
https://www.sumologic.com/blog/log-management-tool: ابزار های مدیریت لاگ
https://xaas.ir/blog/orchestration : ارکستراسیون کانتینر
https://www.splunk.com/en_us/data-insider/what-is-it-monitoring.html : ابزار های نظارت فناوری
https://www.perforce.com/blog/sca/what-static-analysis : تحلیل استاتیک کد