第五個、也是最後一個對流暢交付至關重要的品質屬性是可觀測性(Observability)——它反映「理解應用與其使用者行為的容易程度」。它的重要性體現在三件事:
- 來自生產環境與使用者的回饋是流暢交付不可或缺的一環。
- 部署失敗必須被快速偵測並回滾。
- 生產問題必須被快速診斷與修復。
可觀測性的場景#
兩個典型場景:
- 支援部署機制判斷成敗:部署期間,元件發出指標(error rate、latency 等),由可觀測性基礎設施收集後提供給部署機制,作為「成功 / 應該回滾」的判斷依據。
- 支援團隊理解應用與使用者行為:應用元件發出 telemetry,由可觀測性基礎設施收集,提供給開發者觀察自家元件與使用者的行為。
設計高可觀測性的架構#
兩條主要策略:
- 實作可觀測性模式(observability patterns)
- 使用多元件架構
實作可觀測性模式#
技術可觀測性的好定義(來源:Honeycomb 的《What Is Observability?》):
「Observability(亦稱 o11y)是理解應用與系統行為與效能的概念。它從收集系統 telemetry 開始——例如 logs、metrics、traces;更關鍵的是如何分析這些 telemetry,以診斷問題、理解依賴互聯,並確保可靠性。」
注意:這個定義側重「應用可靠性」,但 telemetry 同時也呈現使用者行為——例如某個你以為很有價值的功能,實際上根本沒人用。
第 17 章詳述以下可觀測性模式:
- Log aggregation(日誌聚合)
- Distributed tracing(分散式追蹤)
- Application metrics(應用指標)
每種模式都由兩部分組成:
- 元件中的 instrumentation 程式碼:收集並發出 telemetry。
- 基礎設施服務:收集、儲存、分析 telemetry。
可觀測性是開發與營運共同協作的成果。
- 營運:提供 log aggregation、monitoring 等基礎設施服務。
- 開發:撰寫 instrumentation 程式碼。對某些 telemetry,只需引入適當的函式庫;對另一些(domain-specific metrics、application-level logs),需要寫自己的程式碼。

Figure 5.20: Observability requires collaboration between developers (instrumentation) and operations (infrastructure services)
多元件架構提升可觀測性#
Telemetry 是按「元件實例」收集的,某些指標(尤其是資源使用率)反映的是整個元件的合計行為。
當單一元件包含多個子領域時,合計指標會遮蔽各子領域的個別行為。多元件架構讓你能取得更細緻的 telemetry(例如以子領域為單位),更容易定位問題與理解使用者行為。
章節重點摘要#
- 流暢交付需要架構滿足五個品質屬性:可修改性、可演化性、可測試性、可部署性、可觀測性。
- 前四項讓開發者快速地把變更交給客戶;第五項則確保部署的安全並提供來自生產與使用者的回饋。
- 可修改性:來自鬆設計期耦合與高內聚的架構。
- 可演化性:對大型應用而言,需要多元件架構,讓多數架構決策可獨立做,升級可漸進進行。
- 可測試性:來自模組化、鬆設計期耦合、確定性的架構。
- 可部署性:來自支援自動化、快速、可靠、不影響 SLA、可自動回滾的部署設計。
- 可觀測性:主要透過落實可觀測性模式達成;多元件架構讓大型複雜應用的可觀測性更佳。
- 元件架構的選擇(單一元件 vs 多元件)直接影響大型應用能否滿足可演化性、可測試性、可部署性、可觀測性,這也是微服務與巨石之間的關鍵差異。