Featured Categories

文章列表

20k18 分鐘

【K8s 學習&觀念隨筆】系列 (四) 接續 (三) GitOps 實戰:用 Kustomize + FluxCD 管 GPU K8s 叢集。 上一篇講「Git 是真相、Flux 自動同步」這個大框架;這篇專講其中最不直覺、最容易踩坑的一塊:Image 自動更新——也就是「我 push 一個新 image 到 Harbor,cluster 自己升版」這件事,背後到底有哪些 Controller、哪些 yaml、會在哪些時間點出問題。 # TL;DR Image 自動更新由 4 種 Flux 物件協作:ImageRepository(掃 Harbor)→ ImagePolicy(
2.6k2 分鐘

# 一句話總結 protobuf 對欄位「多/少」天生寬容(多的忽略、少的給零值),不會自動噴錯;真正會炸的是「型別不符」或「欄位編號被亂改」。要嚴格驗證得自己在 server 邏輯做。 # TL;DR — 三種情況速查 情況 結果 為什麼 少欄位(client 沒帶某欄位) ✅ 不報錯,該欄位拿型別零值 proto3 沒有 required,每個欄位天生 optional 多欄位 / client 比 server 新(帶了 server 不認得的欄位) ✅ 不報錯,server 忽略並丟棄(unknown fields) server 解碼時遇到不認
1k1 分鐘

# locust 蝗蟲壓力測試工具 # 為何 Rust 在 CPU 密集運算下會比 Python 快? Rust 快的原因: ✅ 編譯成機器碼 - 更底層,無中間層 ✅ 編譯器優化 - LLVM 做大量優化 ✅ 無 GIL - 真正的多核並行 ✅ 零成本抽象 - 高階語法,無性能損失 ✅ 記憶體管理 - 編譯時確定,無 GC 開銷 Python 慢的原因: ❌ 解釋執行 - 每次都要翻譯 ❌ 動態型別 - 運行時檢查型別 ❌ GIL 限制 - 單核執行 ❌ 記憶體開銷 - 動態分配 + 垃圾回收 # 靜態型別 vs 動態型別 Rust:編譯期就知道所有變數型別,能幫助編譯器做最佳化。
3k3 分鐘

# 目的? 以往在用 docker compose 快速啟動服務,常常會遇到: 在一台全新的機器或開發環境中,都需要手動進入docker內部db容器,手動執行初始化(init)資料庫結構的 SQL 腳本,接著再執行資料(seed)的 SQL 腳本來填充初始資料 流程不僅繁瑣,而且容易出錯,特別是在多個環境(如開發、測試、生產)中部署時 比如在某專案中,固定會有個 products 的資料表,並且每次部署到新主機第一次啟動時,去打端點都一定會跳sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) relation
3k3 分鐘

# docker ps 只顯示正在執行的容器 docker ps 顯示所有容器(包含執行中、已停止、已退出) docker ps -a # or docker ps --all 顯示最近建立的容器 docker ps -l 顯示最近建立的 N 個容器(例:docker ps -n 3) docker ps -n <數字> # 管理 Docker data 相關指令 查看目前有哪些 volume,很常會有需要清理一些沒在使用的、或只是暫時創建來測試用的一些 data,這些 data = docker 的 volume # 列出目前有哪些 volume doc
5191 分鐘

# 重要 按理來說接口應要跟 pydantic 模型一模一樣 # FastAPI vs gRPC 差異 特性 FastAPI (REST) gRPC 通訊協定 HTTP/1.1 HTTP/2 資料格式 JSON Protocol Buffers (二進位) API 定義 OpenAPI/Swagger Proto 檔案 效能 較慢 較快 瀏覽器支援 原生支援 需要額外工具 串流 有限支援 原生支援雙向串流 # Postman 測試 gPRC