了解 .NET Aspire 元件
應用程式中的每個微服務雖然可能各不相同,但常會有類似的支援服務需求,例如資料庫和快取。 要在與這些支援服務互動的每個微服務中撰寫程式碼,可能很困難。 在 .NET Aspire 中,這類程式碼會隨著您改為新增 .NET Aspire 元件而減少。 針對許多您在微服務中可能遇到的常見支援需求,都有內建元件可供使用。
想像您任職於一家戶外活動服裝和設備公司。 您的開發小組已開始為新的 eShop Web 應用程式設計微服務。 每個微服務可能都需要資料庫、傳訊服務和快取等服務。 您想要評估 .NET Aspire 如何提升與這些服務間的互動性。
在本單元中,您將了解有哪些元件納入為 .NET Aspire 現成可用的功能,以及如何為您的微服務選擇最佳元件。
使用 .NET Aspire 元件
每個 .NET Aspire 元件都是 NuGet 套件,且您可以使用 NuGet 套件管理員將其新增至專案。 在 Visual Studio 中,有新的 [新增] > [.NET Aspire 元件] 功能表項目。 此動作會顯示套件管理員,其中已套用僅顯示 .NET Aspire 元件的篩選:
注意
在本課程模組稍後的練習中,您將了解如何使用此元件工具。
具有 C# 開發工具組延伸模組的 Visual Studio Code 也支援新增 .NET Aspire 元件。
或者,.NET CLI 可以新增 .NET 元件。 例如:
dotnet add package Aspire.StackExchange.Redis --prerelease
在 AppHost 專案中,您必須註冊元件,並在呼叫元件的專案中加以取用:
var cache = builder.AddRedis("cache");
builder.AddProject<Projects.AspireSample_Web>("webfrontend")
.WithReference(cache);
然後,您可以使用相依性插入將其新增至取用專案:
build.AddRedisClient("cache");
其他使用程式碼會根據您所使用的元件而不同。
注意
每個 .NET Aspire 元件類型通常都會有對等的裝載套件。 裝載套件會設定應用程式所需的資源和相依性,且應安裝在 AppHost 專案中,而不是取用專案。
資料庫元件
在雲端原生應用程式中,每個微服務須負責儲存本身的資料,且可能需要有結構化或半結構化資料的資料庫可供讀取和寫入。 由於每個微服務都是獨立開發的,您可能會發現完整應用程式的不同部分使用了數個不同的資料庫系統。
.NET Aspire 包含下列關聯式資料庫伺服器的元件:
- PostgreSQL:一個廣受使用的開放原始碼資料庫伺服器,提供結構化查詢語言 (SQL) 的實作。
- MySQL:另一個開放原始碼 SQL 資料庫伺服器。
- SQL Database:Microsoft 的 SQL 資料庫系統。
注意
.NET Aspire SQL Database 元件可以使用 Microsoft SQL Server 或 Azure SQL Database,是 SQL Server 在 Azure 雲端中的實作。 同樣地,Azure 也包含 PostgreSQL 和 MySQL 的平台即服務 (PaaS) 實作。 您執行資料庫的位置,由每個微服務架構小組決定,但 .NET Aspire 元件可支援許多雲端位置,且不會強制執行任何特定的裝載服務。
如果您想要使用半結構化資料,.NET Aspire 提供下列 NoSQL 系統的支援:
- MongoDB:一個跨平台、文件導向的 NoSQL 資料庫伺服器。
- Azure Cosmos DB:Microsoft 的彈性 NoSQL 資料庫系統,裝載於 Azure 中。
儲存體元件
在 .NET Aspire 中,會為需要在 Azure 儲存體帳戶中儲存檔案、資料或訊息的微服務提供儲存體元件。 Azure 儲存體中的三項服務各有一個元件。 根據您要用 Azure 儲存體執行的動作,選擇所需的元件:
- Azure Blob 儲存體:使用此服務來儲存及擷取 Blob 檔案,例如影像和影片。
- Azure 表格儲存體:使用此服務在半結構化資料表中儲存及擷取資料列。
- Azure 佇列儲存體:使用此服務將訊息新增至佇列,以散發至其他訂閱微服務。
訊息元件
要改善雲端原生應用程式中的微服務之間的通訊可靠性和彈性,方式之一是使用提供佇列、主題和訂用帳戶的傳訊解決方案,而不是直接通訊。 .NET Aspire 包含下列三個傳訊服務的元件。 根據開發人員想要使用的訊息代理程式,選擇所需的元件:
- RabbitMQ:此訊息代理程式廣受使用、採用開放原始碼,且支援數種傳訊通訊協定以提供佇列、主題和訂用帳戶。
- Apache Kafka:此服務會處理事件串流,其中可能包含訊息,且包含對其他系統匯入和匯出資料的 Kafka Connect API。
- Azure 服務匯流排:此訊息代理程式裝載於 Azure 中,並提供以佇列和訂用帳戶為基礎的訊息散發。
快取元件
微服務接收到來自使用者或其他微服務的要求時,可能需要使用來自多個位置的資料或複雜的作業來建構回應。 這項作業可能需要一些時間。 藉由快取這類回應的某些部分,在處理後續類似或相同的要求時就可節省時間。 如此,快取將可促成最佳效能。
其中一項熱門的快取服務是 Redis。 此服務具有訊息代理程式和記憶體內部資料庫功能,但最常用來快取 Web 應用程式和服務中的回應。 .NET Aspire 有三個不同的元件可與 Redis 搭配運作。 根據您想要在微服務中完成的快取工作,選擇所需的元件:
- Redis 元件:若要使用 Redis 作為記憶體內部資料庫,請使用此元件。
- Redis 輸出快取元件:若要快取完整的 HTTP 回應 (例如整個網頁),請使用此元件。
- Redis 分散式快取元件:若要為應用程式中的多個微服務建立單一快取,請使用此元件。
安全性
在雲端原生應用程式中,資料安全性往往是業務關鍵主題。 由於客戶可能將個人和敏感性資料託付給您,因此您必須確保資料已加密並受到保護,以防止攔截或竄改。 數位簽章和加密會要求您儲存私密金鑰,以及擷取金鑰以進行解密。 Azure Key Vault 是一個可供您安全地儲存金鑰和其他秘密 (例如密碼和憑證) 的位置。
.NET Aspire 包含 Azure Key Vault 元件,讓您能夠輕鬆地在 Azure Key Vault 中儲存和擷取秘密。