分散システムデザインパターン (Brendan Burns)
書籍情報
- 著者:Brendan Burns(著), 松浦隼人(訳)
- 発行日:2019-04-09
- ISBN:9784873118758
- URL:https://www.oreilly.co.jp/books/9784873118758/
書籍目次
- まえがき
- 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 まとめ
- 第I部 シングルノードパターン
- I.1 シングルノードパターンを使う理由
- I.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% のアクセスのみ実験用システムに送る
- 3.1 サービスのシャーディングへのアンバサダの利用
- 4章 アダプタ
- 4.1 監視
- 4.1.1 ハンズオン:監視へのPrometheus の利用
- 4.2 ロギング
- 4.2.1 ハンズオン:Fluentd による各種ロギングフォーマットの正規化
- 4.3 ヘルスモニタの追加
- 4.3.1 ハンズオン:MySQL のリッチなステータス監視の追加
- 4.1 監視
- 第II部 マルチノードパターン
- II.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 まとめ
- 5.1 ステートレスなサービス
- 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 ホットシャーディングシステム
- 6.1 シャーディングされたキャッシュ
- 7章 スキャッタ・ギャザー
- 7.1 ルートによる分散とスキャッタ・ギャザー
- 7.1.1 ハンズオン:分散ドキュメント検索
- 7.2 リーフをシャーディングしたスキャッタ・ギャザー
- 7.2.1 ハンズオン:シャーディングされたドキュメント検索
- 7.2.2 適切なリーフ数の決め方
- 7.3 信頼性とスケーラビリティのためのスキャッタ・ギャザーのスケール
- 7.1 ルートによる分散とスキャッタ・ギャザー
- 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 ハンズオン:新規ユーザ登録のパイプライン実装
- 8.1 FaaS を使うべき時の判断
- 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 並列データ操作の扱い
- 第III部 バッチ処理パターン
- 10章 ワークキューシステム
- 10.1 汎用ワークキューシステム
- 10.1.1 ソースコンテナインタフェイス
- 10.1.2 ワーカコンテナインタフェイス
- 10.1.3 共有ワークキュー基盤
- 10.2 ハンズオン:動画サムネイル作成の実装
- 10.3 ワーカの動的スケール
- 10.4 マルチワーカパターン
- 10.1 汎用ワークキューシステム
- 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 のデプロイ
- 11.1 イベント駆動処理のパターン
- 12章 協調的バッチ処理
- 12.1 結合(またはバリア同期)
- 12.2 Reduce
- 12.2.1 ハンズオン:カウント
- 12.2.2 合計
- 12.2.3 ヒストグラム
- 12.3 ハンズオン:画像のタグ付けと処理パイプライン
- 13章 まとめ:新しい始まり?
- 10章 ワークキューシステム
- 訳者あとがき
- 索引