首頁

目前文章總數:157 篇

  

最後更新:2024年 12月 07日

0077. 如何通過 Microsoft .NET Aspire 建立可觀察、具生產導向的分散式應用程式並與現有系統無縫整合

日期:2024年 11月 09日

標籤: .Net Aspire Asp.NET Core Asp.NET Core Web MVC Redis Web MySQL Docker HeidiSQL

摘要:C# 學習筆記


範例所需: 1. Visual Studio 2022 Asp.net Core 版本 17.10.0 以上 (才支援 .Net Aspire)
      2. Windows Docker Desktop (非強制,但為 .Net Aspire 微服務容器化繫結功能)
相關參考:.Net Aspire 官方文件
解決問題:1. 介紹 .Net Aspire 的用途、使用情境。
      2. 示範新建 .Net Aspire 專案,並且將現有的 Asp.net Core 專案,繫節到 .Net Aspire 中。
      3. 示範 Redis、Mysql 專案依賴的容器到 .Net Aspire。
基本介紹:本篇分為四大部分。
第一部分:.Net Aspire 簡介
第二部分:如何將現有專案整合至 .Net Aspire
第三部分:加入 Redis 容器
第四部分:加入 Mysql 容器






第一部分:.Net Aspire 簡介

Step 1:功能概述

進入官方文件後,可以看到概述的地方如下:

.NET Aspire is an opinionated, cloud ready stack for building observable, production ready, distributed applications. .NET Aspire is delivered through a collection of NuGet packages that handle specific cloud-native concerns. Cloud-native apps often consist of small, interconnected pieces or microservices rather than a single, monolithic code base. Cloud-native apps generally consume a large number of services, such as databases, messaging, and caching.

A distributed application is one that uses computational resources across multiple nodes, such as containers running on different hosts. Such nodes must communicate over network boundaries to deliver responses to users. A cloud-native app is a specific type of distributed app that takes full advantage of the scalability, resilience, and manageability of cloud infrastructures.


大意如下,也是其核心優點:

習慣取代配置 .NET Aspire 透過一系列 NuGet 套件,預先處理了許多雲原生應用的需求,讓開發者專注於應用開發而非配置。。
提供觀察性 開發者可以輕鬆觀察並追蹤應用程式中使用的相依服務(如資料庫、訊息佇列、快取等),這些服務可以根據實際需要定義為大小不同的微服務。
未來可擴充性 .NET Aspire 支持可擴展的架構,讓應用程式可以隨業務需求增長並進行橫向擴展。
管理便利性 該平台旨在簡化開發者對分散式應用的管理,使其更易於維護、監控和操作,特別是在雲端環境中。



Step 2:使用先決條件

官方先決條件,補充資訊,整理成以下:

1. 需要安裝 NET 8.0
2. .NET Aspire SDK
3. 安裝 Visual Studio 2022 需要更新到 17.10.0 以上
4. Windows 系統內需要有 Windows Dcoker Desktop 或者 Podman 相關開發時可運行的容器化。
5. 基於第 4. Windows 10/11 專業、企業版以上(才支援 Windows Docker Desktop)
6. 啟用虛擬化技術 Hyper-V 、WSL 2 並且 16G 記憶體以上(若用 Visual Studio 開發,可能 32G 以上才適合開發)


※ Hyper-V 使用於 Windows To Container
※ WSL 2 使用於 Linux To Container

Step 3:評估是否可以引用

若開發環境缺少以下,會有無法啟動使用的限制:

項目 原因
1. 硬體資源不足、CPU、Memory 低規格 Aspire 隨著整入專案觀察的微服務愈多,耗費資源會愈大,導致無法正常啟動
2. 確定服務是否支援 .Net Aspire 持續開發中,熱門如 Mysql、Redis 都會有 Aspire Nuget套件。但某些服務(如日誌相關的服務)尚未開發
3. 小型專案 專案規模過小,使用 .NET Aspire 可能沒有必要,反而增加複雜度及資源浪費。



Step 4:使用 Aspire 預期結果

開始使用後,未來開發者,都可以啟動 Aspire.Host 啟動專案 (此為官方範例專案)


