2024年5月22日北京時間,微軟正式釋出全新的.NET雲原生開發框架—.NET Aspire。
.NET Aspire 是一個新的平臺無關、語言無關的框架,旨在簡化 .NET雲原生服務的開發,並且現在已經全面可用,可以在 Visual Studio 2022 17.10、.NET CLI 或 Visual Studio Code 中開始使用 .NET Aspire。同時支援Java,PHP,Python,Nodejs等應用的雲原生框架。
.NET Aspire 整合了工具、模板和 NuGet 包等有助於更輕鬆地在 .NET 中構建分散式應用。無論是構建全新應用,還是為現有應用新增雲原生功能,或是已經在雲上部署了 .NET 應用,.NET Aspire 都能幫助我們更快地完成目標。
簡單來說,.NET Aspire 是一組針對 .NET 開發者提供的資源和工具,旨在簡化雲原生應用的開發、部署和管理過程。透過使用這些工具和模板,可以更加高效地構建、測試和部署分散式應用,從而更好地利用雲服務的優勢。
正文
如何安裝.NET Aspire?
1、.NET 命令列
透過執行 dotnet workload update
然後是 dotnet workload install aspire
來安裝 .NET Aspire 工作負載。
2、Visual Studio 2022
.NET Aspire 包含在 Visual Studio 2022 17.10 版本的 ASP.NET 和 Web 開發工作負載中,作為一個推薦的元件。
需要升級Visual Studio 2022 17.9 更新到 17.10,並且啟用ASP.NET 和 Web 開發功能。
3、Visual Studio Code C# 開發工具包
需要透過上面的 .NET 命令列方法來安裝 .NET Aspire 工作負載。
Visual Studio Code C# 開發工具包擴充套件在最新穩定版中包含了.NET Aspire 的支援。
從 Visual Studio Code 市場安裝 C# 開發工具包擴充套件。
為什麼選擇.NET Aspire?
.NET Aspire提供瞭如下3個方面的能力,來幫助我們使用.NET開發分層、雲就緒的可觀測、本地與生產環境一致的分散式雲原生應用程式:
1、微服務的編排能力:在開發和線上環境自動處理多個微服務之間的連線和依賴,也即內建了服務發現等基礎能力。
2、基礎服務的訪問能力:透過提供一系列 NuGet 包,把對一些基礎服務的訪問進行統一封裝(比如,快取、資料庫、訊息佇列等),方便微服務直接使用。
3、工具鏈的相應配合:在 VS 和 VS Code 等工具中新增對以上編排能力的支援,並提供一系列開箱即用的模板,來方便開發人員進行開發、除錯和部署雲原生應用。
為了幫助簡化雲應用開發體驗, .NET Aspire推出了一個為構建可觀測的、生產就緒的分散式應用而設計的雲就緒堆疊。
即使你只擁有一個與資料庫或快取系統通訊的 ASP.NET Core 應用,Aspire 也能改善你的開發體驗。
.NET Aspire 引入應用宿主專案
透過C#和.NET Aspire應用宿主專案來組織和管理本地開發環境,提升開發體驗。
分散式應用通常由許多應用專案組成,專案之間會相互通訊,並且組合在一起的託管服務(如資料庫、儲存、快取和訊息傳遞系統)進行通訊。在內部迴圈中管理專案和服務的配置,生命週期可能會非常具有挑戰性,而且通常需要使用不同的工具集和程式語言。
.NET Aspire 引入了應用宿主專案(App Host project)允許使用 C# 和 API 來描述和配置構成分散式應用的各種應用專案和託管服務。
專案和服務的集合被稱為資源,而應用宿主中的程式碼則形成了分散式應用的應用模型。
在內部迴圈中啟動應用宿主專案將確保應用模型中的所有資源都根據描述進行配置和啟動。向現有應用新增應用宿主專案是向其中新增 .NET Aspire 的第一步。
.NET Aspire 應用宿主專案的 Program.cs 檔案的示例:
1 var builder = DistributedApplication.CreateBuilder(args); 2 3 var dbserver = builder.AddPostgres("dbserver") 4 .WithPgAdmin(); 5 6 var catalogDb = dbserver.AddDatabase("catalogdb"); 7 8 var cache = builder.AddRedis("cache") 9 .WithRedisCommander(); 10 11 var catalogApi = builder.AddProject<Projects.AspireShop_CatalogApi>("catalogapi") 12 .WithReference(catalogDb); 13 14 builder.AddProject<Projects.AspireShop_WebFrontend>("webfrontend") 15 .WithExternalHttpEndpoints() 16 .WithReference(cache) 17 .WithReference(catalogApi); 18 19 builder.Build().Run();
說明:
-
新增一個 PostgreSQL 伺服器資源和一個子資料庫資源
-
啟用針對 PostgreSQL 伺服器的 pgAdmin 管理工具
-
新增一個 Redis 伺服器資源
-
啟用針對 Redis 伺服器的 Redis Commander 管理工具
-
嚮應用模型中新增兩個專案:一個 Web API 專案和一個 Blazor Web 前端專案
-
宣告 API 專案引用了 PostgreSQL 資料庫資源
-
宣告 Web 前端專案引用了 Web API 專案和 Redis 快取
-
宣告 Web 前端專案應該可以從外部訪問(即透過網際網路)
使用 .NET Aspire 元件使資料庫、訊息傳遞、快取和雲服務連線變得具有彈性和可觀察性
當使用 .NET Aspire 構建分散式應用程式時,可以利用其中的元件來增強應用程式與各種服務(如資料庫、訊息傳遞系統、快取和雲服務)之間的連線。這些元件旨在提供彈性和可觀察性,確保即使在面對故障或效能問題時,應用程式也能保持正常執行並易於監控。
- 彈性(Resilience):當與外部服務通訊時,可能會遇到各種問題,如網路延遲、服務不可用或超時。透過使用 .NET Aspire 元件,您可以配置重試策略、斷路器(circuit breakers)和後備機制(fallbacks),以確保應用程式在遇到這些問題時能夠優雅地處理,而不是立即崩潰。
- 可觀察性(Observability):可觀察性是確保能夠理解和診斷應用程式執行狀況的關鍵。透過 .NET Aspire 元件,可以輕鬆地將 OpenTelemetry 資料(如跟蹤、指標和日誌)整合到應用程式中。資料可以在 Aspire 儀表板上檢視,以便能夠深入瞭解應用程式的效能、瓶頸和潛在問題。
總之,透過使用 .NET Aspire 元件,可以構建更加健壯、可靠且易於管理的分散式應用程式,這些應用程式能夠處理外部服務連線中的各種問題,併為您提供豐富的資料來監控和診斷應用程式的執行狀況。
.NET Aspire 和 Dapr
.NET Aspire 和 Dapr(Distributed Application Runtime)都是用於構建分散式應用程式的框架,但它們有一些關鍵的區別和不同的關注點。
.NET Aspire 是微軟推出的一個技術棧,旨在簡化雲原生應用的開發和管理。
1、一個固定的雲端就緒技術棧,用於構建可觀察且生產就緒的分散式應用程式。
2、主要目的是簡化雲原生應用內各元素的協調和管理,幫助我們更高效地使用.NET構建雲原生應用程式。
3、提供了統一的專案格式和固定的技術棧,有助於減少開發人員在選擇和配置技術元件時的複雜性。
Dapr是一個可移植的、事件驅動的執行時,為任何語言編寫的應用提供了與中介軟體解耦的模組。
1、Dapr旨在解決微服務架構中的一些問題,如服務拓撲復雜、呼叫方式不同(HTTP、MQ、RPC)等。
2、提供了一套構建塊(APIs)是對一類元件進行高度抽象,使得我們可以更容易地使用各種服務和功能,而無需關心其底層實現。
以下是.NET Aspire 和 Dapr 之間的主要區別:
1、適用範圍:.NET Aspire主要關注於.NET世界,而 Dapr 則更適合多種語言融合。
2、編排能力:.NET Aspire 的編排能力是內建到框架本身,會嵌入到應用內部。而 Dapr 的編排能力由邊車提供,依靠 Dapr Runtime來處理。
3、元件抽象:.NET Aspire 的元件只是對訪問的封裝,並沒有對一類元件進行抽象。而 Dapr 的 APIs(之前稱之為構建塊)是對一類元件進行高度抽象。
4、技術棧:.NET Aspire 是一個固定的技術棧,提供了統一的專案格式和配置。而 Dapr 則更側重於提供可移植性和事件驅動的能力,與各種語言和框架都能很好地整合。
總的來說.NET Aspire 和 Dapr 都是用於簡化分散式應用程式開發的框架,但它們在適用範圍、編排能力、元件抽象和技術棧等方面有所不同。選擇哪個框架取決於具體需求和所使用的技術棧。
.NET Aspire 總結
.NET Aspire 是一個框架或工具集,極大地簡化了在開發過程中預置資源或連線到雲中現有資源的流程。這一獨特能力使得我們能夠用C#語言簡潔地表達需要哪些資源來支援開發過程中的應用程式執行,並讓.NET Aspire在啟動應用程式主機(App Host)專案時協調這些資源的預置。
開發中的資源預置
在開發過程中,.NET Aspire 能夠專注於應用程式的邏輯和功能,而無需擔心底層的資源預置和配置。透過應用程式主機專案,可以描述需要哪些資源(如資料庫、儲存、訊息佇列等),並在啟動應用程式時,由.NET Aspire自動協調並預置這些資源。
Azure 本地預置
當使用.NET Aspire來協調Azure資源的本地預置時,可以享受到更加流暢和簡化的開發體驗。無需手動建立和配置Azure資源,只需在應用程式主機專案中描述所需資源,然後由.NET Aspire在本地開發環境中自動建立和配置這些資源。這大大提高了開發效率,並減少了因配置錯誤導致的問題。
雲部署與Kubernetes
當需要將應用程式部署到雲端或自己的Kubernetes例項時,.NET Aspire也提供了強大的支援。透過應用程式主機專案提供的應用程式模型詳細資訊,.NET Aspire能夠協調部署過程中的各種資源和配置。
雖然.NET Aspire不要求改變現有的部署方式(因為.NET Aspire解決方案中的各個專案仍然是標準的ASP.NET Core專案),但使用已更新以支援.NET Aspire的部署工具鏈時,應用程式主機專案將提供新的部署體驗。
例如,Azure Developer CLI (azd) 提供了直接支援,可以將.NET Aspire應用程式主機專案中描述的資源部署到Azure Container Apps。同樣,Visual Studio也支援直接從解決方案資源管理器中使用azd將應用程式釋出到Azure。
對於 Kubernetes 部署,社群構建的Aspir 8工具提供了基於命令列的簡單體驗,用於部署由.NET Aspire應用程式主機描述的資源。
總結
.NET Aspire 透過提供在開發過程中自動預置和連線雲資源的能力,以及簡化的雲部署和Kubernetes部署體驗,極大地提高了工作效率。使得我們能夠專注於應用程式的核心邏輯和功能,而無需過多關注底層的資源管理和配置。
透過使用.NET Aspire,可以更加輕鬆地構建、測試和部署雲原生應用程式。
如果你的專案使用的是 .NET 平臺,並且準備開發一個全新的專案,可以嘗試使用.NET Aspire!
地址
如何生成第一個 .NET Aspire 應用程式的快速入門
譯文:https://devblogs.microsoft.com/dotnet/dotnet-aspire-general-availability/