内容紹介
コンテナを使った分散システムの設計と実装について解説 !
本書は、コンテナを使った分散システムのデザインパターンについて解説する書籍です。コンテナとコンテナオーケストレーションを使うことで、分散システムの設計をパターン化でき、スケーラブルで信頼性の高いサービスをすばやく構築できます。 はじめにシングルノードパターンとして、分散システム内の個別ノード上に存在する再利用可能なパターンやコンポーネントについて説明し、次に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章 まとめ:新しい始まり?
訳者あとがき
索引
続きを見る