快轉到主要內容
  1. 文章/

Aspire 13

·1 分鐘

一個專案的開始 #

開發專案時,通常會在本地端進行,並結合 Database 和 Cache 等服務。目前常見的做法是使用 Docker 啟動 Database 或 Cache container 來建立本地測試環境,而非直接連線到公司提供的測試環境。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
version: '3.9'

services:
  postgres:
    image: postgres:16
    container_name: my_postgres
    restart: always
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
      POSTGRES_DB: mydb
    ports:
      - "5432:5432"
    volumes:
      - pg_data:/var/lib/postgresql/data

volumes:
  pg_data: {}  

以上面的例子來說,你需要先有以下的知識:

  • 你需要知道 docker 使用的基本知識
  • 你需要懂 docker-compose 的格式
  • 你需要知道 postgres container 所提供的設定資料種類與設定方式

當然,以現代結合 AI 的做法,以上的方式其實很簡單,不容易出問題 (以上範例也是直接讓 ChatGPT 給我的)。但如果你還需要更深入一點的操作,包含取得連線字串,放到系統中使用,或者是管理資料庫的生命週期,舉例來說如果有以下問題:

  • 資料庫什麼時候啟動?
  • 啟動後如果要重設的方式?
  • 如果有一個以上的服務需要使用資料庫,但是 schema 不一樣?
  • 假設有一個以上的服務需要用到資料庫,但是實際生產環境是不同的兩個 database ? 我該怎麼啟動兩個資料庫,然後使用不同的 Port ?
  • 怎麼樣讓資料庫已啟動就有相對應的 schema or data?

如果一個新進專案的工程師要了解以上服務的關聯性以及啟動方式,你需要將以上的資訊整理成一份 README,或者是寫好一個 script 來將以上的動作都一次處理完畢。但這又有其他問題:

  • README 要怎麼寫,才能讓新加入的成員很好理解?
  • script 要用什麼格式?Bash or Powershell?(如果遇到團隊有使用不同環境的電腦)
  • 如果遇到要存取檔案,路徑格式的表現方式?
  • 如果有使用到其他工具,還需要說明其他工具的安裝方式

所以,如果公司內沒有一個懂以上資訊或怎麼做的人,這些對團隊來說,都會是痛點。而且如果團隊成員會有不同想法,不同意見,以及考慮到人員異動,專案成員來來去去,情況就更複雜了。

當然,以上問題以現代的做法來講,你都可以讓 AI 來幫你處理掉以上的問題,你可以不需要找其他工具來處理,直接把以上問題都整理好,一次讓 AI 處理掉以上問題。如果有發生其他狀況,直接讓 AI 來幫你處理掉以上問題。但是,你每個專案可能都需要來一次。如果中途要修改,你還需要花一點時間測試與了解做法,這些,都是隱性成本 (人力 or Tokens 數)。

Aspire is glue #

微軟認為,Aspire 這個工具是一個用來黏合其他服務的一個方式,而且是使用我們已經習慣的 C# 語言,搭配已經開發好的 NuGet Packages,你可以很快速的啟動資料庫,並且將連線字串直接注入到專案中使用,也不需要再管理連線字串。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
using Aspire.Hosting;

var builder = DistributedApplication.CreateBuilder(args);

// 建立 PostgreSQL 資料庫
var postgres = builder.AddPostgres("postgres")
    .WithImage("postgres:16")                    // 指定版本
    .WithEnvironment("POSTGRES_PASSWORD", "mypassword")
    .WithEnvironment("POSTGRES_USER", "myuser")
    .WithEnvironment("POSTGRES_DB", "mydb")
    .WithDataVolume("pg_data");

// 建立資料庫實例,並產生 connection string
var postgresDb = postgres.AddDatabase("mydb");

// 建立 Sample.Api WebAPI 並注入資料庫 ConnectionString
builder.AddProject<Projects.Sample_Api>("sample-api")
    .WithReference(postgresDb);                 // Aspire 會自動注入連線字串

builder.Build().Run();

以上的專案啟動後,還會有一個漂亮的 Dashboard 可以使用,裡面可以看所有服務的 Console Output,並且直接結合 OpenTelemetry,有 Tracing、Metric 等相關資訊可以檢視。

現在已經到 Aspire 13,是可以嘗試看看了