سلام در این پست میخواهیم چند اصطلاح در معماری نرم افزار را یاد بگیریم.
موضوع اول Infrastructure as Code (IaC) است برای راه اندازی محیط میشود مولفه ها را به صورت دستی تنظیم کرد . وقتی که تعداد این راه اندازی ها زیاد میشود برای مثال وقتی میخواهیم چندین سرور را راه اندازی کنیم این روش سخت میشود . با Infrastructure as Code یک فایل متنی که شامل کد های برنامه نویسی است مثل jason درست میکنیم و این فایل را به برنامه های Infrastructure as Code میدهیم تا برای ما تنظیم و راه اندازی کند . این موضوعات برای تیم devops بسیار کاربردی است چون قسمت ci/cd را با Infrastructure as Code انجام میدهیم و این روش باعث میشود که سریع تر بتوانیم فاز استقرا را انجام دهیم . و اینکه اشتباه انسانی را هم کم میکند چون به صورت اتوماتیک انجام میشود . موضوع دیگری که وجود دارد افزایش امکان کار تیمی است و میشود فایل ها را در اختیار باقی گروه ها قرار داد و هم اینکه میشود از فایل های اماده ی قبلی استفاده کرد یا فایل های خودمان را برای استفاده دیگران آپلود کنیم . terraform یکی از این ابزار ها است که Infrastructure as Code را برای ما انجام میدهد.
موضوع دوم API Gateway & Service Mesh است . در معماری میکروسرویس کاربر درخواست خود را به یک دروازه یا api gateway میدهد و این gateway مشخص میکند که باید با کدام میکروسرویس خدمات بگیرد باعث میشود که جلوی حمله ها گرفته بشود و تشخیص میدهد درخواست معتبر است یا خیر .وقتی که تعداد میکروسرویس های یک سیستم زیاد میشود نیاز به این است که این میکروسرویس ها با هم در ارتباط باشن و از همدیگر خدماتی را بگیرن . مثلا میکروسرویس سفارش از پرداخت استفاده میکند . اینجا service mesh میاید که وظیفه ی مدیریت ارتباط بین میکروسرویس ها را دارد .
موضوع سوم CQRS (Command Query Responsibility Segregation) است . سبکی از معماری است به این صورت که فرایند هایی که تغییری در سیستم ایجاد میکنند را از فرایند هایی ک فقط استخراج اطلاعات هستن و میخوانیم جدا کنیم . برای مثال ما داده هایی که تغییر میکنن را در sql و داده هایی که فقط مثل گزارش می مانند را در پایگاه داده های nosql ذخیره کیم . این سبک معماری باعث میشود که کارایی سیستم افزایش پیدا کند چون که ما برای بخش هایی که نیاز به نوشتن است از یک فناوری و بخش هایی که فقط نیاز به خواندن دارن را از یک فناوری دیگر میتوانیم استفاده کنیم و این باعث میشود که بهینه سازی انجام شود . همچنین باعث میشود طراحی ساده تر شود البته یکی از معایب این سبک این است که باعث میشود که پیاده سازی سخت تر شود . این موضوع با ساده شدن طراحی متفاوت است .
موضوع چهارم Event-Driven Architecture (EDA) است . وقتی که یک رویدادی اتفاق میفته بخش های مختلف سیستم که به این قسمت مربوط هستن خودشون تصمیم میگیرند که چه واکنشی به این رویداد نشون دهند . برای مثال وقتی کاربر روی خرید کلیک میکند بخش های مختلف مثل پرداخت و سریس انبارداری و سرویس ارسال و حمل و نقل به این رویداد واکنش نشان میدهند . بخش های مختلف با هم دیگر متصل نیستند و این عدم اتصال باعث میشود که راحت تر تغییر کند و همینطور این معماری برای سرویس های real time مناسب هستند . اصلی ترین بخش این معماری evant broker است که این بخش مثل یک واسط عمل میکند و وظیفه دارد که انتقال رویداد بین سیستم ها را انجام دهد .
موضوع پنجم Serverless Architecture است . رایانش بدون سرور یعنی انکه توسعه دهندگان بدون توجه به سرور بتوانند برنامه های خود را توسعه دهند . البته به این معنا نیست که سروری وجود ندارد . بلکه به این معنی است که توسعه دهنده نیاز به ارتباط با سرور نداردند و ارائخ دهندگان سرویس ابری از چندین تا سرور برای اجرای برنامه ی توسعه دهنده استفاده میکنند . پس توسعه دهنده فقط وظیفه ی نوشتن کد و منطق برنامه را دارد.معماری بدون سرور رویکردی جدید برای ساخت وب اپلیکیشنها به شمار می رود. برخلاف معماریهای سنتی، معماری serverless به توسعه دهندگان این امکان را میدهد تا بدون نگرانی در مورد زیرساخت، برنامههای کاربردی را طراحی و پیادهسازی نمایند .
موضوع ششم API-first Approach است . رویکردی است که برای طراحی سیستم ها از این استفاده میشود و در این رویکرد قبل از اینکه به رابط کاربری و backend بپردازیم api ها را طراحی میکنیم . در این رویکرد api ها در مرکز و نقطه شروع پروژه قرار دارند . این رویکرد باعث میشود که استفاده ی مجدد در برنامه ی ما بالا برود و اینکه هماهنگی بیشتر بین تیم های front و back وجود دارد چون که رابط های ساده ای باعث ایجاد هماهنگی بین اجزای مختلف سیستم میشوند .
موضوع هفتم Domain Driven Design است .این رویکرد برای توسعه نرمافزارهای پیچیده کاربرد دارد و از مرحله تحلیل تا کدنویسی همراه تیم توسعه است. DDD در دو بخش استراتژیک و تکنیکی فعالیت میکند، اما تمرکز اصلی آن روی درک عمیق دامنه کسبوکار (Domain) است؛ یعنی همان محدودهای که نرمافزار قرار است در آن کار کند.DDD معمولاً زمانی مفید است که پروژه دارای منطق تجاری پیچیده باشد. اما در پروژههای کوچک یا ساده، استفاده از آن ممکن است باعث افزایش زمان و هزینه بدون فایده خاصی شود.
موضوع هشتم Hexagonal architecture است . این معماری با هدف ایجاد سیستمهایی انعطافپذیر، قابل آزمایش و مستقل از زیرساخت طراحی شده است.در این مدل منطق اصلی برنامه (Domain Logic) در مرکز قرار دارد و از طریق پورتها (رابطهای ارتباطی) با اجزای خارجی تعامل میکند. آداپتورها نیز مسئول تبدیل ورودیها و خروجیها به شکلی قابل فهم برای منطق کسبوکار هستند.این معماری را میتوان به قلعهای ششضلعی تشبیه کرد که تالار مرکزی آن نمایانگر منطق برنامه و هر ضلع آن، درگاهی برای برقراری ارتباط با دنیای بیرون است.
موضوع نهم Event Sourcing است . به این معناست به جای اینکه فقط مقدار اخر را ذخیره کنیم مجموعه ی تغییراتی که در ان دیتا صورت گرفته است را ذخیره کنیم. این کار باعث میشود که حجم دیتابیس اضافه شود اما موضوعی که وجود دارد این است که باعث میشود که اطلاعات دیگری هم از ان فرایند داشته باشیم و اگر به هر دلیلی مقدار اخر دیتا از دست رفت بتوانیم بازیابی کنیم. مثلا در سیستم موجودی به جای اینکه فقط موجودی را ذخیره کنیم تراکنش های پیشین را هم ذخیره میکنیم .
موضوع دهم Low-code/No-code platforms است . پلتفرم هایی هستند که میشود بدون نوشتن کد یا با نوشتن کد های کم نرم افزار های مختلف را توسعه داد. یعنی مثلا ما میخواهیم قسمت محصولات نرم افزار خودمان را توسعه بدهیم . به جای اینکه کد بزنیم با کشیدن و رها کردن که با ماوس انجام میدهیم این کار را انجام میدهیم .
موضوع یازدهم Business Process Management Systems است .یک سیستم نرم افزاری است که به مدیریت برنامه های سازمان ها کمک میکند .نقش هر فرد را مشخص میکند و وظایفی که هر کس دارد را مشخص میکند . بعنی فرایند کاری را میشود با این سیستم مشخص کرد .
موضوع دوازدهم Message Queue (such as Kafka and RabbitMQ) است .یک ابزار نرم افزاری است که کاری میکند که اجزای مختلف سیستم با هم ارتباط برقرار کنند بدون اینکه به همدیگر وابستگی زیادی داشته باشند .
موضوع سیزدهم Container orchestration است . کانتینر ها بسته های سبکی هستند که هر چیزی که برنامه نیاز دارد تا به صورت مستقل کار کند را داخلش دارد . وقتی برنامهها رو با فناوری کانتینر اجرا میکنیم Container Orchestration به ما کمک میکنه این جعبهها رو به صورت خودکار و هوشمندانه اجرا، متوقف، جابهجا، یا هماهنگ کنیم.
موضوع چهاردهم Multi-Tenancy Architecture است . یک نرمافزار واحد به چند مشتری یا سازمان مختلف بهصورت همزمان سرویس بده، بدون اینکه اونها از وجود هم باخبر باشن یا به دادههای هم دسترسی داشته باشن. برای مثال خانه هایی که در یک اپارتمان قرار دارند و اپارتمان هایی که در ان ساختمان قرار دارند . ساختمان نرم افزار است و هر خانواده که در یک اپارتمان زندگی میکند یک سازمان.
موضوع پانزدهمEnterprise Integration Patterns است . مجموعهای از الگوهای طراحی که کمک میکنن سیستمهای مختلف یک سازمان که جداگانه ساخته شدن، بتونن با هم ارتباط برقرار کنن و اطلاعات رد و بدل کنن.برای مثال ممکن است بخش های مختلف یک سیستم مثل سفارش و پرداخت جداگانه از هم ساخته شده باشند اما وقتی کاربری خریدی را انجام میدهد باید پرداخت انجام شود و سفارش ثبت شود و موجودی تغیر کند . این الگوی طراحی باعث میشود بین اجزای مختلف سیستم پیام رد و بدل شود و با هم در ارتباط باشند .
https://www.irandnn.ir
faragostar.net
https://www.systemgroup.net
https://quera.org
https://mihanwebhost.com
https://blog.faradars.org
https://virgool.io