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

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

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

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

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

book

スクラム実践者が知るべき97のこと

by Gunther Verheyen, 吉羽 龍太郎, 原田 騎郎, 永瀬 美穂

アジャイル開発手法のなかで最もよく使われる手法の1つがスクラムです。スクラムは、複雑な問題に取り組むためのシンプルなフレームワークであり、シンプルであるがゆえに実践には要所を押さえるスキルが必要になります。本書は、世界中で活躍するスクラム専門家が自らの経験と知見に基づいて執筆したエッセイ集です。スクラム適用の戦略、スクラムで進める上での戦術やパターン、さまざまな職種のコラボレーション、組織への影響などについて幅広い視点で紹介します。日本語版では、及部 敬雄、小林 恭平(kyon_mm)、高橋 一貴、長沢 智治、平鍋 健児、安井 力(やっとむ)、和田 卓人、永瀬 美穂、原田 騎郎、吉羽 龍太郎による10本の書下ろしを収録。

book

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

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

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

book

行動を変えるデザイン ―心理学と行動経済学をプロダクトデザインに活用する

by Stephen Wendel, 武山 政直, 相島 雅樹, 反中 望, 松村 草也

深津貴之氏推薦!「行動経済学、データ分析、サービス設計のエッセンスが高度に統合された行動変容デザインの良書です」 本書は、行動経済学と心理学をもとに、人々の行動、日常習慣を変える“行動変容”を促すプロダクトをデザインするための書籍です。主にヘルスケア(健康管理)、金融(資産管理)など、これまでITプロダクト(サービス、アプリなど)がなかなか使われてこなかった分野を対象に、ユーザーがやりたいと思っていたものの実行できなかった行動の実現を助けるプロダクトを作り出すための、実践的な視点や知識を提供します。