Reliable by Design
錯誤處理、輸入驗證、監察與還原,與功能一齊設計,而不是出事後才補。系統失敗時,應該失敗得看得見、預料得到。
技術
這頁講的是工程決定,不是 framework 清單。工具會按項目而變;這些原則不會。
工程原則
每項都有代價。我們接受這個代價,因為另一邊通常會在上線之後、更差的時間才出現。
錯誤處理、輸入驗證、監察與還原,與功能一齊設計,而不是出事後才補。系統失敗時,應該失敗得看得見、預料得到。
其他系統要取用的,都經明確介面與既定合約暴露,接駁不依賴內部實作細節。
Secrets、認證、授權與驗證放在伺服器。Client 程式當公開看待,權限給到剛夠用的最小範圍。
零件少、做法常見、程式可讀。只有問題需要時才加複雜度,因為之後會由別人維護。
對運作重要的系統帶有 logging、分析與健康檢查,行為與成本用數據回答,而不是靠估計。
架構
這是我們的起點。有理由就可以偏離,但要把理由寫下來。
你正在看的網站也按同一套規則。頁面預先產出靜態 HTML,由 Cloudflare 的 edge network 派發,一次瀏覽不需 server-side rendering,也不查資料庫。真正在請求時執行的,只有 /api 底下少量 API:健康檢查、服務目錄、聯絡表格,以及預留作日後收款的 payment endpoints。
你可以自行檢查 health endpoint: /api/health.
能力範圍
我們日常做的範圍。超出範圍的,會直接說明,而不是用你的項目來學。
針對具體工作使用 model,並有驗證、後備做法與成本可見度。
有版本的 HTTP 介面、webhook,以及經認證的服務界線。
按時間或事件執行的工作,有重試、logging 與例外隊列。
對結構化與文字數據做正規化、驗證與轉換。
Serverless 與 edge 部署、環境分隔、managed secrets。
可及、適應不同畫面的介面,全程在伺服器端驗證。
營運系統之間的接駁,每個欄位的擁有權寫清楚。
營運報表與量度,建基於系統本身使用的同一份數據。