Sự kiện .NET Conf 2024 vừa diễn ra tuần trước đã giới thiệu phiên bản .NET 9 dành cho các nhà phát triển. Tuy nhiên, có một chút bất ngờ khi từ khoá trendy “AI/ML” hay “Copilot” không được Microsoft đưa lên đầu tiên trong phần giới thiệu của mình, mà lại là .NET Aspire – một bộ công cụ mà Microsoft đã ấp ủ từ lâu (xem thêm tại https://ant.ncc.asia/tim-hieu-ve-net-8-version-moi-nhat-cua-net/).
Trong bài viết này, chúng ta hãy cùng tìm hiểu về .NET Aspire – bộ công cụ phát triển cực kì mạnh mẽ dành cho các tín đồ .NET.
.NET Aspire thực sự là cái gì?
.NET Aspire is a set of powerful tools, templates, and packages for building observable, production ready apps.
Đây là định nghĩa của Microsoft về .NET Aspire, về cơ bản thì nó là một tập hợp của các công cụ, template và các package cần thiết để build các ứng dụng cloud-native.
App Host (Orchestration)
Đây là một công cụ tuyệt vời dành cho Developer (thực tế là nó cũng chỉ chạy được ở local development mode). Thông qua việc đơn giản hóa quản lý cấu hình và kết nối giữa các thành phần trong ứng dụng. Điều quan trọng cần lưu ý là tính năng điều phối của .NET Aspire không nhằm thay thế các hệ thống mạnh mẽ như Kubernetes. Thay vào đó, nó cung cấp một tập hợp các trừu tượng giúp tối ưu hóa việc thiết lập các chức năng như Service Discovery, quản lý biến môi trường và cấu hình container. Các trừu tượng này đảm bảo một mô hình thiết lập nhất quán cho các ứng dụng có nhiều integration và service, giúp việc quản lý các ứng dụng phức tạp trong giai đoạn phát triển trở nên dễ dàng hơn.
.NET Aspire orchestration hỗ trợ xử lý các vấn đề chính sau:
- Thành phần ứng dụng (App composition): Xác định các dự án .NET, container, tệp thực thi, và tài nguyên trên cloud tạo thành ứng dụng.
- Service discovery and connection string management: App host tự động quản lý và cung cấp các connection string phù hợp, cấu hình mạng và service discovery để đơn giản hóa công việc lập trình viên.
Để hình dung dễ hơn thì ta có các khái niệm sau đây:
- Mô hình ứng dụng (App model): Là một tập hợp các tài nguyên tạo thành ứng dụng phân tán của bạn (DistributedApplication), được định nghĩa trong namespace
Aspire.Hosting.ApplicationModel
. Để biết định nghĩa chi tiết hơn, bạn có thể tham khảo tại đây
- App Host/Orchestrator project: Là dự án .NET chịu trách nhiệm điều phối mô hình ứng dụng. Theo quy ước, các dự án này có hậu tố tên là
*.AppHost
.
- Tài nguyên (Resource): Là một phần phụ thuộc của ứng dụng, chẳng hạn như dự án .NET, container, tệp thực thi, cơ sở dữ liệu, bộ nhớ đệm (cache), hoặc dịch vụ cloud. Tài nguyên đại diện cho bất kỳ thành phần nào của ứng dụng có thể được quản lý hoặc tham chiếu.
- Tích hợp (Integration): Là một NuGet package dùng cho app host để mô hình hóa tài nguyên hoặc một gói cấu hình client trong ứng dụng tiêu thụ. Chi tiết hơn về các tích hợp có sẵn có thể tham khảo tại
- Tham chiếu (Reference): Là cách xác định kết nối giữa các tài nguyên, được biểu diễn dưới dạng phụ thuộc sử dụng API
WithReference
. Để tìm hiểu thêm, hãy tham khảo thêm tại đây
Aspire Dashboard
.NET Aspire cung cấp một hệ thống Dashboard trực quan, dễ sử dụng, cho phép bạn theo dõi sát sao nhiều khía cạnh của ứng dụng, bao gồm nhật ký (logs), truy vết (traces), và cấu hình môi trường. Aspire Dashboard được thiết kế đặc biệt để cải thiện trải nghiệm phát triển, mang lại cái nhìn tổng quan về trạng thái và cấu trúc của ứng dụng. Ngoài ra, nó còn hỗ trợ các thao tác quản lý tài nguyên như dừng, khởi động, khởi động lại tài nguyên, cùng với khả năng xem và tương tác với logs và telemetry.
Đặc biệt, hệ thống Dashboard này có thể hoạt động độc lập Standalone .NET Aspire dashboard – .NET Aspire | Microsoft Learn
Telemetry
Một trong những mục tiêu chính của .NET Aspire là đảm bảo ứng dụng dễ dàng debug và chẩn đoán. Các tích hợp của .NET Aspire tự động thiết lập cấu hình Logging (ghi nhật ký), Tracing (theo dõi), và Metrics (chỉ số), thường được gọi là “ba trụ cột của khả năng quan sát” (pillars of observability), sử dụng .NET OpenTelemetry SDK.
- Logging (Ghi nhật ký): Các sự kiện nhật ký mô tả những gì đang xảy ra trong quá trình ứng dụng hoạt động. .NET Aspire cung cấp sẵn một tập hợp nhật ký cơ bản cho các tích hợp và cho phép kích hoạt ghi nhật ký chi tiết hơn khi cần chẩn đoán các vấn đề cụ thể.
- Tracing (Theo dõi): Traces liên kết các sự kiện nhật ký thuộc cùng một hoạt động logic (ví dụ: xử lý một yêu cầu duy nhất), ngay cả khi các sự kiện này diễn ra trên nhiều máy hoặc quy trình khác nhau.
- Metrics (Chỉ số): Metrics hiển thị các đặc điểm về hiệu suất và sức khỏe của ứng dụng dưới dạng các giá trị số đơn giản. Do có mức độ ảnh hưởng thấp đến hiệu suất, metrics thường được cấu hình luôn hoạt động để giám sát liên tục. Điều này cũng giúp chúng trở thành công cụ phù hợp để kích hoạt cảnh báo khi phát hiện các vấn đề tiềm ẩn.
Integrations
.NET Aspire Integrations là các NuGet package được thiết kế để đơn giản hóa kết nối với các service và platform phổ biến, chẳng hạn như Redis hoặc PostgreSQL. Các tích hợp này xử lý nhiều vấn đề liên quan đến ứng dụng cloud-native thông qua các mẫu cấu hình tiêu chuẩn, bao gồm việc thêm kiểm tra sức khỏe (health checks) và giám sát (telemetry). Tích hợp trong .NET Aspire có hai phần: một phần đại diện cho service mà bạn đang kết nối, và phần còn lại đại diện cho client hoặc consumer của dịch vụ đó. Nói cách khác, mỗi hosting package sẽ có một client package tương ứng để xử lý kết nối với dịch vụ.
Mỗi tích hợp được thiết kế để hoạt động liền mạch với .NET Aspire orchestration. Các cấu hình của chúng được tự động cung cấp bằng cách tham chiếu đến các resource có tên cụ thể. Ví dụ: nếu Example.ServiceFoo
tham chiếu đến Example.ServiceBar
, thì Example.ServiceFoo
sẽ tự động nhận các cấu hình cần thiết từ tích hợp để hai dịch vụ có thể giao tiếp với nhau.
Ngoài ra, chúng ta cũng có thể viết thêm các Custom Integrations.
Deployments
Các dự án .NET Aspire được xây dựng dựa trên các nguyên tắc độc lập với nền tảng đám mây, cho phép triển khai linh hoạt trên nhiều nền tảng hỗ trợ .NET và container. Người dùng có thể điều chỉnh các hướng dẫn được cung cấp để triển khai trên các môi trường đám mây khác hoặc hosting cục bộ. Mặc dù quá trình triển khai thủ công là khả thi, nhưng nó bao gồm nhiều bước phức tạp và dễ xảy ra lỗi. Người dùng thường ưa chuộng việc sử dụng các pipeline CI/CD và công cụ đặc thù của từng đám mây để có trải nghiệm triển khai mượt mà và phù hợp hơn với cơ sở hạ tầng mà họ chọn.
Triển khai lên Azure
Đương nhiên rồi, .NET Aspire hỗ trợ triển khai ứng dụng lên Azure Container Apps một cách đơn giản và mượt mà.
- Azure Container Apps
Các dự án .NET Aspire được thiết kế để chạy trong các môi trường container hóa. Azure Container Apps là một môi trường hoàn toàn được quản lý, cho phép bạn chạy các microservices và ứng dụng container hóa trên một nền tảng không máy chủ (serverless). Chủ đề về Azure Container Apps cung cấp hướng dẫn về cách triển khai các ứng dụng Aspire lên ACA một cách thủ công, sử dụng Bicep hoặc sử dụng Azure Developer CLI (azd).
- Sử dụng Application Insights cho telemetry của .NET Aspire
Các dự án .NET Aspire được thiết kế emit telemetry bằng cách sử dụng OpenTelemetry, sử dụng mô hình nhà cung cấp. Các dự án .NET Aspire có thể gửi telemetry của chúng đến Azure Monitor / Application Insights thông qua telemetry của Azure Monitor.
Triển khai lên Kubernetes
Kubernetes là một nền tảng điều phối container phổ biến có thể chạy các dự án .NET Aspire. Để triển khai các dự án .NET Aspire lên các cụm Kubernetes, bạn cần phải ánh xạ tệp manifest JSON của .NET Aspire thành tệp manifest YAML của Kubernetes. Có hai cách để thực hiện việc này: sử dụng dự án Aspir8 hoặc tự tay tạo tệp manifest Kubernetes.
- Dự án Aspir8
Aspir8, một dự án mã nguồn mở, xử lý việc tạo tệp YAML triển khai dựa trên manifest của ứng dụng .NET Aspire app host. Dự án này tạo ra một .NET global tool có thể được sử dụng để thực hiện một loạt các tác vụ, dẫn đến việc tạo ra các tệp manifest Kubernetes. Với các lệnh này, bạn có thể xây dựng ứng dụng, đóng gói chúng thành container và triển khai lên các cụm Kubernetes. Để biết thêm chi tiết, bạn có thể tham khảo thêm tại Aspir8.
- Tạo tệp Kubernetes manifest thủ công
Ngoài ra, bạn có thể tạo các tệp manifest Kubernetes thủ công. Tuy nhiên, phương pháp này đòi hỏi nhiều công sức hơn và tốn thời gian hơn.
Tổng kết
Microsoft đang định vị .NET Aspire là tương lai của việc phát triển các ứng dụng .NET, họ thậm chí còn cung cấp hẳn chứng chỉ riêng cho .NET Aspire: Microsoft Applied Skills: Build distributed apps with .NET Aspire – Applied Skills | Microsoft Learn
Ngoài ra, Aspire không chỉ hỗ trợ .NET, mà còn hỗ trợ rất nhiều nền tảng khác như NodeJS hay Python, và trên lý thuyết thì nó có thể chạy bất kể cái gì thông qua container. Do vậy, chúng ta có thể chờ xem một sự bùng nổ trong việc phát triển phần mềm nói chung và .NET nói riêng.