جمع آوری و نگارش: آرمان مقیمی ابیانه
استاد درس: دکتر صادق علیاکبری
دانشکده مهندسی و علوم کامپیوتر - دانشگاه شهید بهشتی

Chaos Engineering روشی برای افزایش پایداری و قابلیت اطمینان سیستمهای نرمافزاری است. در این رویکرد، تیم توسعه بهصورت کنترلشده برخی خطاها و اختلالها را در محیط سیستم ایجاد میکند تا واکنش سامانه را بررسی کند. هدف این نیست که سیستم خراب شود، بلکه هدف این است که قبل از وقوع مشکلات واقعی، نقاط ضعف شناسایی شوند. برای مثال ممکن است یکی از سرورها بهصورت عمدی از دسترس خارج شود یا ارتباط بین دو سرویس قطع گردد. اگر سیستم بتواند همچنان به کار خود ادامه دهد، نشاندهنده طراحی مناسب آن است. امروزه شرکتهای بزرگی مانند نتفلیکس از این روش استفاده میکنند، زیرا در سامانههای توزیعشده امکان وقوع خطا همیشه وجود دارد. Chaos Engineering کمک میکند تا تیمها نسبت به رفتار سیستم در شرایط بحرانی شناخت بهتری پیدا کنند.
الگوی Backend for Frontend یا BFF زمانی استفاده میشود که یک سامانه دارای چند نوع رابط کاربری مختلف مانند وب، موبایل و دسکتاپ باشد. در این روش به جای استفاده از یک API مشترک برای همه کاربران، برای هر نوع فرانتاند یک بکاند اختصاصی طراحی میشود. این بکاند واسط درخواستهای فرانتاند را دریافت کرده و دادهها را به شکلی مناسب برای همان رابط کاربری آماده میکند. مزیت اصلی این رویکرد کاهش پیچیدگی در فرانتاند و جلوگیری از دریافت اطلاعات غیرضروری است. برای مثال نیازهای یک برنامه موبایل معمولاً با نسخه وب متفاوت است و داشتن یک BFF مستقل میتواند عملکرد و تجربه کاربری را بهبود دهد. این الگو در معماری مایکروسرویسی نیز کاربرد فراوانی دارد.
عبارت AI4SE مخفف Artificial Intelligence for Software Engineering است و به استفاده از هوش مصنوعی برای کمک به فرایندهای مهندسی نرمافزار اشاره دارد. در این رویکرد، ابزارهای هوشمند برای انجام فعالیتهایی مانند تولید کد، تشخیص خطا، تست نرمافزار، تحلیل نیازمندیها و مستندسازی به کار گرفته میشوند. امروزه ابزارهایی مانند GitHub Copilot نمونهای از کاربرد AI4SE هستند. این ابزارها میتوانند سرعت توسعه را افزایش داده و بخشی از کارهای تکراری را خودکار کنند. البته همچنان نظارت و تصمیمگیری نهایی بر عهده مهندسان نرمافزار است. با رشد مدلهای زبانی بزرگ، نقش AI4SE در صنعت نرمافزار روزبهروز پررنگتر میشود و انتظار میرود در آینده بخش مهمی از فرایند توسعه نرمافزار توسط این فناوری پشتیبانی شود.
SE4AI یا Software Engineering for Artificial Intelligence به استفاده از اصول مهندسی نرمافزار برای توسعه سیستمهای مبتنی بر هوش مصنوعی اشاره دارد. ساخت یک مدل هوش مصنوعی تنها بخشی از کار است و برای استفاده عملی از آن باید مسائل مختلفی مانند مدیریت دادهها، استقرار، تست، نگهداری و نسخهبندی نیز در نظر گرفته شود. در واقع SE4AI تلاش میکند همان نظم و ساختاری را که در توسعه نرمافزارهای سنتی وجود دارد، به پروژههای هوش مصنوعی نیز وارد کند. چالش این حوزه آن است که رفتار مدلهای یادگیری ماشین معمولاً وابستگی زیادی به دادهها دارد و تغییر دادهها میتواند نتایج سیستم را تحت تأثیر قرار دهد. بنابراین استفاده از روشهای مهندسی نرمافزار در پروژههای هوش مصنوعی اهمیت زیادی پیدا میکند.
MLOps ترکیبی از مفاهیم Machine Learning و DevOps است. هدف آن مدیریت چرخه عمر مدلهای یادگیری ماشین از مرحله آموزش تا استقرار و نگهداری است. در پروژههای هوش مصنوعی معمولاً مدلها باید بهصورت مداوم بهروزرسانی شوند و عملکرد آنها در محیط واقعی تحت نظارت قرار گیرد. MLOps ابزارها و فرایندهایی را فراهم میکند که این کارها را خودکار و استاندارد میسازند. برای مثال میتوان آموزش مدل، ارزیابی، استقرار و پایش آن را در قالب یک خط لوله خودکار انجام داد. این رویکرد باعث کاهش خطاهای انسانی و افزایش سرعت ارائه قابلیتهای جدید میشود. امروزه بسیاری از سازمانها برای مدیریت پروژههای هوش مصنوعی در مقیاس بزرگ از MLOps استفاده میکنند.
Infrastructure as Code به معنای مدیریت زیرساختها از طریق کد است. در گذشته پیکربندی سرورها و شبکهها معمولاً بهصورت دستی انجام میشد، اما در IaC تمامی تنظیمات در قالب فایلهای متنی و قابل نسخهبندی ذخیره میشوند. ابزارهایی مانند Terraform و Ansible در این زمینه بسیار معروف هستند. مزیت اصلی این روش تکرارپذیری و کاهش خطاهای انسانی است. به عنوان مثال اگر نیاز باشد چندین محیط مشابه ایجاد شود، میتوان تنها با اجرای کدها همان زیرساخت را دوباره تولید کرد. همچنین تغییرات زیرساختی قابل ثبت و پیگیری خواهند بود. IaC یکی از پایههای اصلی DevOps و رایانش ابری محسوب میشود و در پروژههای مدرن کاربرد گستردهای دارد.
API Gateway و Service Mesh هر دو برای مدیریت ارتباط بین سرویسها استفاده میشوند اما اهداف متفاوتی دارند. API Gateway معمولاً در ورودی سیستم قرار میگیرد و درخواستهای کاربران را دریافت میکند. وظایفی مانند احراز هویت، محدودسازی نرخ درخواستها و مسیریابی درخواستها را بر عهده دارد. در مقابل، Service Mesh برای مدیریت ارتباطات داخلی بین سرویسهای یک سامانه مایکروسرویسی طراحی شده است. این فناوری امکاناتی مانند مانیتورینگ، رمزنگاری ارتباطات و مدیریت ترافیک را فراهم میکند. در معماریهای بزرگ، استفاده همزمان از API Gateway و Service Mesh میتواند امنیت، مشاهدهپذیری و مدیریت ارتباطات را بهبود دهد. به همین دلیل این دو فناوری به بخش مهمی از معماریهای ابری تبدیل شدهاند.
CQRS مخفف Command Query Responsibility Segregation است. ایده اصلی این الگو جداسازی عملیات خواندن دادهها از عملیات تغییر دادهها است. در بسیاری از سیستمها نیازهای بخش خواندن و نوشتن کاملاً متفاوت هستند. برای مثال ممکن است تعداد درخواستهای خواندن بسیار بیشتر از نوشتن باشد. در CQRS میتوان مدلهای جداگانهای برای این دو نوع عملیات طراحی کرد. این موضوع باعث افزایش کارایی و انعطافپذیری سیستم میشود. البته پیادهسازی CQRS پیچیدگی بیشتری نسبت به معماریهای سنتی دارد و معمولاً در پروژههای بزرگ و مقیاسپذیر استفاده میشود. این الگو اغلب همراه با Event Sourcing به کار میرود.
معماری رویدادمحور یا Event-Driven Architecture بر پایه تولید و مصرف رویدادها عمل میکند. در این رویکرد، اجزای مختلف سیستم از طریق ارسال رویداد با یکدیگر ارتباط برقرار میکنند. برای مثال پس از ثبت سفارش در یک فروشگاه اینترنتی، رویدادی تولید میشود که سرویسهای دیگر مانند پرداخت، انبار و ارسال میتوانند به آن واکنش نشان دهند. مزیت اصلی این معماری کاهش وابستگی مستقیم بین اجزای سیستم است. همچنین امکان توسعه و مقیاسپذیری بهتر فراهم میشود. با این حال مدیریت رویدادها و ردیابی جریان اطلاعات میتواند چالشبرانگیز باشد. امروزه بسیاری از سامانههای بزرگ و توزیعشده از معماری رویدادمحور استفاده میکنند.
در معماری Serverless توسعهدهندگان بدون نیاز به مدیریت مستقیم سرورها، برنامههای خود را اجرا میکنند. در این مدل، ارائهدهنده خدمات ابری مسئول تهیه، نگهداری و مقیاسبندی زیرساخت است. توسعهدهنده تنها کد موردنظر خود را مینویسد و در اختیار پلتفرم قرار میدهد. یکی از مزایای مهم این رویکرد پرداخت هزینه بر اساس میزان استفاده است. برای مثال اگر تابعی اجرا نشود، هزینهای نیز پرداخت نمیشود. سرویسهایی مانند AWS Lambda نمونهای از این معماری هستند. Serverless برای برنامههایی با بار کاری متغیر بسیار مناسب است، اما در برخی موارد محدودیتهایی مانند تأخیر در شروع اجرا یا وابستگی به ارائهدهنده سرویس وجود دارد.
در رویکرد API-First طراحی API پیش از توسعه سایر بخشهای سیستم انجام میشود. در این روش ابتدا قراردادها و نحوه تعامل اجزای مختلف مشخص میشود و سپس توسعه نرمافزار بر اساس آن صورت میگیرد. این رویکرد باعث میشود تیمهای مختلف بتوانند بهصورت مستقل و همزمان روی بخشهای مختلف پروژه کار کنند. همچنین مستندسازی و یکپارچهسازی سیستمها سادهتر میشود. در معماریهای مایکروسرویسی و سامانههایی که چندین مصرفکننده API دارند، API-First اهمیت زیادی پیدا میکند. این روش کمک میکند تا طراحی سیستم منسجمتر بوده و از بروز ناسازگاریهای بعدی جلوگیری شود.
طراحی دامنهمحور یا DDD رویکردی برای توسعه نرمافزارهای پیچیده است که بر درک دقیق حوزه کسبوکار تمرکز دارد. در این روش توسعهدهندگان و متخصصان کسبوکار تلاش میکنند زبان مشترکی ایجاد کنند تا مفاهیم سیستم بهدرستی مدلسازی شوند. DDD پیشنهاد میکند سیستم به بخشهای کوچکتری به نام Bounded Context تقسیم شود که هرکدام مسئول یک قسمت مشخص از دامنه هستند. این رویکرد باعث میشود پیچیدگی بهتر مدیریت شده و ارتباط بین نیازهای کسبوکار و پیادهسازی فنی حفظ شود. DDD بهویژه در پروژههای بزرگ سازمانی و سامانههای مایکروسرویسی کاربرد فراوانی دارد.
معماری ششضلعی که با نام Ports and Adapters نیز شناخته میشود، روشی برای جداسازی منطق اصلی سیستم از اجزای خارجی است. در این معماری، هسته برنامه مستقل از پایگاه داده، رابط کاربری یا سرویسهای خارجی طراحی میشود. ارتباط با این اجزا از طریق پورتها و آداپتورها انجام میگیرد. مزیت اصلی این رویکرد افزایش قابلیت تست و کاهش وابستگی به فناوریهای خاص است. به عنوان مثال میتوان بدون تغییر منطق اصلی، نوع پایگاه داده را تغییر داد. این معماری به توسعه سیستمهای انعطافپذیر و قابل نگهداری کمک میکند و در پروژههای مدرن بسیار مورد توجه قرار گرفته است.
Event Sourcing الگویی است که در آن وضعیت سیستم از طریق ذخیره رویدادها نگهداری میشود. به جای ذخیره آخرین وضعیت دادهها، تمامی تغییرات به صورت رویداد ثبت میشوند. برای بازسازی وضعیت فعلی، کافی است این رویدادها به ترتیب اجرا شوند. یکی از مزایای مهم این روش امکان مشاهده کامل تاریخچه تغییرات است. همچنین قابلیت بازگردانی یا تحلیل رفتار گذشته سیستم فراهم میشود. البته مدیریت تعداد زیاد رویدادها و پیچیدگی پیادهسازی از چالشهای این الگو محسوب میشود. Event Sourcing معمولاً در سیستمهایی که نیاز به ثبت دقیق تغییرات دارند مورد استفاده قرار میگیرد.
پلتفرمهای Low-Code و No-Code ابزارهایی هستند که امکان توسعه نرمافزار را با حداقل برنامهنویسی فراهم میکنند. در این سیستمها کاربران میتوانند با استفاده از رابطهای گرافیکی و ابزارهای آماده، برنامههای موردنیاز خود را ایجاد کنند. تفاوت اصلی آنها در میزان نیاز به کدنویسی است؛ در Low-Code مقداری برنامهنویسی وجود دارد اما در No-Code تقریباً همه چیز از طریق رابط گرافیکی انجام میشود. این پلتفرمها باعث افزایش سرعت توسعه و کاهش وابستگی به برنامهنویسان حرفهای میشوند. البته در پروژههای پیچیده ممکن است محدودیتهایی از نظر انعطافپذیری و سفارشیسازی وجود داشته باشد.
سیستمهای مدیریت فرایندهای کسبوکار یا BPMS برای مدلسازی، اجرا و بهینهسازی فرایندهای سازمانی استفاده میشوند. این سیستمها به سازمانها کمک میکنند تا فعالیتهای مختلف را بهصورت استاندارد و قابل پیگیری مدیریت کنند. برای مثال فرایندهایی مانند ثبت درخواست، تأیید اسناد یا مدیریت شکایات میتوانند در BPMS تعریف شوند. مزیت اصلی این ابزارها افزایش شفافیت، کاهش کارهای دستی و بهبود بهرهوری است. بسیاری از BPMS ها از استاندارد BPMN برای نمایش فرایندها استفاده میکنند. امروزه سازمانهای بزرگ برای دیجیتالیسازی و خودکارسازی فرایندهای خود از این سیستمها بهره میبرند.
صف پیام یا Message Queue روشی برای برقراری ارتباط غیرهمزمان بین اجزای مختلف سیستم است. در این روش پیامها ابتدا در یک صف ذخیره میشوند و سپس توسط سرویسهای مقصد پردازش میگردند. این موضوع باعث کاهش وابستگی مستقیم بین سرویسها میشود. RabbitMQ و Kafka از محبوبترین فناوریهای این حوزه هستند. RabbitMQ بیشتر برای صفبندی سنتی و مسیریابی پیامها استفاده میشود، در حالی که Kafka برای پردازش حجم بسیار زیاد داده و جریانهای رویدادی مناسب است. استفاده از Message Queue موجب افزایش مقیاسپذیری، تحمل خطا و پایداری سیستم میشود.
کانتینرها روشی برای بستهبندی نرمافزار به همراه تمامی وابستگیهای آن هستند. Docker شناختهشدهترین فناوری در این حوزه است. با استفاده از کانتینرها میتوان اطمینان داشت که برنامه در محیطهای مختلف به شکل یکسان اجرا خواهد شد. زمانی که تعداد کانتینرها زیاد شود، مدیریت آنها دشوار خواهد شد. به همین دلیل ابزارهای ارکستراسیون مانند Kubernetes ایجاد شدهاند. Kubernetes وظایفی مانند استقرار، مقیاسبندی، بازیابی خودکار و توزیع بار را مدیریت میکند. امروزه کانتینرها و Kubernetes از فناوریهای کلیدی در رایانش ابری و معماری مایکروسرویسی محسوب میشوند.
معماری چندمستاجری یا Multi-Tenancy روشی است که در آن چندین مشتری یا سازمان از یک سامانه مشترک استفاده میکنند. در این مدل منابع نرمافزاری مشترک هستند اما دادهها و تنظیمات هر مشتری از دیگران جدا نگهداری میشود. این معماری در سرویسهای ابری و نرمافزارهای SaaS بسیار رایج است. مزیت اصلی آن کاهش هزینههای نگهداری و استفاده بهینه از منابع است. با این حال طراحی صحیح مکانیزمهای امنیتی و جداسازی دادهها اهمیت بسیار زیادی دارد. بسیاری از نرمافزارهای سازمانی مدرن از معماری Multi-Tenancy برای ارائه خدمات به تعداد زیادی مشتری استفاده میکنند.
مهاجرت دادهها یا Data Migration فرایند انتقال دادهها از یک سیستم به سیستم دیگر است. این عملیات ممکن است هنگام تغییر پایگاه داده، ارتقای نرمافزار یا انتقال به زیرساخت جدید انجام شود. مهاجرت دادهها معمولاً شامل استخراج دادهها، تبدیل آنها به قالب مناسب و بارگذاری در سیستم مقصد است. یکی از مهمترین چالشها در این فرایند حفظ صحت و کامل بودن اطلاعات است. به همین دلیل معمولاً قبل و بعد از مهاجرت، تستها و بررسیهای متعددی انجام میشود. با توجه به ارزش بالای دادهها در سازمانها، Data Migration یکی از فعالیتهای حساس و مهم در پروژههای فناوری اطلاعات محسوب میشود.
Wikipedia
Microsoft Learn
AWS Documentation
Martin Fowler Articles
IBM Cloud Documentation
Docker Documentation
Kubernetes Documentation
ChatGPT
Gemini