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

Book description

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

Table of contents

  1.  大扉
  2.  原書大扉
  3.  クレジット
  4.  まえがき
  5.   この本を読むべき人
  6.   この本を書いた理由
  7.   分散システムの世界の現在
  8.   この本の構成
  9.   この本で使用する慣例
  10.   オンラインリソース
  11.   サンプルコードの使用
  12.   お問い合わせ
  13.   謝辞
  14.  1章 はじめに
  15.   1.1 システム開発の歴史概観
  16.   1.2 ソフトウェア開発におけるパターンの歴史概観
  17.    1.2.1 アルゴリズムによるプログラミングの形式化
  18.    1.2.2 オブジェクト指向プログラミングのパターン
  19.    1.2.3 オープンソースソフトウェアの隆盛
  20.   1.3 パターン、慣習、コンポーネントの価値
  21.    1.3.1 巨人の肩の上に立つ
  22.    1.3.2 1つのやり方を議論するための共通言語
  23.    1.3.3 簡単に再利用できる共有コンポーネント
  24.   1.4 まとめ
  25. 第Ⅰ部 シングルノードパターン
  26.   Ⅰ.1 シングルノードパターンを使う理由
  27.   Ⅰ.2 まとめ
  28.  2章 サイドカー
  29.   2.1 サイドカーの例:レガシーサービスのHTTPS対応
  30.   2.2 サイドカーによる動的な設定
  31.   2.3 モジュール化されたアプリケーションコンテナ
  32.    2.3.1 ハンズオン:topzコンテナのデプロイ
  33.   2.4 サイドカーを使ったシンプルなPaaSの構築
  34.   2.5 モジュール化と再利用性を考えたサイドカーの設計
  35.    2.5.1 パラメータ化されたコンテナ
  36.    2.5.2 各コンテナのAPI仕様の設計
  37.    2.5.3 コンテナのドキュメント化
  38.   2.6 まとめ
  39.  3章 アンバサダ
  40.   3.1 サービスのシャーディングへのアンバサダの利用
  41.    3.1.1 ハンズオン:シャーディングされたRedisの実装
  42.   3.2 サービスブローカとしての利用
  43.   3.3 新システムの実験的運用やリクエスト分割への利用
  44.    3.3.1 ハンズオン:10%のアクセスのみ実験用システムに送る
  45.  4章 アダプタ
  46.   4.1 監視
  47.    4.1.1 ハンズオン:監視へのPrometheusの利用
  48.   4.2 ロギング
  49.    4.2.1 ハンズオン:Fluentdによる各種ロギングフォーマットの正規化
  50.   4.3 ヘルスモニタの追加
  51.    4.3.1 ハンズオン:MySQLのリッチなステータス監視の追加
  52. 第Ⅱ部 マルチノードパターン
  53.   Ⅱ.1 マイクロサービス入門
  54.  5章 レプリカがロードバランスされたサービス
  55.   5.1 ステートレスなサービス
  56.    5.1.1 ロードバランスのためのReadiness Probe
  57.    5.1.2 ハンズオン:Kubernetes上でのレプリカを使ったサービスの構築
  58.   5.2 セッションを保存するサービス
  59.   5.3 アプリケーションレイヤでレプリカを扱うサービス
  60.   5.4 キャッシュレイヤの導入
  61.    5.4.1 キャッシュのデプロイ
  62.    5.4.2 ハンズオン:キャッシュレイヤのデプロイ
  63.   5.5 キャッシュレイヤの拡張
  64.    5.5.1 帯域制限とDoS攻撃に対する防御
  65.    5.5.2 SSL終端
  66.    5.5.3 ハンズオン:nginxとSSL終端のデプロイ
  67.   5.6 まとめ
  68.  6章 シャーディングされたサービス
  69.   6.1 シャーディングされたキャッシュ
  70.    6.1.1 シャーディングされたキャッシュの必要性
  71.    6.1.2 アーキテクチャ内でのキャッシュの役割
  72.    6.1.3 シャーディングされたキャッシュのレプリカ
  73.    6.1.4 ハンズオン:アンバサダのデプロイとシャーディングされたmemcached
  74.   6.2 シャーディング関数を試してみる
  75.    6.2.1 キーの選択
  76.    6.2.2 コンシステントハッシュ関数
  77.    6.2.3 ハンズオン:コンシステントなHTTPシャーディングプロキシの構築
  78.   6.3 シャーディングされたレプリカを使ったシステム
  79.   6.4 ホットシャーディングシステム
  80.  7章 スキャッタ・ギャザー
  81.   7.1 ルートによる分散とスキャッタ・ギャザー
  82.    7.1.1 ハンズオン:分散ドキュメント検索
  83.   7.2 リーフをシャーディングしたスキャッタ・ギャザー
  84.    7.2.1 ハンズオン:シャーディングされたドキュメント検索
  85.    7.2.2 適切なリーフ数の決め方
  86.   7.3 信頼性とスケーラビリティのためのスキャッタ・ギャザーのスケール
  87.  8章 ファンクションとイベント駆動処理
  88.   8.1 FaaSを使うべき時の判断
  89.    8.1.1 FaaSの利点
  90.    8.1.2 FaaSの課題
  91.    8.1.3 バックグラウンド処理の必要性
  92.    8.1.4 データをメモリに置いておく必要性
  93.    8.1.5 リクエストベースの処理を保持しておくコスト
  94.   8.2 FaaSのパターン
  95.    8.2.1 デコレータパターン:リクエストまたはレスポンスの変換
  96.    8.2.2 ハンズオン:リクエスト処理前のデフォルト値設定
  97.    8.2.3 イベントの扱い
  98.    8.2.4 ハンズオン:2要素認証の実装
  99.    8.2.5 イベントベースのパイプライン
  100.    8.2.6 ハンズオン:新規ユーザ登録のパイプライン実装
  101.  9章 オーナーシップの選出
  102.   9.1 マスタ選出の必要性の判断
  103.   9.2 マスタ選出の基本
  104.    9.2.1 ハンズオン:etcdのデプロイ
  105.    9.2.2 ロックの実装
  106.    9.2.3 ハンズオン:etcdでのロックの実装
  107.    9.2.4 オーナーシップの実装
  108.    9.2.5 ハンズオン:etcdでの期間指定付きロックの実装
  109.   9.3 並列データ操作の扱い
  110. 第Ⅲ部 バッチ処理パターン
  111.  10章 ワークキューシステム
  112.   10.1 汎用ワークキューシステム
  113.    10.1.1 ソースコンテナインタフェイス
  114.    10.1.2 ワーカコンテナインタフェイス
  115.    10.1.3 共有ワークキュー基盤
  116.   10.2 ハンズオン:動画サムネイル作成の実装
  117.   10.3 ワーカの動的スケール
  118.   10.4 マルチワーカパターン
  119.  11章 イベント駆動バッチ処理
  120.   11.1 イベント駆動処理のパターン
  121.    11.1.1 コピア
  122.    11.1.2 フィルタ
  123.    11.1.3 スプリッタ
  124.    11.1.4 シャーダ
  125.    11.1.5 マージャ
  126.   11.2 ハンズオン:イベント駆動な新規ユーザ登録フローの構築
  127.   11.3 パブリッシャ・サブスクライバ(pub/sub)基盤
  128.   11.4 ハンズオン:Kafkaのデプロイ
  129.  12章 協調的バッチ処理
  130.   12.1 結合(またはバリア同期)
  131.   12.2 Reduce
  132.    12.2.1 ハンズオン:カウント
  133.    12.2.2 合計
  134.    12.2.3 ヒストグラム
  135.   12.3 ハンズオン:画像のタグ付けと処理パイプライン
  136.  13章 まとめ:新しい始まり?
  137.  訳者あとがき
  138.  著者紹介
  139.  奥付

