什麼是 .NET Aspire?

已完成

Microsoft Azure 和 Amazon Web Services (AWS) 等雲端生態系統已深入內嵌在 IT 產業中,以及 Web 應用程式和 Web 服務的熱門代管解決方案。 雲端代管系統可能是您對應用程式的預設選擇,因此需要確保您建立的應用程式在設計上可充分發揮此優勢。

雲端原生應用程式是您特別設計在雲端中執行的應用程式。 應用程式通常會表現出某些架構模式,讓效能、延展性和可靠性呈現最佳狀態。

想像您任職於一家戶外活動服裝和設備公司。 董事會要求您為公司以主要客戶為目標的網站,開發新的數位商店 Web 應用程式。 您的小組熟悉微服務模型,而且您想要知道使用 .NET Aspire 是否會讓專案變得更容易。

在本單元中,您將深入了解雲端原生結構,並了解建置這些結構時可能會遇到的挑戰。 您也將了解 .NET Aspire 可以如何解決這些挑戰。

什麼是雲端原生應用程式?

雲端原生應用程式的建構結構,目的就是充分利用雲端基礎結構來提供最佳效能、可用性和復原能力。 雲端原生軟體結構有六大根基:

  • 雲端基礎結構。 雲端原生應用程式會部署到雲端代管解決方案,而不是部署到內部部署伺服器陣列。
  • 微服務。 雲端原生應用程式會實作為一組微服務,每個微服務都會實作商務功能的一小部分。
  • 容器。 微服務和應用程式的其他部分會在容器中開發及部署,以確保一致的執行環境。
  • 備份服務。 輔助資源如資料庫和快取服務,可用來為微服務提供常見功能。
  • 現代化設計。 雲端原生應用程式符合十二要素應用程式方法,包括持續整合/持續部署 (CI/CD)、可處置性、連接埠繫結等原則。
  • 自動化。 雲端原生應用程式會使用基礎結構即程式碼 (IaC) 將平台的佈建和部署自動化。

顯示雲端原生應用程式六大根基的概念圖。

為了提供敏捷度,雲端原生應用程式將由一組微服務組成。 每個微服務:

  • 實作完整功能的一部分。
  • 在自己的流程中執行並且其他容器隔離,經常位於專用的容器中。
  • 是由個別小組所建置。
  • 與其他程式通訊,但鬆散結合。

每個小組都會選擇他們偏好實作微服務的語言和技術。 每個微服務都會獨立部署及調整。

下圖說明傳統整合型 Web 應用程式,以及由微服務組成的 Web 應用程式之間的差異。

概念圖顯示整合型 Web 應用程式,以及由微服務組成的應用程式之間的差異。

雲端原生應用程式可以為您的企業帶來許多優勢。 例如:

  • 藉由在雲端中託管您的應用程式,您無需自行建置和維護基礎結構,例如主控伺服器、作業系統和支援服務。
  • 由於每個微服務都是獨立開發,因此您可以持續在其中部署新功能,無需等待其他小組或主要版本里程碑。
  • 由於每個微服務都會在一或多個容器中執行,因此您能確保所有測試、預備和生產環境都會有相同環境。
  • 您可以使用容器協調流程系統 (例如 Kubernetes) 快速部署額外的執行個體,以滿足額外需求。

雲端原生應用程式所面臨的挑戰

由多個微服務和許多功能組成的雲端原生應用程式可能會變得複雜,並面臨整合型應用程式不會發生的挑戰。 例如:

  • 應用程式定義。 除非詳細記錄,否則開發人員很難了解哪些元件會構成完整雲端原生應用程式。
  • 通訊。 每個微服務都可能需要與其他微服務交換訊息或資料,才能形成使用者要求的回應。 雖然您必須啟用此類通訊,但您必須以不會緊密結合微服務至另一個微服務的方式進行。 您也需要通訊以在高需求或服務失敗時保持穩定度。
  • 復原功能。 沒有託管服務可以保證 100% 的可用性。 您必須確保當微服務在罕見情況下無法使用時,應用程式會穩定地處理失敗和保留要求,直到服務恢復為止。
  • 分散式資料。 每個微服務都會實作自己的資料儲存層,而且可能不會使用與其他人相同的資料庫伺服器。 您必須考慮如何查詢多個微服務資料和如何實作交易。
  • 祕密。 如果您的應用程式處理任何類型的敏感資料,則每個微服務皆必須在傳回回應之前先驗證所收到的每個要求。 非對稱式和對稱加密金鑰等秘密通常是保護資料的手段,並且會主動識別呼叫的使用者和微服務。 您必須考慮如何在雲端原生應用程式中儲存和交換這些秘密。
  • 開發人員上線。 新的開發人員必須能夠瞭解應用程式的架構,以及如何快速使用。 您必須確保新的開發人員可以加快速度,而不需要大量的跨領域知識或本機設定。

