分散システムデザインパターン

―コンテナを使ったスケーラブルなサービスの設計

[cover photo]
TOPICS
System/Network
発行年月日
PRINT LENGTH
200
ISBN
978-4-87311-875-8
原書
Designing Distributed Systems
FORMAT
Print PDF EPUB
Ebook
2,860円
Ebookを購入する
Print
2,860円

本書は、コンテナを使った分散システムのデザインパターンについて解説する書籍です。コンテナとコンテナオーケストレーションを使うことで、分散システムの設計をパターン化でき、スケーラブルで信頼性の高いサービスをすばやく構築できます。 はじめにシングルノードパターンとして、分散システム内の個別ノード上に存在する再利用可能なパターンやコンポーネントについて説明し、次にWebアプリケーションのように継続的にサービスを提供するシステムを対象にしたマルチノードの分散パターンを紹介します。さらにイベント駆動処理、ワークフローの統合を含む大規模なバッチデータ処理の分散システムパターンを解説します。 可用性の高い分散システムの開発が効率的に行えるパターンを多数紹介する本書は、開発及びインフラエンジニア必携の一冊です。

関連ファイル

目次

まえがき

1章 はじめに
    1.1 システム開発の歴史概観
    1.2 ソフトウェア開発におけるパターンの歴史概観
        1.2.1 アルゴリズムによるプログラミングの形式化
        1.2.2 オブジェクト指向プログラミングのパターン
        1.2.3 オープンソースソフトウェアの隆盛
    1.3 パターン、慣習、コンポーネントの価値
        1.3.1 巨人の肩の上に立つ
        1.3.2 1 つのやり方を議論するための共通言語
        1.3.3 簡単に再利用できる共有コンポーネント
    1.4 まとめ

第Ⅰ部 シングルノードパターン
    Ⅰ.1 シングルノードパターンを使う理由
    Ⅰ.2 まとめ

2章 サイドカー
    2.1 サイドカーの例:レガシーサービスのHTTPS 対応
    2.2 サイドカーによる動的な設定
    2.3 モジュール化されたアプリケーションコンテナ
        2.3.1 ハンズオン:topz コンテナのデプロイ
    2.4 サイドカーを使ったシンプルなPaaS の構築
    2.5 モジュール化と再利用性を考えたサイドカーの設計
        2.5.1 パラメータ化されたコンテナ
        2.5.2 各コンテナのAPI 仕様の設計
        2.5.3 コンテナのドキュメント化
    2.6 まとめ

3章 アンバサダ
    3.1 サービスのシャーディングへのアンバサダの利用
        3.1.1 ハンズオン:シャーディングされたRedis の実装
    3.2 サービスブローカとしての利用
    3.3 新システムの実験的運用やリクエスト分割への利用
        3.3.1 ハンズオン:10% のアクセスのみ実験用システムに送る

4章 アダプタ
    4.1 監視
        4.1.1 ハンズオン:監視へのPrometheus の利用
    4.2 ロギング
        4.2.1 ハンズオン:Fluentd による各種ロギングフォーマットの正規化
    4.3 ヘルスモニタの追加
        4.3.1 ハンズオン:MySQL のリッチなステータス監視の追加

第Ⅱ部 マルチノードパターン
    Ⅱ.1 マイクロサービス入門

5章 レプリカがロードバランスされたサービス
    5.1 ステートレスなサービス
        5.1.1 ロードバランスのためのReadiness Probe
        5.1.2 ハンズオン:Kubernetes 上でのレプリカを使ったサービスの構築
    5.2 セッションを保存するサービス
    5.3 アプリケーションレイヤでレプリカを扱うサービス
    5.4 キャッシュレイヤの導入
        5.4.1 キャッシュのデプロイ
        5.4.2 ハンズオン:キャッシュレイヤのデプロイ
    5.5 キャッシュレイヤの拡張
        5.5.1 帯域制限とDoS 攻撃に対する防御
        5.5.2 SSL 終端
        5.5.3 ハンズオン:nginx とSSL 終端のデプロイ
    5.6 まとめ

6章 シャーディングされたサービス
    6.1 シャーディングされたキャッシュ
        6.1.1 シャーディングされたキャッシュの必要性
        6.1.2 アーキテクチャ内でのキャッシュの役割
        6.1.3 シャーディングされたキャッシュのレプリカ
        6.1.4 ハンズオン:アンバサダのデプロイとシャーディングされたmemcached
    6.2 シャーディング関数を試してみる
        6.2.1 キーの選択
        6.2.2 コンシステントハッシュ関数
        6.2.3 ハンズオン:コンシステントなHTTP シャーディングプロキシの構築
    6.3 シャーディングされたレプリカを使ったシステム
    6.4 ホットシャーディングシステム

7章 スキャッタ・ギャザー
    7.1 ルートによる分散とスキャッタ・ギャザー
        7.1.1 ハンズオン:分散ドキュメント検索
    7.2 リーフをシャーディングしたスキャッタ・ギャザー
        7.2.1 ハンズオン:シャーディングされたドキュメント検索
        7.2.2 適切なリーフ数の決め方
    7.3 信頼性とスケーラビリティのためのスキャッタ・ギャザーのスケール

8章 ファンクションとイベント駆動処理
    8.1 FaaS を使うべき時の判断
        8.1.1 FaaS の利点
        8.1.2 FaaS の課題
        8.1.3 バックグラウンド処理の必要性
        8.1.4 データをメモリに置いておく必要性
        8.1.5 リクエストベースの処理を保持しておくコスト
    8.2 FaaS のパターン
        8.2.1 デコレータパターン:リクエストまたはレスポンスの変換
        8.2.2 ハンズオン:リクエスト処理前のデフォルト値設定
        8.2.3 イベントの扱い
        8.2.4 ハンズオン:2 要素認証の実装
        8.2.5 イベントベースのパイプライン
        8.2.6 ハンズオン:新規ユーザ登録のパイプライン実装

9章 オーナーシップの選出
    9.1 マスタ選出の必要性の判断
    9.2 マスタ選出の基本
        9.2.1 ハンズオン:etcd のデプロイ
        9.2.2 ロックの実装
        9.2.3 ハンズオン:etcd でのロックの実装
        9.2.4 オーナーシップの実装
        9.2.5 ハンズオン:etcd での期間指定付きロックの実装
    9.3 並列データ操作の扱い

第Ⅲ部 バッチ処理パターン

10章 ワークキューシステム
    10.1 汎用ワークキューシステム
        10.1.1 ソースコンテナインタフェイス
        10.1.2 ワーカコンテナインタフェイス
        10.1.3 共有ワークキュー基盤
    10.2 ハンズオン:動画サムネイル作成の実装
    10.3 ワーカの動的スケール
    10.4 マルチワーカパターン

11章 イベント駆動バッチ処理
    11.1 イベント駆動処理のパターン
        11.1.1 コピア
        11.1.2 フィルタ
        11.1.3 スプリッタ
        11.1.4 シャーダ
        11.1.5 マージャ
    11.2 ハンズオン:イベント駆動な新規ユーザ登録フローの構築
    11.3 パブリッシャ・サブスクライバ(pub/sub)基盤
    11.4 ハンズオン:Kafka のデプロイ

12章 協調的バッチ処理
    12.1 結合(またはバリア同期)
    12.2 Reduce
        12.2.1 ハンズオン:カウント
        12.2.2 合計
        12.2.3 ヒストグラム
    12.3 ハンズオン:画像のタグ付けと処理パイプライン

13章 まとめ:新しい始まり?

訳者あとがき
索引