啟動後,都會進入 DashBoard 顯示此專案有關的可用資源,並且可以直接訪問 (對應 launchSettings.json)




第二部分:如何將現有專案整合至 .Net Aspire

Step 1:新建 Aspire 空專案

開啟 Visual Studio 2022 後,若已安裝 17.10.0 以上的版本,可以看到可用套件增加了 .NET Aspire
接著選擇 .NET Aspire 應用程式主機 。然後下一步,新建完成專案。


Step 2:Aspire 空專案

空專案只會有基本的 Aspire.Hosting 與基本配置。


Step 3:將自己的專案放入

如圖,將自己的 Asp.net Core 相關專案引入
※專案來源:0075. 架設檔案伺服器 - 高性能的物件存儲系統 - MinIO (開源、高速、免費)

Step 4:加入專案檔 - 1

對 Aspire 空專案,滑鼠右鍵 -> 加入 -> 現有專案


Step 5:加入專案檔 - 2

將對應的 .csproj 檔案加入



加入後預期如下:

Step 6:增加 Aspire 支援 - 1

對已加入的專案,滑鼠右鍵 -> 加入 -> .NET Aspire Orchestrator 支援…


Step 7:增加 Aspire 支援 - 2

出現提示,選擇確定


Step 8:啟動專案

Visual Studio 預設為 Aspire 專案,進行啟動


Step 9:現有專案已繫節

啟動後可以看到現有專案的狀態,並且已經綁定。
※如果在生產環境上,就能提供 IT 人員有入口可觀察服務的運行狀態,以及此專案所有相依的服務有哪些。

Step 10:更多資訊

此外,Aspire 會依照綁定專案的 Appsetting.json,當選擇檢視,會出現此專案的更多資訊。
並且提供便捷可瀏覽的 URL (因為此專案為 Web)



第三部分:加入 Redis 容器

Step 1:加入 Aspire Redis 套件 - 1

Aspire 專案,滑鼠右鍵 -> 加入 -> .NET 目標套件…

Step 2:加入 Aspire Redis 套件 - 2

選擇 Aspire.Hosting.Redis 安裝此套件

Step 3:添加啟動代碼

開啟 Aspire 專案的 Program.cs 檔案,輸入以下:

var redis = builder.AddRedis("RedisDb").PublishAsContainer();



Step 4:執行程式 - (可能錯誤)

啟動後,可能會出現錯誤



Step 5:切換 Windows Docker Desktop 模式

這是因為 Aspire 不支援 Windows Docker Desktop 的 Windows 模式
需切換成 Linux 模式。

Step 7:再次執行 Aspire

可以看到 Redis 容器會自動啟用,在沒有配置自己的 ConnectionStrings 情況下,也會為開發提供預設的 Redis 使用

Step 8:確認 Redis - 完成

打開 Redis 工具,也可確認容器執行時,也都可正常連線使用



第四部分:加入 Mysql 容器

Step 1:加入 Aspire Mysql 套件

Aspire 專案,滑鼠右鍵 -> 加入 -> .NET 目標套件…
選擇 Aspire.Hosting.MysSql 安裝此套件

Step 2:添加啟動代碼

開啟 Aspire 專案的 Program.cs 檔案,輸入以下:

var mysql = builder.AddMySql("MysqlDb");



Step 3:執行 Aspire

可以看到 Mysql 容器會自動啟用,在沒有配置自己的 ConnectionStrings 情況下,也會為開發提供預設的 Mysql Database

Step 4:取得 Mysql 連線密碼

Aspire 的優點除了會分析 Appsettings.json 外,也會分析 Container 內的連線字串。
選擇檢視 -> 打開密碼檢視(眼睛) -> 可以得到連 Mysql 容器的密碼

Step 5:嘗試連線 MySql

使用自己熟悉的 Mysql UI 工具 (此圖為 HeidiSQL),嘗試連線

Step 6:完成 MySql 連線

也可確認容器執行時,也都可正常連線 MySql 資料庫。
※ .NET Aspire 可以優化開發體驗,解決環境問題,但以目前來說還有很多服務需實現。(MinIO 是很大的服務,但 Aspire 亦開發中)