雲端原生應用程式設計在近期越來越受歡迎,但本節中的這類挑戰會阻礙一些小組採用此模式。 例如,.NET 具有解決這些問題所需的一切功能,但解決方案可能需要對訓練和自訂程式碼進行大量投資。

什麼是 .NET Aspire?

.NET Aspire 是專為 .NET 建置的新雲端準備就緒堆疊,其設計目的是讓開發人員快速輕鬆地建立雲端原生應用程式。 讓我們看看 .NET Aspire 的功能,了解如何解決我們所看到的挑戰。

協調流程

微服務及其鬆散結合的本質會增加已部署應用程式的彈性,但可能會讓設定更加困難。 組成應用程式的服務清單可能會變得不清楚,而且微服務可供使用的端點可能會難以識別。 .NET Aspire 提供協調流程功能,以便:

  • 您可以明確指定組成應用程式的 .NET 專案、容器、可執行檔和雲端資源。
  • 微服務可以自動探索所有應用程式元件的端點。 .NET Aspire 會藉由管理連接字串並將其插入微服務,以執行這項探索服務。

當您建立 .NET Aspire 解決方案時,會在名為 <SolutionName>.AppHost 的解決方案中看到新的專案。 此專案會實作應用程式的協調流程,您應確保其為解決方案的啟動專案。

元件

微服務的功能通常會需要使用複雜支援服務功能來支撐。 例如:

  • 資料儲存體。 為了保留資料以支援產品目錄、購物車、身分識別存放區和其他功能,微服務必須將資料儲存在結構化或半結構化存放區中。
  • 快取。 為了將效能最大化,微服務可以將部分或完整的回應儲存在快取中,以便更快速滿足後續類似的要求。
  • 傳訊。 鬆散結合的微服務必須可與彼此通訊,而且您必須確保即使流量很高或網路狀況不佳,也有穩定的通訊。 將訊息從寄件者排入佇列並散發給收件者的服務是常見需求。

在 .NET Aspire 中,由於堆疊包含 .NET Aspire 元件,因此在每個微服務中很容易實作這些支援服務。 每個元件都是 NuGet 套件,您可以新增至解決方案並將標準介面實作至支援服務。 此標準介面可確保您的微服務會一致且順暢地連線到其支援服務。

現成可用的 .NET Aspire 元件包括:

  • 適用於 PostgreSQL、SQL Database、Azure Cosmos DB 和 MongoDB 的資料儲存體元件。
  • 快取元件,例如 Redis 的元件。
  • 傳訊元件,例如 RabbitMQ 和 Azure 服務匯流排的傳訊元件。

重要

.NET Aspire 包含許多可與 Azure 服務搭配運作的元件,例如 Azure 儲存體和 Azure 服務匯流排,但 .NET Aspire 專案不需要 Azure,而其所搭配的外部支援服務 (例如 RabbitMQ 和 MongoDB) 將可如 Azure 般一樣運作良好。

工具

.NET Aspire 也會新增至 Visual Studio 中開發人員可用的工具。 例如:

  • 新的專案範本可讓您透過精靈中的幾個步驟來建立 .NET Aspire 解決方案。
  • .NET Aspire 儀表板是一種 Web 介面,每當您從 Visual Studio 啟動解決方案時就會顯示。 此儀表板會顯示應用程式的所有微服務和支援服務,您可以呼叫並進行測試。 其也會顯示效能和監視工具。
  • 將出現額外的功能表項目,您可以使用此項目來新增 .NET Aspire 元件、註冊 .NET Aspire 協調器支援的項目,或完成其他工作。

注意

您稍後將在本單元中深入了解 .NET Aspire 工具。

深入了解