Aspire là gì và vì sao nên sử dụng?
Trong quá trình phát triển ứng dụng hiện đại, đặc biệt là các hệ thống microservices hoặc đa dự án, việc cấu hình và kết nối các thành phần trở nên phức tạp, bạn có thể sử dụng Kubernetes nhưng việc config cũng khá khó khăn khi deploy lên môi trường production. Vì thế .NET Aspire – một công cụ hỗ trợ developer trong quá trình phát triển, kiểm thử và vận hành microservice một cách dễ dàng, nhất quán ngay từ môi trường local. .NET Aspire là gì?
.NET Aspire là một giúp bạn:
Quản lý nhiều project, tài nguyên container (như Redis, PostgreSQL, Kafka) trong một ứng dụng phức tạp. Tự động hóa kết nối giữa các dịch vụ (service discovery, connection string, logging, tracing, ...). Dễ dàng config, run multiple projects, và giám sát(obsevarbility) ứng dụng ngay từ giai đoạn phát triển (dev-time). Việc deploy lên azure cũng trở nên dễ dàng hơn khi sử dụng aspire với **azure container app**.
Khác với Kubernetes dùng trong production, Aspire tập trung tối ưu trải nghiệm local development – nơi bạn cần mọi thứ khởi động nhanh, kết nối sẵn sàng và dễ debug.
Cách tạo 1 aspire project và config :
Việc đầu tiên bạn cần đảm bảo đã cài .net aspire
Tạo starter project:
Sau khi tạo xong thì bạn sẽ thấy có 1 web app và 1 class library "Service Default" và "Apphost"
Giải thích:
- AppHost : App Host là project trung tâm chịu trách nhiệm điều phối (orchestrate) toàn bộ ứng dụng của bạn khi chạy local. Nó không phải là backend, frontend, hay một microservice cụ thể — mà giống như một “nhạc trưởng” quản lý mọi dịch vụ bên trong hệ thống của bạn.
- ServiceDefault: Đây là extension method được dùng trong từng project (API, gRPC, worker...) để tự động kích hoạt cấu hình mặc định mà .NET Aspire cung cấp. Nó sẽ hỗ trợ Ratelimit, OpenTelemetry, HeathCheck,...
Config Program.cs cho Aspire:
Aspire được integrate với rất nhiều tool, service cloudnative mà bạn có thể xem ở : https://landscape.cncf.io
Default khi tạo dự án thì nó sẽ add Redis cache:
var builder = DistributedApplication.CreateBuilder(args); var cache = builder.AddRedis("cache"); builder.AddProject<Projects.ExampleProject>() .WithReference(cache);
Như bạn có thể thấy việc add redis hay bất kì 1 thứ gì rất là đơn giản và để mình ví dụ 1 số cái mà bạn sẽ sử dụng như sau:
-
SecretKey:
var apiKey = builder.AddParameter("api-key", secret: true);
-
Database :
var server = builder.AddPostgres("postgres").WithLifetime(ContainerLifetime.Persistent).WithPgAdmin(pgAdmin => pgAdmin.WithHostPort(5050));
-
RabbitMq:
var rabbitmq = builder.AddRabbitMQ("messaging").WithManagementPlugin();
-
Kafka:
var kafka = builder.AddKafka("kafka").WithKafkaUI(kafkaUI => kafkaUI.WithHostPort(9100));
-
ApiGateway:
var krakend = builder.AddKrakend("kradend-gateway", "../krakend.json", port: 8080).WithExternalHttpEndpoints();
-
Và rất nhiều thứ khác
Trước đây khi chạy 1 dự án microservice bạn sẽ cần chạy multiple startup project được config trong Visual Studio
Giờ thì chỉ cần : var api = builder .AddProject<Projects.CleanPatternWithCloudNative_Api>("cleanpatternwithcloudnative-api") .WithReference(db).WaitFor(db) .WithReference(redis).WaitFor(redis) .WithReference(statestore) .WithReference(pubsub) .WithReference(secretstore) .WithReference(configstore) .WithReference(cron) .WithDaprSidecar();
Bạn có thể add tất cả project reference vào trong aspire config và start Apphost lên và mọi thứ đã online 😁( nhớ mở docker khi run và sử dụng docker thay vì podman trong window config)
Client
Như ở trên thì mn đã biết là aspire sẽ support service discovery, vì thế nên việc sử dụng cũng khá là đơn giản
Ví dụ:
Đối với redis ở client bạn chỉ cần install package builder.AddRedisClient(connectionName: "cache");
Sau đó : builder.AddRedisClient(connectionName: "cache");
Ví dụ 2: Kafka dotnet add package Aspire.Confluent.Kafka
builder.AddKafkaProducer<string, string>("messaging");
Trong đó "messaging" sẽ là name mà bạn đã config ở trong aspire apphost.
Rất đơn giản phải ko nào 😂
Deploy - CICD
Azure container app
- Cài azd cli
- Chạy azd init
azd pipeline config -e <environment name>
- azd provision
- azd deploy
Kubernetes
Nuget: https://www.nuget.org/packages/aspirate/
Documentation: https://github.com/prom3theu5/aspirational-manifests
Cài aspirate: dotnet tool install --global aspirate --version 0.1.39-preview
Sau đó trong folder AppHost project, run “aspirate init”.
Cấu hình Aspire CLI để build image và generate manifest
Khi bạn chạy Aspire CLI lần đầu tiên để build image và deploy lên Kubernetes, hệ thống sẽ yêu cầu bạn nhập một số cấu hình mặc định:
`Please enter the container registry to use as a fall-back value: docker.io`
Sau khi hoàn tất cấu hình
Một file cấu hình sẽ được tạo trong thư mục AppHost. File này chịu trách nhiệm xác định thông tin build image, tên repository, cấu hình deploy, v.v.
Sau đó chạy aspirate generate
Tất cả yml file sẽ được generate và push qua docker hub
Sau khi xong hết thì tạo env cho k8s xong aspirate apply
thôi
Comunity Toolkit
Ngoài những cái Aspire hosting mà microsoft đã support chúng ta thì còn bộ comunity tool kit cũng support nhiều thứ ko kém như : Dapr, Buns, Java, Rust, Ollama, ...
Tổng kết
.NET Aspire không chỉ là công cụ điều phối – mà là một trải nghiệm phát triển hoàn chỉnh, giúp bạn:
Tập trung vào viết code, không lo setup môi trường.
Dễ dàng kết nối, mở rộng, theo dõi nhiều project cùng lúc.
Giảm thiểu thời gian cấu hình – tăng hiệu suất phát triển.
Nếu bạn đang xây dựng distributed system vụ với .NET, hãy thử Aspire ngay hôm nay – bạn sẽ không muốn quay lại cách làm cũ nữa.