پرشین تم مقالات میکروسرویس چیست؟ مثال عملی در Asp Core

میکروسرویس چیست؟ مثال عملی در Asp Core

image profile پرشین تم - 09 مهر 1404 - 02:40 دانلود مقاله

میکروسرویس‌ها (Microservices) یک سبک معماری نرم‌افزاری هستند که در آن سیستم بزرگ به مجموعه‌ای از سرویس‌های کوچک، مستقل و قابل استقرار جداگانه تقسیم می‌شود. هر سرویس معمولاً یک وظیفه‌ی مشخص (business capability) دارد و می‌تواند به طور مستقل توسعه، تست، استقرار و مقیاس‌پذیری شود.

میکروسرویس چیست؟ مثال عملی در Asp Core

🔹 ویژگی‌های اصلی میکروسرویس‌ها

  • استقلال: هر سرویس جدا از بقیه توسعه و استقرار می‌شود.
  • ارتباط سبک‌وزن: معمولاً از REST API، gRPC، یا Messaging (مثل RabbitMQ, Kafka) استفاده می‌شود.
  • پایگاه داده مستقل: هر سرویس می‌تواند دیتابیس مخصوص خود را داشته باشد.
  • مقیاس‌پذیری جداگانه: فقط سرویس مورد نیاز scale می‌شود نه کل سیستم.
  • فناوری متنوع: سرویس‌ها می‌توانند با زبان‌ها یا تکنولوژی‌های مختلف ساخته شوند.

 

🔹 ملزومات برای پیاده‌سازی در ASP.NET Core

برای ساخت میکروسرویس با ASP.NET Core معمولاً به موارد زیر نیاز دارید:

  1. ایجاد API مستقل

    • هر میکروسرویس یک پروژه‌ی ASP.NET Core Web API است.

    • ساختار سبک (Controllerها یا Minimal APIs).

  2. ارتباط بین سرویس‌ها

    • HTTP/REST: ساده‌ترین روش، با استفاده از HttpClient یا Refit.

    • gRPC: سریع‌تر و مناسب سرویس‌های داخلی.

    • پیام‌محور (Event-Driven): با RabbitMQ, Kafka, Azure Service Bus.

  3. پایگاه داده مجزا

    • استفاده از EF Core یا Dapper برای هر سرویس.

    • دیتابیس جداگانه برای جلوگیری از coupling.

  4. Service Discovery و API Gateway

    • برای مدیریت ارتباطات و جلوگیری از سخت‌کدنویسی آدرس‌ها.

    • ابزارها: Ocelot, YARP, یا Kong.

  5. Authentication و Authorization

    • استفاده از IdentityServer4, OpenIddict یا Azure AD.

    • معماری JWT برای انتقال امن توکن بین سرویس‌ها.

  6. Logging و Monitoring

    • استفاده از Serilog, Seq, Elastic Stack (ELK) یا Application Insights.

  7. Containerization و Orchestration

    • ساخت و استقرار سرویس‌ها داخل Docker.

    • مدیریت و مقیاس‌پذیری با Kubernetes (K8s).

  8. Resilience و Fault Tolerance

    • پیاده‌سازی Retry، Circuit Breaker، Timeout.

    • استفاده از Polly در ASP.NET Core.

 

✅ به زبان ساده:
برای داشتن میکروسرویس در ASP.NET Core باید هر قابلیت مهم را به یک Web API مستقل تبدیل کنید، ارتباطات آن‌ها را با API Gateway و Messaging مدیریت کنید، امنیت را با JWT/IdentityServer تضمین کنید و همه چیز را در Docker/Kubernetes مستقر کنید.

 

📦 معماری نمونه: سیستم فروش آنلاین (E-commerce)

