本章概覽#

第 1 章曾簡述:流暢交付(fast flow)需要鬆設計期耦合的架構,加上快速的部署管線。本章用第 3 章引入的「品質屬性(quality attribute)」視角,進一步把這些架構需求具體化。

品質屬性是可量測、可被定義為具體場景的應用屬性。本章探討五個對流暢交付至關重要的品質屬性:

  • 可修改性(Modifiability):對應用做變更的容易程度。
  • 可演化性(Evolvability):升級技術棧的容易程度。
  • 可測試性(Testability):驗證變更是否可釋出的速度與便利度。
  • 可部署性(Deployability):把變更送上生產環境的速度與可靠性。
  • 可觀測性(Observability):理解應用執行期行為與使用者行為的容易程度。

本章將討論的主題#

  • 流暢交付所必備的五個品質屬性
  • 為何這些品質屬性重要
  • 架構如何滿足這些品質屬性
  • 元件架構(單一 vs 多元件)在這些品質屬性上扮演的角色

開發工作流與品質屬性的對應#

開發者實作一個 flow item(功能、bug 修復等)的工作流是一個迭代過程,由兩個迴圈組成:

  • 外層的 change-deploy-analyze 迴圈:
    1. 做設計決策。
    2. 實作變更。
    3. 透過 git push 觸發部署管線測試與部署。
    4. 分析部署管線或生產環境的回饋。
  • 內層的 edit-test-analyze 迴圈(嵌在第 1 步內):寫程式或修改、跑測試、分析結果。

Figure 5.1: The iterative workflow for designing and developing a flow item — outer change-deploy-analyze loop and inner edit-test-analyze loop

每一個步驟對應到的品質屬性:

  • 設計決策:可修改性、可演化性。
  • 實作變更:可修改性、可演化性、可測試性。
  • 部署變更:可測試性、可部署性。
  • 分析回饋:可觀測性。

各小節導讀#

  • 5.1 可修改性:讓設計決策與實作變更夠快、夠局部。

Figure 5.2: The number of people involved in making a decision varies widely; ideally, decisions stay within a team

Figure 5.3: Modifiability and evolvability quality attributes determine the speed and ease of making design decisions

Figure 5.4: Modifiability, evolvability, and testability quality attributes determine the speed and ease of implementation

  • 5.2 可演化性:讓技術棧能夠持續升級。
  • 5.3 可測試性:支援快速、自動、本地的測試。
  • 5.4 可部署性:支援自動、快速、可靠、可回滾的部署。

Figure 5.5: A fast deployment pipeline is achieved by satisfying testability and deployability quality attributes

  • 5.5 可觀測性:讓回饋從生產環境流回團隊。

Figure 5.6: Observability describes how easy it is to understand the application's runtime behavior and user behavior