0.6 成本、風險與選型取捨
成本與風險取捨的核心原則是把選型看成長期承諾。每加入一種後端服務能力,都會帶來雲端費用、人力維護、操作流程、事故風險與學習成本;它也可能降低延遲、失敗代價、開發摩擦與未來重構成本。
這一章的內容是所有 Backend 服務實體章節的共同段落要求。後續討論 PostgreSQL、Redis、RabbitMQ、Kafka、Prometheus、Kubernetes、WAF、IAM、Secret Management 或任何具體服務時,都要回到同一組問題:資安限制會增加什麼成本,流量與穩定性會造成什麼壓力,伺服器與雲端費用如何成長,團隊要承擔多少操作成本,選擇這個方案會放棄哪些替代路線。
本章目標
學完本章後,你將能夠:
- 區分建置成本、使用成本、操作成本與失敗代價
- 用產品後果評估資料遺失、重複、延遲與停機風險
- 判斷何時先用簡單設計,何時需要提前補能力
- 把成本討論轉成可比較的選型問題
- 在每個服務實體章節保留固定的成本與機會成本討論
【觀察】後端選型同時改變成本與風險
選型取捨的第一個問題是「這個能力降低哪種風險,又增加哪種成本」。資料庫、快取、queue、觀測平台、部署平台與可靠性流程都能提升能力,但它們也會增加操作面積。
| 取捨面向 | 要回答的問題 | 常見例子 |
|---|---|---|
| 建置成本 | 開發與導入要花多少時間 | schema、Repository Adapter、pipeline、dashboard |
| 使用成本 | 流量與資料量帶來多少費用 | storage、egress、request、compute |
| 操作成本 | 誰負責維護、升級、排障 | backup、alert、權限、容量規劃 |
| 失敗代價 | 延遲、遺失、重複、停機造成什麼後果 | 付款錯誤、通知延遲、資料不一致 |
| 機會成本 | 導入這項能力會延後哪些產品工作 | 平台建設、功能交付、技術債 |
| 資安成本 | 權限、遮罩、加密、稽核與防護帶來多少額外責任 | IAM、TLS / mTLS、audit log、data masking |
這張表是成本索引。討論選型時,應把「技術是否強大」轉成「它是否值得目前承擔」。
【判讀】資安限制會改變成本模型
資安成本的核心問題是「安全要求會讓原本的服務選型增加哪些責任」。同一個資料庫、cache、queue 或 object storage,在沒有敏感資料與有個資、金流、企業權限、稽核要求時,成本模型完全不同。
接近真實網路服務的例子包括:
- 匯出報表若包含個資,系統需要欄位遮罩、核准流程、下載期限、audit log 與存取權限。
- 內部 service-to-service 呼叫若傳遞付款資料,可能需要 mTLS、signed request、credential rotation 與 trace 關聯。
- 客服查詢後台若能看到敏感資料,權限分級、操作稽核與資料最小揭露會成為必要成本。
這類取捨的核心風險是低估安全需求對操作面的影響。資安限制會增加設計、測試、稽核、教育訓練與事故處理成本;它也會降低資料外洩、權限誤用與合規事故的風險。服務章節討論選型時,必須把這兩邊一起列出。
【判讀】建置成本要和需求成熟度一起看
建置成本的核心問題是「需求是否穩定到值得建立能力」。需求仍在探索時,過度完整的平台能力會讓修改變慢;需求已經穩定且失敗代價高時,缺少能力會讓事故與重工成本上升。
接近真實網路服務的例子包括:
- 新功能只有少量 beta 使用者,先用簡單資料模型與明確 interface 保留替換空間。
- 付款流程已是正式收入來源,狀態一致性、audit、告警與回歸測試需要提前補上。
- 內部報表先用每日批次匯出即可,等查詢需求穩定後再討論更完整分析平台。
這類取捨的陷阱是把「未來可能需要」當成現在必須導入。比較穩定的做法是先定義 interface、資料責任與測試合約,等需求成熟或風險升高,再引入具體服務能力。
【判讀】使用成本要看成長曲線
本章的成本取捨發生在自建世界內;更早一層的成本交叉 — 託管平台月費加抽成、對上自建的工程薪資加雲端帳單 — 屬於交付形態的判斷、見 0.21 交付形態選型。
使用成本的核心問題是「流量與資料量成長後,費用如何變化」。儲存、查詢、訊息傳遞、log、trace、egress、compute 都可能隨使用量成長。
接近真實網路服務的例子包括:
- debug log 在小流量時成本很低,流量變大後集中式 log 費用快速增加。
- trace 全量採樣對低流量服務很方便,高流量後需要採樣與欄位控制。
- 長期保存大量事件可以支援 audit,但保留期限會直接影響 storage 與查詢成本。
這類取捨的陷阱是只看當月帳單。成本評估要看資料保留期限、查詢頻率、尖峰流量、跨區傳輸與成長速度,並把成本上限轉成明確策略。
【判讀】操作成本要看團隊能否承擔
操作成本的核心問題是「導入後誰能維護」。一項服務能力上線後,需要監控、備份、升級、權限、容量規劃、事故處理與文件。團隊若缺少操作能力,技術本身再合適也會變成風險。
接近真實網路服務的例子包括:
- 團隊導入多種 broker 後,需要同步建立 consumer lag、dead-letter 與 replay runbook。
- 服務開始使用多個快取層後,需要同步建立 失效策略 與 資料不一致 的排查方式。
- 部署平台支援自動擴容後,application 需要提供 readiness 與 graceful shutdown 合約。
這類取捨的陷阱是只計算開發時間。操作成本常在上線後才出現,因此選型時要把 runbook、告警、權限、備份、回復與測試環境列入範圍。
【判讀】失敗代價決定保證等級
失敗代價的核心問題是「錯誤發生時產品後果是什麼」。資料遺失、重複投遞、短暫不一致、延遲、partial failure、cascading failure、降級與停機的代價不同,對應的保證等級也不同。
接近真實網路服務的例子包括:
- 付款事件重複可能造成重複出貨或重複通知,因此 consumer 需要 idempotency。
- 聊天 typing indicator 遺失通常可接受,正式訊息遺失則需要保存與補送。
- 商品價格短暫不一致可能造成客訴,庫存短暫不一致可能造成超賣。
這類取捨的陷阱是追求所有資料都最高保證。高保證通常帶來更高延遲、成本與操作複雜度;合理設計會依資料語意分級,而非把所有訊息都放進同一種可靠性模型。
【判讀】機會成本決定投入順序
機會成本的核心問題是「做這件事會延後什麼」。後端能力建設很容易變成長期平台工程;它可能值得,也可能讓產品驗證變慢。投入順序要跟風險、成長與團隊能力對齊。
接近真實網路服務的例子包括:
- 產品仍在找市場定位時,先用清楚邊界保留替換空間,比導入完整事件平台更實際。
- 服務已經有穩定收入且事故頻繁時,補 observability、Deployment Contract 與 reliability pipeline 會直接降低業務風險。
- 流量即將進入大型活動前,先做 load test、容量預估與降級策略,比重構所有資料層更有時效。
這類取捨的陷阱是把架構完整度當成目標。選型應回答目前最需要降低哪個風險,並設計能回頭修正的邊界。
【檢查】進入實作前的概念邊界清單
當以下問題都能回答時,代表本章的概念層已完成,可以進入具體服務取捨與落地章節:
- 成本維度是否完整(建置、使用、操作、資安、機會成本)
- 失敗代價是否分級(遺失、重複、延遲、停機)
- 團隊可承擔的操作責任是否明確(runbook、告警、備份、回復)
- 何時重評選型的條件是否明確(流量、法規、事故頻率)
下一步建議路由:
小結
後端服務選型要同時看成本與風險。建置成本要看需求成熟度,使用成本要看成長曲線,操作成本要看團隊能否承擔,失敗代價決定保證等級,機會成本決定投入順序。這些取捨清楚後,後續討論具體服務才會有共同標準。