Product information

  • Title: 分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計
  • Author(s): Brendan Burns, 松浦 隼人
  • Release date: April 2019
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873118758

You might also like

book

マスタリングLinuxシェルスクリプト 第2版 ―Linuxコマンド、bashスクリプト、シェルプログラミング実践入門

by Mokhtar Ebrahim, Andrew Mallett, 萬谷 暢崇, 原 隆文

Linuxシェルスクリプトの解説書。その中でも特にbashのシェルスクリプティングに焦点を当てています。シェルスクリプトの書き方、デバッグ方法、bashプログラミングの基本といったシェルスクリプティングの基礎から、sedやAWKなど各種ツールとの連携といった実践的な応用までを体系的に解説します。WebサーバーなどのLinuxシステムの管理を任されるようになった初級の管理者にも、もっと高度で実践的なテクニックを必要としている中級の管理者や開発者にも広く役に立つ内容です。

book

詳説 イーサネット 第2版

by Charles E. Spurgeon, Joann Zimmerman, 三浦 史光, 豊沢 聡

イーサネット技術についての解説書。本書では、ファーストイーサネットやギガビットイーサネットなどの従来技術だけでなく、10ギガ、40ギガ、100ギガビットなど最新のイーサネット仕様を詳しく解説します。また、全二重イーサネット、オートネゴシエーション、Power over Ethernet、Energy Efficient Ethernet、構造化ケーブリングシステム、スイッチを用いたネットワークの設計、ネットワーク管理、ネットワークのトラブルシューティングのテクニックなども解説します。ネットワークの設計、監視、保守、障害時対応までを網羅し、信頼性の高いネットワークの構築を支援します。

book

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック

by Dustin Boswell, Trevor Foucher, 角 征典

美しいコードを見ると感動する。優れたコードは見た瞬間に何をしているかが伝わってくる。そういうコードは使うのが楽しいし、自分のコードもそうあるべきだと思わせてくれる。本書の目的は、君のコードを良くすることだ。(本書「はじめに」より) コードは理解しやすくなければならない。本書はこの原則を日々のコーディングの様々な場面に当てはめる方法を紹介します。名前の付け方、コメントの書き方など表面上の改善について。コードを動かすための制御フロー、論理式、変数などループとロジックについて。またコードを再構成するための方法。さらにテストの書き方などについて、楽しいイラストと共に説明しています。日本語版ではRubyやgroongaのコミッタとしても著名な須藤功平氏による解説を収録。

book

ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化

by Ilya Grigorik, 和田 祐一郎/株式会社プログラミングシステム社

現代のアプリケーションエンジニアは、UIやデータ処理、開発言語、プラットフォームの仕様や癖だけでなく、サーバやネットワークについても、上から下まで、表から裏まで広く知ることを求められます。本書は「ブラウザ」に関連し、インターネットで使用されるさまざまなネットワーク技術をまとめたものです。HTTP/2.0やWebRTCなどの最新技術、WebSocketやXMLHttpRequestなどのブラウザAPI、そしてそれらの土台となるTCPやUDPやトランスポート層についてまでを幅広くカバーします。また改善前後の性能・速さを可能な限り具体化し、それぞれの場面においてのパフォーマンス改善幅を示します。