iT邦幫忙

2025 iThome 鐵人賽

DAY 30
0
Rust

Rust 後端入門系列 第 30

Day30 學習總結

  • 分享至 

  • xImage
  •  

快速回顧學到的內容

  • 安裝與工具
    • rustup、cargo、cargo new / build / run / fmt。
  • Rust 基礎語法
    • 變數、型別、條件(if 作為表達式)、match、迴圈(loop / while / for)。
    • 函數(fn)、結構(struct)、列舉(enum)、模組(mod)。
  • 所有權與借用(Ownership & Borrowing)
    • 移動(move)、不可變借用 &T、可變借用 &mut T、clone、Copy。
    • 生命週期(lifetimes)與參考有效性保證。
  • 錯誤處理
    • Option、Result、? 運算子、錯誤傳遞與處理實務。
  • 常用資料結構與 iterator
    • Vec、HashMap、iter/map/filter/collect。
  • CLI 開發實戰
    • 使用 clap 建造待辦管理器(todo CLI),檔案儲存(serde_json)、日期時間(chrono)、顏色輸出(colored)。
  • Web 與 Axum 生態
    • Axum 基礎:Router、Handler、Server。
    • Path/Query/Form/Headers/自訂 Extractors。
    • 中間件(tower & tower-http):CORS、Compression、Timeout、Trace。
    • State 管理:with_state / Extension,與 Arc、tokio::sync::RwLock。
  • 中間件與架構
    • 自訂 Layer/Service、ResponseTime middleware、Trace/logging(tracing)。
  • 快取、Redis 與一致性模式
    • cache-aside、TTL、invalidate、負快取與一致性權衡。
  • 資料庫與 sqlx
    • PgPool、連線池設定、migrations(sqlx-cli)、在啟動時執行 migration、使用 parameterized SQL。
  • 使用者安全(密碼與驗證)
    • Argon2 雜湊(spawn_blocking)、hash 與 verify、參數選擇、rehash 策略。
    • JWT(jsonwebtoken):簽發、驗證、自訂 extractor 做授權保護。
    • 授權(Authorization):Owner check、防 TOCTOU 的 SQL 寫法。
  • 測試(單元 + 整合)
    • 把 app 組成可測試的 factory、用 reqwest 與真實 DB/Redis 做 integration tests。
  • 部署、容器化與 CI
    • Docker multi-stage build(靜態二進位)、docker-compose(Postgres/Redis/API)、GitHub Actions CI 範例。
  • 性能測試
    • k6 範例腳本、透過 stages/thresholds 測 p95、模擬真實行為。

實戰重點

  • 開發流程
    • 把 schema migration(migrations/)納入版本控制、並在 CI 或部署腳本執行 migrations(避免多實例同時跑時的競態)。
  • 安全
    • JWT_SECRET 不要放在程式碼或 repository,中小型專案可用 env;生產環境建議用 KMS / secret manager。
    • 密碼處理只存 hashed string(Argon2 encoded form),絕對不回傳 password_hash 給 client。
  • 快取策略
    • 對於讀多寫少的資源(如熱門 user profile),cache-aside 加 TTL 效果最佳。更新/刪除時務必 invalidate 或更新快取。
  • 錯誤處理
    • 為每種類型錯誤定義合適 HTTP status(validation -> 400、auth -> 401/403、not found -> 404、conflict -> 409、internal -> 500),回傳 machine-friendly code。
  • 測試與 CI
    • 在 GitHub Actions 用 services 啟 Postgres/Redis 做 integration tests,並把測試 DB 以 UUID 隔離,確保可重複執行。
  • 部署
    • Dockerfile 用多階段建置(release binary),runtime image 不要含 build tool,並用 healthcheck 與 resource limit 管控。
  • 觀測與追蹤
    • 在 production 用 TraceLayer + tracing 對接 log aggregator(Loki、ELK、Datadog)與 metrics(Prometheus)以便 observability。
  • 性能
    • 先做基準測試,再逐步增加負載到壓力測試(找 p95)、最後做耐力測試(找 memory leak 或資源累積問題)。

下一步可以做什麼?

  1. 把目前 todo / user 專案整理成 modular crate(拆 handlers、models、db、auth、cache),並補上 README 與 run 指令。
  2. 在 CI 加上 build artifact(docker image build + push 到 registry)的 job,並把 migration 放在 deploy 階段由 pipeline 執行。
  3. 實作 refresh token 流程(短期 access + long-lived refresh token 存 DB/Redis),加上 logout/撤銷流程。
  4. 加入 Prometheus metrics endpoint(/metrics)與基本 dashboard,並用 k6 定期做壓力測試。
  5. 加強安全檢查:static analysis、cargo-audit、依賴更新自動化(dependabot)。
  6. 擴充 API 文件:完善 utoipa/OpenAPI 的 examples,並在 dev/staging 環境開放 Swagger UI(生產環境需保護)。

心得

過去三十天,我們把 Rust 從語法、記憶體安全、到實務後端工程(CLI、Axum、sqlx、Redis、Auth、測試、部署、CI/CD、效能測試)串成一條可實作的路徑。我們已經把理論與大量實務樣板寫出來,未來可以把這些樣板整合成可持續維護的工程專案:自動化測試、監控、以及安全部署流程,會讓專案更穩健、能在真實環境長期運作。


上一篇
Day 29 使用 k6 壓力測試專案
系列文
Rust 後端入門30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言