軟體架構:困難部分 封面

軟體架構:困難部分

👨‍💼: Neal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani
📅: October 25, 2021
Buy Now
📖:
聚焦分散式架構中最棘手的取捨決策,提供從單體拆分到資料管理的系統化分析框架。
📘 深度概覽

作者背景#

本書由四位資深軟體架構顧問合著。Neal Ford 與 Mark Richards 是 O’Reilly《Fundamentals of Software Architecture》的共同作者,長期從事企業架構諮詢與培訓。Pramod Sadalage 是資料庫演進式設計(evolutionary database design)的先驅,與 Martin Fowler 合著《Refactoring Databases》。Zhamak Dehghani 是 Data Mesh 概念的提出者,在 Thoughtworks 擔任技術總監期間發展出這套以領域為中心的分析資料管理方法論。四位作者的專長涵蓋應用架構、資料架構與分散式系統,使本書能同時處理程式碼拆分與資料拆分兩大難題。

完整摘要#

《軟體架構:困難部分》(Software Architecture: The Hard Parts)的核心論點是:軟體架構沒有「最佳實務」,只有特定情境下的「最不差的取捨組合」。全書以一個貫穿始終的虛構案例 Sysops Squad——一家電子產品零售商的技術支援系統——為載體,展示如何從單體架構遷移至分散式架構。

第一部分「拆分」從 architecture quantum 的定義切入,將靜態耦合(程式庫、資料庫等啟動依賴)與動態耦合(執行時期的通訊、一致性、協調方式)加以區分,形成一套精確的耦合分析詞彙。接著透過五個架構特性驅動因素(可用性、可擴展性、可部署性、可測試性、可維護性)建立拆分的商業論據。在程式碼層面,提出六步元件式分解模式(辨識元件、收集共用邏輯、扁平化、分析依賴、建立領域、提取服務),每步搭配 fitness function 進行治理。在資料層面,以六項拆解驅動力和四項整合驅動力的對抗分析來判斷是否應拆分資料庫,並介紹五步資料庫分解流程與 polyglot database 的選型策略。服務粒度的決定則透過 disintegrators(內聚性、變動性、擴展性、容錯、安全、可擴展性)與 integrators(資料庫交易、工作流程、共用程式碼、資料關係)的平衡來達成。

第二部分「組合」處理拆分後的整合難題。程式碼重用提供四種模式(複製、共用函式庫、共用服務、sidecar/service mesh),各有適用情境。資料擁有權區分 single、common、joint 三種情境,以 table split、data domain、delegate 等技術處理 joint ownership。分散式資料存取有四種模式(服務間通訊、欄位複製、複製快取、資料領域),依延遲、容錯、資料量等條件選用。工作流程管理比較 orchestration 與 choreography 的取捨,指出語意複雜度越高越適合 orchestrator。Transactional saga 章節定義了八種模式(Epic、Phone Tag、Fairy Tale、Time Travel、Fantasy Fiction、Horror Story、Parallel、Anthology),以通訊、一致性、協調三維度的組合系統化地分析耦合程度與複雜度。契約設計探討 strict 與 loose 的光譜,以及 consumer-driven contract 和 stamp coupling 的正反面。分析資料管理則從 Data Warehouse、Data Lake 的歷史演進,引出 Data Mesh 的四項原則與 Data Product Quantum 的架構概念。最終章提供建構自訂 trade-off 分析的方法論,包括 MECE list、脈絡陷阱的避免、定性分析技巧等。

本書的貢獻與定位#

本書填補了軟體架構文獻中長期缺乏的一塊:當系統需要從單體遷移至分散式架構時,架構師面對的具體技術決策與取捨的系統化分析。與偏重架構風格概覽的入門書不同,本書深入「how」的層面,為每個決策點提供驅動力/反驅動力的對抗框架和 trade-off 矩陣。Architecture quantum、transactional saga 八模式、data disintegrators/integrators 等概念為業界提供了精確的分析詞彙。適合正在進行或規劃單體拆分的架構師與技術主管,以及需要在分散式系統中做出資料擁有權、服務粒度、工作流程協調等決策的團隊。