Monolith vs Microservice Architecture

این روزها ابعاد ایجاد یک نرم‌افزار بسیار گسنرده تر شده. خیلی میشنویم که Microservice architecture خیلی بهتر از Monolith هست. اما چرا؟!

با توضیح ابعاد هر کدوم میتونیم به خوبی تفاوت و مزیت‌های هر کدوم رو بفهمیم.
Monolith:
این همون روشی هست که اکثراً در حال استفاده هستیم! یعنی سریع VisualStudio رو باز می‌کنیم و شروع می‌کنیم به کد زدن، حالا اگر خیلی هم بخواهیم حال بدیم لایه‌بندی و Separation of concerns رو رعایت می‌کنیم. در نهایت همه این لایه‌ها میشه یک برنامه که روی یک سرور پابلیش میشه و دیگه ما از نحوه اجرا و عملکرد این لایه‌ها نظارتی نداریم.

Microservice:

در این حالت همونطور که در شکل هم پیدا است هر لایه یک اپلیکیشن جدا است که بر روی هاست جدا نیز پابلیش می‌شود. در این حالت هر لایه می‌تواند دیتابیس جدا داشته باشد یا همگی به یک دیتابیس وصل باشند. البته پیاده‌سازی این روش سختی‌های خودش را دارد ولی مزایای بیشتر از روش قبلی دارد. در این حالت هر سرویس می‌تواند توسط یک تیم توسعه مجزا از سازمان توسعه داده شده باشد. نکته اینجاست که اگر بخواهیم به یک مشتری بگیم از سیستم ما استفاده کن مجبور بودیم که همه زیرسرویس‌ها رو به کاربر بدبخت میدادیم که باعث میشه کاربر ندونه چی به چیه و گیج میشه!
حالا برای این که همه چیز جمع و جور بشه از API GATEWAY استفاده میکنیم. در این حالت همه چیز پشت یک آدرس جمع و هندل میشه.

برای پیاده‌سازی بخش API Gateway پیشنهاد شده که از Core استفاده کنید و از Ocelot API Gateway بهره ببرید.

Ocelot:
ابزاری OpenSource برای پلتفرم .Net Core است. این ابزار سر راه سایر Microserviceها قرار می‌گیرد و باعث می‌شود کاربر نهایی تنها با Gateway سرکار داشته باشد و وارد جزییات Microserviceها نشود. Ocelot API Gateway درخواست‌های ورودی ارسال شده توسط کاربر نهایی را به Microservice مربتط با درخواست ارسال می‌کند. توجه داشته باشید که Ocelot در حال حاظر بر روی Core قابل استفاده بوده و بر روی برنامه‌های .Net Framework قابل استفاده نیست.
دو مفهوم کاربری در Ocelot وجود دارد:
1. Upstream : درخواستی است که توسط کاربرنهایی به API Gateway ارسال می‌شود.
2. Downstream : درخواستی است که توسط API Gateway به Microservice ارسال می‌شود.

ویژگی‌های Ocelot:
• مسیردهی درخواست‌های ورودی به Microservice مربوطه
• Authentication
• Authorization
• Load Balance