ASP.NET Aspire چیست؟ راهنمای کامل استفاده از Aspire در دات نت

مقدمه

با رشد معماری Microservice و Distributed Systems، مدیریت سرویس‌های متعدد، ارتباط میان آن‌ها، لاگ‌گیری، مانیتورینگ و پیکربندی به یکی از چالش‌های اصلی توسعه‌دهندگان تبدیل شده است.

مایکروسافت برای حل این مشکل، در .NET 8 فناوری جدیدی به نام ASP.NET Aspire را معرفی کرد.

Aspire مجموعه‌ای از ابزارها، کتابخانه‌ها و قابلیت‌های آماده است که توسعه و مدیریت برنامه‌های توزیع‌شده را ساده‌تر می‌کند.

به زبان ساده:

اگر قبلاً برای اجرای چندین سرویس مجبور بودید Docker Compose، OpenTelemetry، Service Discovery و Monitoring را به صورت جداگانه تنظیم کنید، Aspire بسیاری از این کارها را به شکل آماده در اختیار شما قرار می‌دهد.


ASP.NET Aspire دقیقا چیست؟

Aspire یک Framework برای توسعه برنامه‌های توزیع‌شده (Distributed Applications) در اکوسیستم .NET است.

این فریمورک امکانات زیر را فراهم می‌کند:

  • Service Discovery

  • Service Orchestration

  • Telemetry

  • Logging

  • Monitoring

  • Health Checks

  • Dashboard

  • Container Integration

  • Cloud Native Development


چرا Aspire ایجاد شد؟

قبل از Aspire توسعه‌دهندگان معمولاً با مشکلات زیر مواجه بودند:

  • پیچیدگی اجرای چند سرویس

  • سخت بودن مانیتورینگ

  • تنظیمات متعدد OpenTelemetry

  • مدیریت Connection String ها

  • Service Discovery

  • پیکربندی Docker Compose

مایکروسافت Aspire را معرفی کرد تا این مشکلات را برطرف کند.


مزایای استفاده از Aspire

1. راه‌اندازی سریع Microservice ها

به جای اجرای دستی چندین پروژه:

Auth Service
User Service
Order Service
Notification Service
Gateway

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


2. داشبورد داخلی

Aspire دارای داشبورد داخلی است که اطلاعات زیر را نمایش می‌دهد:

  • سرویس‌های فعال

  • Log ها

  • Trace ها

  • Metrics

  • Health Status


3. مانیتورینگ خودکار

بدون نیاز به تنظیم دستی:

  • OpenTelemetry

  • Tracing

  • Metrics

همه چیز به صورت خودکار فعال می‌شود.


4. Service Discovery

به جای:

https://localhost:5001

می‌توانید از نام سرویس استفاده کنید:

builder.Services.AddHttpClient("user-service");

5. آماده برای Cloud

Aspire برای استقرار روی:

  • Azure

  • Docker

  • Kubernetes

  • Linux Servers

طراحی شده است.


اجزای اصلی Aspire

AppHost

مغز اصلی سیستم است.

تمام سرویس‌ها در این پروژه ثبت می‌شوند.

مثال:

var builder = DistributedApplication.CreateBuilder(args);

var api = builder.AddProject<Projects.Api>("api");

builder.Build().Run();

Service Defaults

تنظیمات مشترک بین تمام سرویس‌ها را نگهداری می‌کند.

مانند:

  • Logging

  • Telemetry

  • Health Checks


Dashboard

داشبورد مدیریتی برای مشاهده:

  • Metrics

  • Logs

  • Requests

  • Performance


چه زمانی باید از Aspire استفاده کنیم؟

استفاده از Aspire مناسب است اگر:

  • چند API دارید.

  • معماری Microservice دارید.

  • از Message Broker استفاده می‌کنید.

  • نیاز به مانیتورینگ دارید.

  • قصد استقرار در Cloud دارید.


چه زمانی Aspire مناسب نیست؟

اگر فقط یک پروژه کوچک دارید:

MVC
Web API
WinForms
Console

معمولاً نیازی به Aspire ندارید.

مزایای اصلی Aspire در پروژه‌های چند سرویسه دیده می‌شود.


