『ソフトウェアアーキテクチャ・ハードパーツーー分散アーキテクチャのためのトレードオフ分析』

翻訳を担当した書籍『ソフトウェアアーキテクチャ・ハードパーツ ―分散アーキテクチャのためのトレードオフ分析』(オライリー・ジャパン)が本日(10月27日)発売となります(電子書籍オライリー・ジャパンサイトから購入できます)。本書は、2021年10月に出版されたNeal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani 著『Software Architecture: The Hard Parts』(O'Reilly Media)を全訳したものです。

本書は、『ソフトウェアアーキテクチャの基礎 ―エンジニアリングに基づく体系的アプローチ』(オライリージャパン)に続く、Neal FordとMark Richardsのタッグによるソフトウェアアーキテクチャを扱った書籍になります。前作には盛り込みきれなかった、現代の分散アーキテクチャでの意思決定が持つさまざまなトレードオフについて、その見極め方や評価の仕方、効果的な意思決定を行っていく方法を解説しています。

本書では、アーキテクチャ上の決定に与える影響としてデータに関するトピックにも深く踏み込んでおり、その領域に造詣の深いPramod SadalageとZhamak Dehghaniの二人が新たに共著者として加わっています1

耳なじみのない「ハードパーツ」という言葉を冠した本書のタイトルは、オライリーの「The Good Parts」シリーズのオマージュから2。ソフトウェアアーキテクチャという「ソフトウェアの中のハード(硬い)な部分」であり「べストプラクティスの存在しない領域」(ゆえに「Good Parts」とは言えない)、そしてそうしたソフトウェアアーキテクチャの「ハードパーツ(難しい問題)」を扱った書籍であることを意味しています。

同月に『マイクロフロントエンド ―マイクロサービスアーキテクチャの概念をフロントエンドに拡張し、信頼性、自律性の高いシステムを構築する』(序文は本書の著者の一人Neal Ford!)も刊行され、12月にはSam Numanの『マイクロサービスアーキテクチャ 第2版』の刊行も予定されていて、ソフトウェアアーキテクチャ周辺の注目書籍が盛りだくさんですが、ソフトウェアアーキテクチャに取り組むたくさんの方に手に取っていただけると嬉しいです。

目次

本書への推薦の言葉
はじめに

1章 「ベストプラクティス」がないとどうなる?
    1.1 なぜ「ハードパーツ」か?
    1.2 ソフトウェアアーキテクチャについての時代を超えたアドバイス
    1.3 アーキテクチャにおけるデータの重要性
    1.4 アーキテクチャデシジョンレコード
    1.5 アーキテクチャ適応度関数
        1.5.1 適応度関数の使用
    1.6 アーキテクチャと設計:定義をシンプルにする
    1.7 Sysops Squadサーガの紹介
        1.7.1 非チケッティングワークフロー
        1.7.2 チケッティングワークフロー
        1.7.3 悪いシナリオ
        1.7.4 Sysops Squadのアーキテクチャコンポーネント
        1.7.5 Sysops Squadデータモデル

第I部 分解する

2章 ソフトウェアアーキテクチャにおける結合の見分け方
    2.1 アーキテクチャ量子
        2.1.1 独立してデプロイ可能
        2.1.2 高度な機能的凝集
        2.1.3 高度な静的結合
        2.1.4 動的な量子結合
    2.2 Sysops Squadサーガ:量子を理解する

3章 アーキテクチャのモジュール化
    3.1 モジュール化の推進要因
        3.1.1 保守性
        3.1.2 テスト性
        3.1.3 デプロイ性
        3.1.4 スケーラビリティ
        3.1.5 可用性・耐障害性
    3.2 Sysops Squadサーガ:提案書の作成

4章 アーキテクチャの分解
    4.1 コードベースは分解可能か?
        4.1.1 求心性結合と遠心性結合
        4.1.2 抽象度と不安定度
        4.1.3 主系列からの距離
    4.2 コンポーネントベース分解
    4.3 戦術的フォーク
        4.3.1 トレードオフ
    4.4 Sysops Squadサーガ:分解アプローチを選択する

5章 コンポーネントベース分解パターン
    5.1 コンポーネントの特定およびサイズ調整パターン
        5.1.1 パターンの説明
        5.1.2 統制のための適応度関数
        5.1.3 Sysops Squadサーガ:コンポーネントのサイズ調整
    5.2 ドメイン共通コンポーネントの収集パターン
        5.2.1 パターンの説明
        5.2.2 統制のための適応度関数
        5.2.3 Sysops Squadサーガ:ドメイン共通コンポーネントの収集
    5.3 コンポーネントのフラット化パターン
        5.3.1 パターンの説明
        5.3.2 統制のための適応度関数
        5.3.3 Sysops Squadサーガ:コンポーネントのフラット化
    5.4 コンポーネントの依存関係判断パターン
        5.4.1 パターンの説明
        5.4.2 統制のための適応度関数
        5.4.3 Sysops Squadサーガ:コンポーネントの依存関係を特定する
    5.5 コンポーネントドメインの作成パターン
        5.5.1 パターンの説明
        5.5.2 統制のための適応度関数
        5.5.3 Sysops Squadサーガ:コンポーネントドメインの作成
    5.6 ドメインサービスの作成パターン
        5.6.1 パターンの説明
        5.6.2 統制のための適応度関数
        5.6.3 Sysops Squadサーガ:ドメインサービスの作成
    5.7 まとめ

6章 業務データの分解
    6.1 データ分解の推進要因
        6.1.1 データ分解要因
        6.1.2 データ統合要因
        6.1.3 Sysops Squadサーガ:データベース分解の根拠
    6.2 モノリシックなデータを分解する
        6.2.1 ステップ1:データベースを分析し、データドメインを特定する
        6.2.2 ステップ2:テーブルをデータドメインに割り当てる
        6.2.3 ステップ3:データベースコネクションをデータドメインごとに分離する
        6.2.4 ステップ4:スキーマを別個のデータベースサーバーに移動する
        6.2.5 ステップ5:個別のデータベースサーバーへコネクション先を切り替える
    6.3 データベース種別を選択する
        6.3.1 リレーショナルデータベース
        6.3.2 キーバリューデータベース
        6.3.3 ドキュメントデータベース
        6.3.4 列指向データベース
        6.3.5 グラフデータベース
        6.3.6 NewSQLデータベース
        6.3.7 クラウドネイティブデータベース
        6.3.8 時系列データベース
    6.4 Sysops Squadサーガ:ポリグロットデータベース

7章 サービスの粒度
    7.1 粒度分解要因
        7.1.1 サービスの範囲と機能
        7.1.2 コード変動率
        7.1.3 スケーラビリティとスループット
        7.1.4 耐障害性
        7.1.5 セキュリティ
        7.1.6 拡張性
    7.2 粒度統合要因
        7.2.1 データベーストランザクション
        7.2.2 ワークフローとコレオグラフィ
        7.2.3 共有コード
        7.2.4 データ関係
    7.3 適切なバランスを見極める
    7.4 Sysops Squadサーガ:チケット割り当ての粒度
    7.5 Sysops Squadサーガ:顧客登録の粒度

第II部 つなぎ合わせる

8章 再利用パターン
    8.1 コードレプリケーション
        8.1.1 使いどころ
    8.2 共有ライブラリ
        8.2.1 依存関係の管理と変更の制御
        8.2.2 バージョニング戦略
        8.2.3 使いどころ
    8.3 共有サービス
        8.3.1 変更リスク
        8.3.2 パフォーマンス
        8.3.3 スケーラビリティ
        8.3.4 耐障害性
        8.3.5 使いどころ
    8.4 サイドカーとサービスメッシュ
        8.4.1 使いどころ
    8.5 Sysops Squadサーガ:共通基盤ロジック
    8.6 コードの再利用:どのようなときに価値が生まれるか?
        8.6.1 プラットフォームによる再利用
    8.7 Sysops Squadサーガ:共有ドメイン機能

9章 データの所有権と分散トランザクション
    9.1 データの所有権を割り当てる
    9.2 単独所有シナリオ
    9.3 全体共有シナリオ
    9.4 共同所有シナリオ
        9.4.1 テーブルの分割
        9.4.2 データドメイン
        9.4.3 委譲
    9.5 サービスコンソリデーション
    9.6 データ所有権のまとめ
    9.7 分散トランザクション
    9.8 結果整合性パターン
        9.8.1 バックグラウンド同期パターン
        9.8.2 リクエストベースのオーケストレーションパターン
        9.8.3 イベントベースパターン
    9.9 Sysops Squadサーガ:チケット処理のデータ所有権

10章 分散データアクセス
    10.1 サービス間通信パターン
    10.2 列スキーマレプリケーションパターン
    10.3 レプリケーションキャッシュパターン
    10.4 データドメインパターン
    10.5 Sysops Squadサーガ:チケット割り当てのためのデータアクセス

11章 分散ワークフローの管理
    11.1 オーケストレーション通信スタイル
    11.2 コレオグラフィ通信スタイル
        11.2.1 ワークフロー状態管理
    11.3 オーケストレーションとコレオグラフィのトレードオフ
        11.3.1 状態の所有者と結合
    11.4 Sysops Squadサーガ:ワークフローを管理する

12章 トランザクショナルサーガ
    12.1 トランザクショナルサーガパターン
        12.1.1 エピックサーガ(sao)パターン
        12.1.2 伝言ゲームサーガ(sac)パターン
        12.1.3 おとぎ話サーガ(seo)パターン
        12.1.4 タイムトラベルサーガ(sec)パターン
        12.1.5 ファンタジーサーガ(aao)パターン
        12.1.6 ホラーストーリーサーガ(aac)パターン
        12.1.7 パラレルサーガ(aeo)パターン
        12.1.8 アンソロジーサーガ(aec)パターン
    12.2 結果整合性を備えた状態管理
        12.2.1 サーガ状態マシン
    12.3 サーガの管理手法
    12.4 Sysops Squadサーガ:アトミックトランザクションと補償トランザクション

13章 コントラクト
    13.1 厳格なコントラクトと緩いコントラクト
        13.1.1 厳格なコントラクトと緩いコントラクトのトレードオフ
        13.1.2 マイクロサービスにおけるコントラクト
    13.2 スタンプ結合
        13.2.1 スタンプ結合による過結合
        13.2.2 帯域幅
        13.2.3 ワークフロー管理におけるスタンプ結合
    13.3 Sysops Squadサーガ:チケットのコントラクトを管理する

14章 分析データの管理
    14.1 従来のアプローチ
        14.1.1 データウェアハウス
        14.1.2 データレイク
    14.2 データメッシュ
        14.2.1 データメッシュの定義
        14.2.2 データプロダクト量子
        14.2.3 データメッシュ、結合、アーキテクチャ量子
        14.2.4 データメッシュの使いどころ
    14.3 Sysops Squadサーガ:データメッシュ

15章 独自のトレードオフ分析を構築する
    15.1 絡み合う次元の発見
        15.1.1 結合
        15.1.2 結合点の分析
        15.1.3 トレードオフの評価
    15.2 トレードオフ手法
        15.2.1 定性的分析と定量的分析
        15.2.2 MECEリスト
        15.2.3 「コンテキスト外」の罠
        15.2.4 関連するドメインのシナリオをモデル化する
        15.2.5 根拠は示し過ぎず、肝心なものに絞る
        15.2.6 過度な売り込みやエバンジェリズムを避ける
    15.3 Sysops Squadサーガ:エピローグ

付録A 概念や用語の参照
付録B アーキテクチャデシジョンレコードの参照
付録C トレードオフの参照


  1. Pramod Sadalageは『データベース・リファクタリング 』の共著者。Zhamak Dehghaniは注目を集めているデータアーキテクチャのアプローチであるデータメッシュの提唱者。

  2. 日本語で読めるものとしては『JavaScript: The Good Parts』や『Web API: The Good Parts』などがあります。