🔹 سرویس‌ها

  1. Product Service

    • مدیریت محصولات (نام، قیمت، موجودی)

    • دیتابیس جداگانه (مثلاً SQL Server)

  2. Order Service

    • ثبت سفارش و مدیریت وضعیت سفارش‌ها

    • دیتابیس جداگانه (مثلاً PostgreSQL)

    • برای گرفتن اطلاعات محصول، به سرویس Product درخواست می‌زند

  3. Customer Service

    • مدیریت مشتریان و پروفایل‌ها

    • دیتابیس جداگانه

  4. API Gateway (مثلاً با Ocelot یا YARP)

    • نقطه ورود یکپارچه برای کلاینت‌ها (وب/موبایل)

    • مدیریت Routing، Authentication، Rate Limiting

 

 

🔹 ارتباط بین سرویس‌ها

  • سینکرون (HTTP/gRPC):
    وقتی Order Service نیاز دارد اطلاعات محصول را بخواند → درخواست به Product Service می‌زند.

  • غیرسینکرون (Message Broker):
    وقتی سفارشی ثبت می‌شود → Order Service یک پیام "OrderCreated" در RabbitMQ منتشر می‌کند → سرویس‌های دیگر (مثل Inventory یا Notification) آن رو گوش می‌دهند.

 

🔹 ساختار پوشه‌ها (نمونه)

ECommerce.Microservices/
│
├── api-gateway/           --> Ocelot یا YARP
│
├── services/
│   ├── product-service/    --> ASP.NET Core Web API + SQL Server
│   ├── order-service/      --> ASP.NET Core Web API + PostgreSQL
│   └── customer-service/   --> ASP.NET Core Web API + MongoDB
│
├── shared/                --> DTO ها، پکیج‌های مشترک (مثلاً JWT utils)
│
└── docker-compose.yml     --> اجرای همه سرویس‌ها + دیتابیس‌ها + RabbitMQ

 

🔹 نمونه کد ساده (Product Service - ASP.NET Core Minimal API)

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<ProductDbContext>();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.MapGet("/products", async (ProductDbContext db) =>
    await db.Products.ToListAsync());

app.MapPost("/products", async (Product product, ProductDbContext db) =>
{
    db.Products.Add(product);
    await db.SaveChangesAsync();
    return Results.Created($"/products/{product.Id}", product);
});

app.Run();

 

🔹 API Gateway (Ocelot.json نمونه)

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/products",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [{ "Host": "localhost", "Port": 5001 }],
      "UpstreamPathTemplate": "/api/products",
      "UpstreamHttpMethod": [ "GET", "POST" ]
    },
    {
      "DownstreamPathTemplate": "/orders",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [{ "Host": "localhost", "Port": 5002 }],
      "UpstreamPathTemplate": "/api/orders",
      "UpstreamHttpMethod": [ "GET", "POST" ]
    }
  ]
}

 

🔹 ابزارهای کلیدی که باید اضافه بشن

  • Docker: هر سرویس داخل کانتینر خودش
  • RabbitMQ/Kafka: پیام‌رسانی بین سرویس‌ها
  • Polly: برای Retry و Circuit Breaker
  • JWT Auth (IdentityServer/OpenIddict): برای امنیت و هویت

 

✅ نتیجه:
ما سه سرویس جدا (محصول، سفارش، مشتری) داریم که هر کدوم دیتابیس خودشون رو دارن، ارتباط بین‌شون از طریق HTTP/gRPC + Messaging هست و همه پشت یک API Gateway قرار گرفتن.

 

در معماری میکروسرویس‌ها، هر سرویس می‌تواند روی یک سرور (یا حتی ماشین مجازی/کانتینر) جداگانه قرار بگیرد، اما اجباری نیست.

 

🔹 سناریوهای مختلف استقرار سرویس‌ها

  1. همه سرویس‌ها روی یک سرور

    • ساده‌ترین حالت برای شروع.

    • سرویس‌ها جدا هستند اما روی یک سرور اجرا می‌شوند.

    • معایب: اگر سرور Down شود، همه سرویس‌ها می‌خوابند. مقیاس‌پذیری هم سخت است.

  2. هر سرویس روی سرور (VM) جداگانه

    • استقلال بیشتر بین سرویس‌ها.

    • می‌شود منابع سخت‌افزاری متفاوت برای هر سرویس داد.

    • معایب: هزینه بالاتر + مدیریت پیچیده‌تر.

  3. استقرار با کانتینر (Docker)

    • هر سرویس داخل یک کانتینر جدا (ولی می‌توانند روی یک یا چند سرور اجرا شوند).

    • سبک‌تر از VM و قابل حمل.

    • معمول‌ترین روش در معماری میکروسرویس.

  4. Orchestration با Kubernetes

    • سرویس‌ها در قالب کانتینر Deploy می‌شوند.

    • K8s مسئول مدیریت مقیاس‌پذیری، Load Balancing، Service Discovery و Fault Tolerance است.

    • سرویس‌ها می‌توانند روی چندین سرور (Node) توزیع شوند.

 

