Aspire 13

一個專案的開始

開發專案時,通常會在本地端進行,並結合 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,是可以嘗試看看了


Sentry 10 onpremise installation

Log 紀錄,在 DevOps 的情境中,其實是一個很重要的項目,所有的系統在上線的時候,都應該要有適當的 Log 紀錄
以方便後續的問題追蹤,尤其是在 Microservice 的設計上面

當你的服務或系統是以 docker container 的方式啟動,如果只是以 container stdout/stderr 的方式來取得紀錄,實際上後續的追蹤並不容易,所以我自己找了一下網路上的解決方案,找到了 sentry 的這套系統。

而在公司內部使用,如果公司環境並不允許 Log 紀錄在外部的網站,就需要考慮 Self-Hosted 的建置,剛好 sentry 有提供 onpremise 的部分,就找了這個 source 來驗證一下在本地端建置 sentry 的步驟。


.Net Standard 筆記

簡單筆記

  • 標準的基礎程式庫 API 介面定義
  • 可以跨平台
  • 目前 .Net framework 4.6.1 支援 .Net Standard 2.0 (.Net Standard 1.x 僅有 .Net Code 1.x 支援)
  • .Net Standard 版本控制規則
    • 累加:較新的版本會包含較舊版本的 API
    • 不可變:版本提交後,該版本便已凍結
  • 自行根據 PCL (Portable Class Library),決定設定檔集合 (就是決定要用哪套實作的程式庫,看是要用 .Net framework 或是 .Net Core)

架構圖

網路介紹文章