分散システムデザインパターン
――コンテナを使ったスケーラブルなサービスの設計

[cover photo]
  • 2019年04月 発行
  • 200ページ
  • ISBN978-4-87311-875-8
  • 原書: Designing Distributed Systems
  • フォーマット 本 PDF EPUB

オライリー・ジャパンで書籍を購入:
定価2,860円

Ebook Storeで電子版を購入:
価格2,288円

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

関連書籍

Docker
Infrastructure as Code
詳解 ビットコイン
詳説 データベース
データ指向アプリケーションデザイン
入門 Kubernetes
マスタリング・イーサリアム

まえがき

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章 まとめ:新しい始まり?

訳者あとがき
索引

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]