🔹 نتیجه

  • در معماری میکروسرویس واقعی معمولاً سرویس‌ها روی سرورهای جدا یا کانتینرهای مجزا اجرا می‌شوند.
  • لزومی ندارد هر سرویس فیزیکی جدا باشد؛ می‌شود چند سرویس روی یک سرور هم مستقر شوند، ولی اصل ماجرا استقلال در استقرار و مقیاس‌پذیری است.
  • بهترین روش امروز: Docker + Kubernetes.

 

در معماری میکروسرویس شما برای هر سرویس (مثلاً Product، Order، Customer) یک پروژه مستقل دارید.

🔹 ویژگی‌های این استقلال:

  • هر پروژه Web API جداگانه است (با Startup و تنظیمات خودش).

  • هر سرویس می‌تواند دیتابیس مختص خودش داشته باشد.

  • سرویس‌ها می‌توانند روی سرور/کانتینرهای مختلف مستقر شوند.

  • اگر یکی از سرویس‌ها Down شود، بقیه همچنان کار می‌کنند.

  • می‌توانید یک سرویس خاص را به‌صورت مستقل مقیاس‌پذیر (Scale Out) کنید.

با خرید اشتراک می توانید تا چندین برابر مبلغ خرید اشتراک خود قالب های HTML ، سورس کدهای آماده و یا مقالات دانلود کنید
شما می توانید تنها فقط با مبلغ 3,000,000 میلیون تومان وب سایت سفارسی برای خود داشته باشید
محبوب ترین مقالات
تفاوت بین CSS و SCSS چیست؟ تفاوت بین CSS و SCSS چیست؟
category برنامه نویسی 07 اسفند 1402
تفاوت بین RDBMS و DBMS تفاوت بین RDBMS و DBMS
category برنامه نویسی 02 فروردین 1403
کاوش در معماری GPT-3 کاوش در معماری GPT-3
category هوش مصنوعی 12 اسفند 1402
کلمات کلیدی در SQL کلمات کلیدی در SQL
category برنامه نویسی 01 خرداد 1403
تفاوت بین CSS، SASS و SCSS چیست؟ تفاوت بین CSS، SASS و SCSS چیست؟
category برنامه نویسی 13 اسفند 1402
انواع Join در SQL انواع Join در SQL
category برنامه نویسی 02 فروردین 1403
ChatGPT چیست؟ ChatGPT چیست؟
category هوش مصنوعی 12 اسفند 1402
آخرین مقالات
آموزش معماری Bloc در فلاتر آموزش معماری Bloc در فلاتر معماری BLoC (مخفف Business Logic Component) یکی از محبوب‌ترین معماری‌ها در فلاتر برای مدیریت وضعیت (state management) ...
category برنامه نویسی 09 مهر 1404
Redis چیست؟ آموزش استفاده از آن در asp core Redis چیست؟ آموزش استفاده از آن در asp core Redis یک مخزن داده با عملکرد بالا و کلید-مقدار در حافظه است که اغلب برای ذخیره‌سازی موقت (caching)، مدیریت جلسه (sessi...
category برنامه نویسی 27 شهریور 1404
CI-CD در فلاتر چیست؟ CI-CD در فلاتر چیست؟ در توسعه فلاتر، CI/CD مخفف Continuous Integration (ادغام مداوم) و Continuous Delivery/Deployment (تحویل/استقرار مداوم)...
category برنامه نویسی 25 شهریور 1404