ابزارهای مشابه Aspire

Docker Compose

مزایا:

  • سبک

  • ساده

معایب:

  • فاقد Dashboard

  • فاقد Telemetry داخلی


Kubernetes

مزایا:

  • بسیار قدرتمند

  • مقیاس‌پذیری بالا

معایب:

  • پیچیدگی زیاد

  • نیاز به دانش DevOps


Dapr

مزایا:

  • Service Discovery

  • Pub/Sub

معایب:

  • نیاز به یادگیری جداگانه


مقایسه Aspire با Docker Compose

ویژگی

Aspire

Docker Compose

Dashboard

دارد

ندارد

Telemetry

دارد

ندارد

Logging

دارد

محدود

Service Discovery

دارد

محدود

Integration with .NET

عالی

متوسط


ساخت اولین پروژه Aspire

ابتدا SDK مربوطه را نصب کنید:

dotnet workload install aspire

سپس:

dotnet new aspire

ساختار پروژه:

MyApplication

├── AppHost
├── ServiceDefaults
├── ApiService
└── WebApp

اتصال پروژه‌های موجود به Aspire

فرض کنید پروژه زیر را دارید:

MySolution

├── UserApi
├── ProductApi
└── OrderApi

یک پروژه Aspire AppHost ایجاد کنید.

سپس:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddProject<Projects.UserApi>("user-api");

builder.AddProject<Projects.ProductApi>("product-api");

builder.AddProject<Projects.OrderApi>("order-api");

builder.Build().Run();

اضافه کردن Service Defaults

در Program.cs هر سرویس:

builder.AddServiceDefaults();

سپس:

app.MapDefaultEndpoints();

استفاده از Service Discovery

فرض کنید User Service داریم:

builder.AddProject<Projects.UserApi>("user-api");

در سرویس دیگر:

builder.Services.AddHttpClient(
    "user-api");

Aspire آدرس سرویس را پیدا می‌کند.

نیازی به Connection String یا URL دستی نیست.


اضافه کردن SQL Server

var sql = builder.AddSqlServer("sql");

ساخت دیتابیس:

var db = sql.AddDatabase("MainDb");

اتصال API:

builder.AddProject<Projects.Api>("api")
       .WithReference(db);

اضافه کردن Redis

var redis = builder.AddRedis("redis");

سپس:

.WithReference(redis)

اضافه کردن RabbitMQ

var rabbit = builder.AddRabbitMQ("rabbit");

اتصال:

.WithReference(rabbit)

مانیتورینگ با Aspire Dashboard

پس از اجرای AppHost:

dotnet run

داشبورد Aspire باز می‌شود و می‌توانید مشاهده کنید:

  • درخواست‌ها

  • خطاها

  • زمان پاسخگویی

  • مصرف منابع

  • وضعیت سرویس‌ها


Aspire در پروژه‌های DDD

اگر پروژه شما دارای لایه‌های زیر است:

Domain
Application
Infrastructure
Presentation

Aspire فقط در سطح Host و Infrastructure قرار می‌گیرد و هیچ وابستگی به Domain ایجاد نمی‌کند.

بنابراین کاملاً با:

  • DDD

  • Clean Architecture

  • CQRS

  • Mediator

سازگار است.


جمع‌بندی

ASP.NET Aspire نسل جدید ابزارهای مایکروسافت برای توسعه برنامه‌های توزیع‌شده است. این فناوری بسیاری از قابلیت‌هایی که قبلاً نیازمند ابزارهای متعدد بودند، مانند Service Discovery، Logging، Monitoring و Telemetry را به صورت یکپارچه در اختیار توسعه‌دهندگان قرار می‌دهد.

اگر پروژه شما شامل چندین API، سرویس‌های مستقل، Redis، RabbitMQ یا معماری Microservice است، استفاده از Aspire می‌تواند توسعه، تست و نگهداری سیستم را به شکل قابل توجهی ساده‌تر کند.

آیا این مقاله مفید بود؟

نظرات

پرسش‌ها و دیدگاه‌های خود را درباره این مقاله ثبت کنید.

امتیاز شما

در حال دریافت دیدگاه‌ها...