SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

Book description

GoogleのSREチームの主要メンバーによって書かれた本書は、ソフトウェアのライフサイクル全体にコミットすることで世界最大規模のソフトウェアシステムがどのように構築、導入、監視、維持されているのかを解説します。はじめにリスク管理やサービスレベル目標、リリースエンジニアリングなどSREの行動の基礎となる原則について解説し、次にインシデント管理や障害の根本原因分析、SRE内でのソフトウェア開発など大規模分散コンピューティングシステムを構築し運用するSREの実践について詳述します。急速にスケールするサービスを高い信頼性で運用する方法を解説する本書はエンジニア必携の一冊です。

Table of contents

  1.  大扉
  2.  原書大扉
  3.  クレジット
  4.  本書への推薦の言葉
  5.  監訳者まえがき
  6.   謝辞
  7.  序文
  8.  はじめに
  9.    本書の読み方
  10.   表記
  11.   コードサンプル
  12.   お問い合わせ先
  13.   謝辞
  14. 第Ⅰ部 イントロダクション
  15.  1章 イントロダクション
  16.   1.1 サービス管理へのシステム管理者のアプローチ
  17.   1.2 サービス管理へのGoogleのアプローチ:サイトリライアビリティエンジニアリング
  18.    DevOps? それともSRE?
  19.   1.3 SREの信条
  20.    1.3.1 エンジニアリングへの継続的な注力の保証
  21.    1.3.2 サービスのSLOを下回ることなく、変更の速度の最大化を追求する
  22.    1.3.3 モニタリング
  23.    1.3.4 緊急対応
  24.    1.3.5 変更管理
  25.    1.3.6 需要の予測とキャパシティプランニング
  26.    1.3.7 プロビジョニング
  27.    1.3.8 効率とパフォーマンス
  28.   1.4 始まりの終わり
  29.  2章 SREの観点から見たGoogleのプロダクション環境
  30.   2.1 ハードウェア
  31.   2.2 ハードウェアを「組織化」するシステムソフトウェア
  32.    2.2.1 マシン群の管理
  33.    2.2.2 ストレージ
  34.    2.2.3 ネットワーク
  35.   2.3 他のシステムソフトウェア
  36.    2.3.1 ロックサービス
  37.    2.3.2 モニタリングとアラート
  38.   2.4 Googleのソフトウェアインフラストラクチャ
  39.   2.5 Googleの開発環境
  40.   2.6 シェークスピア:サンプルのサービス
  41.    2.6.1 リクエストのライフサイクル
  42.    2.6.2 ジョブとデータの編成
  43. 第Ⅱ部 原則
  44.   Ⅱ.1 Google SREが推奨する参考文献
  45.  3章 リスクの受容
  46.   3.1 リスクの管理
  47.   3.2 サービスリスクの計測
  48.   3.3 サービスのリスク許容度
  49.    3.3.1 コンシューマサービスにおけるリスク許容度の明確化
  50.    3.3.2 インフラストラクチャサービスのリスク許容度の明確化
  51.   3.4 エラーバジェットの活用
  52.    3.4.1 エラーバジェットの形成
  53.    3.4.2 メリット
  54.    重要な知見
  55.  4章 サービスレベル目標
  56.   4.1 サービスレベルに関する用語
  57.    4.1.1 指標
  58.    4.1.2 目標
  59.    Chubbyのグローバルな計画的サービスの停止
  60.    4.1.3 アグリーメント
  61.   4.2 指標の実際
  62.    4.2.1 サービスの提供者とユーザーの関心事
  63.    4.2.2 指標の収集
  64.    4.2.3 集計
  65.    統計的な誤謬について
  66.    4.2.4 指標の標準化
  67.   4.3 目標の実際
  68.    4.3.1 目標の定義
  69.    4.3.2 ターゲットの選択
  70.    4.3.3 計測値のコントロール
  71.    4.3.4 SLOによる期待の設定
  72.   4.4 アグリーメントの実際
  73.  5章 トイルの撲滅
  74.   5.1 トイルの定義
  75.   5.2 トイルは少ない方が良い理由
  76.    トイルの計算
  77.   5.3 エンジニアリングであるための条件
  78.   5.4 トイルは常に悪なのか?
  79.   5.5 まとめ
  80.  6章 分散システムのモニタリング
  81.   6.1 定義
  82.   6.2 モニタリングの必要性
  83.   6.3 モニタリングにおける妥当な期待値の設定
  84.   6.4 症状と原因
  85.   6.5 ブラックボックスとホワイトボックス
  86.   6.6 4大シグナル
  87.   6.7 テイルレイテンシに関する懸念(あるいはインスツルメンテーションとパフォーマンス)
  88.   6.8 適切な計測の粒度の選択
  89.   6.9 可能な限りシンプルに、ただしやり過ぎないこと
  90.   6.10 原則のとりまとめ
  91.   6.11 長期間にわたるモニタリング
  92.    6.11.1 BigtableのSRE:過剰なアラートの物語
  93.    6.11.2 Gmail:スクリプト化された予測可能なレスポンスの手動送信
  94.    6.11.3 長期的な視点
  95.   6.12 まとめ
  96.  7章 Googleにおける自動化の進化
  97.   7.1 自動化の価値
  98.    7.1.1 一貫性
  99.    7.1.2 プラットフォーム
  100.    7.1.3 高速な修復
  101.    7.1.4 素早いアクション
  102.    7.1.5 時間の節約
  103.   7.2 Google SREにとっての価値
  104.   7.3 自動化のユースケース
  105.    7.3.1 Google SREによる自動化のユースケース
  106.    7.3.2 自動化のクラスの階層
  107.   7.4 自分の仕事の自動化:何もかも自動化する
  108.   7.5 苦痛の緩和:クラスタのターンアップへの自動化の適用
  109.    7.5.1 Prodtestでの不整合の検出
  110.    7.5.2 不整合の冪等な解消
  111.    7.5.3 特化する傾向
  112.    7.5.4 サービス指向のクラスタのターンアップ
  113.   7.6 Borg:ウェアハウススケールコンピュータの誕生
  114.   7.7 基本的機能としての信頼性
  115.   7.8 自動化のすすめ
  116.    自動化による大規模な障害の発生
  117.  8章 リリースエンジニアリング
  118.   8.1 リリースエンジニアの役割
  119.   8.2 哲学
  120.    8.2.1 セルフサービスモデル
  121.    8.2.2 高速性
  122.    8.2.3 密封ビルド
  123.    8.2.4 ポリシーと手順の強制
  124.   8.3 継続的ビルドとデプロイメント
  125.    8.3.1 ビルド
  126.    8.3.2 ブランチ
  127.    8.3.3 テスト
  128.    8.3.4 パッケージ化
  129.    8.3.5 Rapid
  130.    8.3.6 デプロイメント
  131.   8.4 設定管理
  132.   8.5 まとめ
  133.    8.5.1 Googleだけに限った話ではない
  134.    8.5.2 リリースエンジニアリングは初期の段階から始めよう
  135.    さらなる情報
  136.  9章 単純さ
  137.   9.1 システムの安定性とアジリティ
  138.   9.2 退屈の美徳
  139.   9.3 自分のコードはあきらめないぞ!
  140.   9.4 削除した行の計測
  141.   9.5 最小限のAPI
  142.   9.6 モジュラー性
  143.   9.7 リリースの単純さ
  144.   9.8 単純な結論
  145. 第Ⅲ部 実践
  146.   Ⅲ.1 モニタリング
  147.   Ⅲ.2 インシデント対応
  148.   Ⅲ.3 ポストモーテムと根本原因分析
  149.   Ⅲ.4 テスト
  150.    Ⅲ.4.1 キャパシティプランニング
  151.   Ⅲ.5 開発
  152.   Ⅲ.6 プロダクト
  153.   Ⅲ.7 Google SREが推奨する参考文献
  154.  10章 時系列データからの実践的なアラート
  155.   10.1 Borgmonの誕生
  156.    Google以外での時系列データのモニタリング
  157.   10.2 アプリケーションのインスツルメンテーション
  158.    変数のエクスポート
  159.   10.3 エクスポートされたデータの収集
  160.   10.4 時系列のアリーナにおけるストレージ
  161.    10.4.1 ラベルとベクタ
  162.   10.5 ルールの評価
  163.   10.6 アラート
  164.   10.7 モニタリングのトポロジーのシャーディング
  165.   10.8 ブラックボックスモニタリング
  166.   10.9 設定のメンテナンス
  167.   10.10 10年が経過して
  168.  11章 オンコール対応
  169.   11.1 イントロダクション
  170.   11.2 オンコールエンジニアの日常生活
  171.   11.3 バランスの取れたオンコール
  172.    11.3.1 量におけるバランス
  173.    11.3.2 質におけるバランス
  174.    11.3.3 補償
  175.   11.4 安心感
  176.   11.5 不適切な運用負荷の回避
  177.    11.5.1 運用の過負荷
  178.    11.5.2 油断ならない敵:低すぎる運用負荷
  179.   11.6 まとめ
  180.  12章 効果的なトラブルシューティング
  181.   12.1 理論
  182.    一般的な落とし穴
  183.   12.2 実践
  184.    12.2.1 問題のレポート
  185.    シェークスピアサービスに問題発生
  186.    12.2.2 トリアージ
  187.    12.2.3 検証
  188.    ロギング
  189.    シェークスピアのデバッグ
  190.    12.2.4 診断
  191.    症状の原因を解きほぐす
  192.    12.2.5 テストと対応
  193.   12.3 否定的な結果の素晴らしさ
  194.    12.3.1 対策
  195.   12.4 ケーススタディ
  196.   12.5 トラブルシューティングを容易にするために
  197.   12.6 まとめ
  198.  13章 緊急対応
  199.   13.1 システムが壊れた際に行うこと
  200.   13.2 テストによって引き起こされた緊急事態
  201.    13.2.1 詳細
  202.    13.2.2 レスポンス
  203.    13.2.3 障害から分かったこと
  204.   13.3 変更が引き起こした緊急事態
  205.    13.3.1 詳細
  206.    13.3.2 対応
  207.    13.3.3 障害から分かったこと
  208.   13.4 プロセスが引き起こした緊急事態
  209.    13.4.1 詳細
  210.    13.4.2 対応
  211.    13.4.3 障害から分かったこと
  212.   13.5 解決できない問題は存在しない
  213.   13.6 過去から学び、繰り返さない
  214.    13.6.1 サービス障害の歴史を残す
  215.    13.6.2 大きな、むしろありそうもない問いかけをしてみよう
  216.    13.6.3 予防的なテストのすすめ
  217.   13.7 まとめ
  218.  14章 インシデント管理
  219.   14.1 管理されていないインシデント
  220.   14.2 管理されていないインシデントの詳細分析
  221.    14.2.1 技術的な問題への極端な集中
  222.    14.2.2 貧弱なコミュニケーション
  223.    14.2.3 勝手な動き
  224.   14.3 インシデント管理のプロセスの構成要素
  225.    14.3.1 責任の再帰的な分離
  226.    14.3.2 明確な司令所
  227.    14.3.3 ライブインシデント状況ドキュメント
  228.    14.3.4 はっきりとした引き継ぎ
  229.   14.4 管理されたインシデント
  230.   14.5 インシデントと宣言すべき場合
  231.   14.6 まとめ
  232.    インシデント管理のためのベストプラクティス
  233.  15章 ポストモーテムの文化:失敗からの学び
  234.   15.1 Googleにおけるポストモーテムの哲学
  235.    ベストプラクティス:非難を避け、建設的であり続けること
  236.   15.2 コラボレーションと知識の共有
  237.    ベストプラクティス:ポストモーテムをレビューされないままにはしない
  238.   15.3 ポストモーテムの文化の導入
  239.    ベストプラクティス:正しいことを行った人には目に見える報酬を
  240.    ベストプラクティス:ポストモーテムの効果に対するフィードバックを求める
  241.   15.4 まとめと改善の継続
  242.  16章 サービス障害の追跡
  243.   16.1 Escalator
  244.   16.2 Outalator
  245.    独自のOutalatorを作りましょう
  246.    16.2.1 集計
  247.    16.2.2 タグ付け
  248.    16.2.3 分析
  249.    16.2.4 予想外のメリット
  250.  17章 信頼性のためのテスト
  251.    テストと平均修復時間との関係
  252.   17.1 ソフトウェアテストの種類
  253.    17.1.1 伝統的なテスト
  254.    17.1.2 プロダクションテスト
  255.    ロールアウトがテストを複雑にする
  256.   17.2 テストの作成と環境の構築
  257.   17.3 大規模なテスト
  258.    17.3.1 スケーラブルなツールのテスト
  259.    リスクのあるソフトウェアに対するバリア
  260.    17.3.2 ディザスタのテスト
  261.    統計的なテストの利用
  262.    17.3.3 速度の重要性
  263.    テストのタイムリミット
  264.    17.3.4 プロダクションへのプッシュ
  265.    17.3.5 予想されるテストの失敗
  266.    非常ボタンとテスト
  267.    17.3.6 結合
  268.    17.3.7 プロダクション環境におけるプローブ
  269.    偽のバックエンドのバージョン
  270.   17.4 まとめ
  271.  18章 SREにおけるソフトウェアエンジニアリング
  272.   18.1 SRE内でのソフトウェアエンジニアリングの重要性
  273.   18.2 Auxonのケーススタディ:プロジェクトの背景と問題の領域
  274.    18.2.1 旧来のキャパシティプランニング
  275.    18.2.2 Googleにおけるソリューション:インテントベースのキャパシティプランニング
  276.   18.3 インテントベースのキャパシティプランニング
  277.    18.3.1 インテントを示すもの
  278.    18.3.2 Auxonの紹介
  279.    18.3.3 要求と実装:成功と学んだこと
  280.    18.3.4 認知の向上と採用の推進
  281.    18.3.5 チームの力学
  282.   18.4 SREにおけるソフトウェアエンジニアリングの推進
  283.    18.4.1 SREにおけるソフトウェアエンジニアリング文化の構築の成功:採用と開発期間
  284.    18.4.2 達成
  285.   18.5 まとめ
  286.  19章 フロントエンドにおけるロードバランシング
  287.   19.1 パワーは解答にあらず
  288.   19.2 DNSを使ったロードバランシング
  289.   19.3 仮想IPアドレスでのロードバランシング
  290.  20章 データセンターでのロードバランシング
  291.   20.1 理想的なケース
  292.   20.2 不良タスクの特定:フロー制御とレイムダック
  293.    20.2.1 健全ではないタスクに対するシンプルなアプローチ:フロー制御
  294.    20.2.2 不健全なタスクへの確実なアプローチ:レイムダック状態
  295.   20.3 サブセットの設定によるコネクションプールの制限
  296.    20.3.1 適切なサブセットの選択
  297.    20.3.2 サブセットの選択アルゴリズム:ランダムなサブセットの選択
  298.    20.3.3 サブセット選択のアルゴリズム:決定的なサブセット選択
  299.   20.4 ロードバランシングのポリシー
  300.    20.4.1 シンプルなラウンドロビン
  301.    20.4.2 最小負荷ラウンドロビン
  302.    20.4.3 重み付きラウンドロビン
  303.  21章 過負荷への対応
  304.   21.1 「クエリ/秒」の落とし穴
  305.   21.2 顧客単位での制限
  306.   21.3 クライアント側でのスロットリング
  307.   21.4 重要度
  308.   21.5 利用率のシグナル
  309.   21.6 過負荷によるエラーへの対応
  310.    21.6.1 リトライの判断
  311.   21.7 接続によって生じる負荷
  312.   21.8 まとめ
  313.  22章 カスケード障害への対応
  314.   22.1 カスケード障害の原因及び回避のための設計
  315.    22.1.1 サーバーの過負荷
  316.    22.1.2 リソースの枯渇
  317.    22.1.3 利用できないサービス
  318.   22.2 サーバーの過負荷の回避
  319.    22.2.1 キューの管理
  320.    22.2.2 ロードシェディングとグレースフルデグラデーション
  321.    22.2.3 リトライ
  322.    22.2.4 レイテンシとタイムアウト
  323.   22.3 起動直後の低パフォーマンスとコールドキャッシュ
  324.    22.3.1 スタックは常に下っていくようにすること
  325.   22.4 カスケード障害を引き起こす条件
  326.    22.4.1 プロセスの停止
  327.    22.4.2 プロセスのアップデート
  328.    22.4.3 ロールアウト
  329.    22.4.4 自然な利用の増大
  330.    22.4.5 計画済みの変更、ドレイン、ターンダウン
  331.   22.5 カスケード障害に備えるためのテスト
  332.    22.5.1 テストによる障害の発生とその後の観察
  333.    22.5.2 一般的なクライアントのテスト
  334.    22.5.3 重要度の低いバックエンドのテスト
  335.   22.6 カスケード障害に対応するためにすぐに行うべき手順
  336.    22.6.1 リソースの追加
  337.    22.6.2 ヘルスチェックが障害を引き起こさないようにする
  338.    22.6.3 サーバーの再起動
  339.    22.6.4 トラフィックのドロップ
  340.    22.6.5 デグレーデッドモードへの移行
  341.    22.6.6 バッチの負荷の排除
  342.    22.6.7 問題のあるトラフィックの排除
  343.    カスケード障害とシェークスピア
  344.   22.7 まとめ
  345.  23章 クリティカルな状態の管理:信頼性のための分散合意
  346.    CAP定理
  347.   23.1 合意を利用する目的:分散システムの協調障害
  348.    23.1.1 ケーススタディ1:スプリットブレイン問題
  349.    23.1.2 ケーススタディ2:人間の介入を必要とするフェイルオーバー
  350.    23.1.3 ケーススタディ3:問題のあるグループメンバーシップアルゴリズム
  351.   23.2 分散合意の動作
  352.    23.2.1 Paxosの概要:サンプルのプロトコル
  353.   23.3 分散合意のためのシステムアーキテクチャパターン
  354.    23.3.1 信頼性を持つ複製ステートマシン
  355.    23.3.2 信頼性を持つ複製データストア及び設定ストア
  356.    23.3.3 リーダー選出を利用する高可用性を持つ処理
  357.    23.3.4 分散協調及びロックサービス
  358.    23.3.5 信頼性を持つ分散キュー及びメッセージング
  359.   23.4 分散合意のパフォーマンス
  360.    23.4.1 Multi-Paxos:詳細なメッセージフロー
  361.    23.4.2 読み取り負荷が大きいワークロードのスケーリング
  362.    23.4.3 クォーラムのリース
  363.    23.4.4 分散合意のパフォーマンスとネットワークのレイテンシ
  364.    23.4.5 パフォーマンスに関する考察:Fast Paxos
  365.    23.4.6 安定したリーダー
  366.    23.4.7 バッチ処理
  367.    23.4.8 ディスクアクセス
  368.   23.5 分散合意ベースのシステムのデプロイ
  369.    23.5.1 レプリカ数
  370.    23.5.2 レプリカの配置
  371.    23.5.3 キャパシティとロードバランシング
  372.   23.6 分散合意システムのモニタリング
  373.   23.7 まとめ
  374.  24章 cronによる分散定期スケジューリング
  375.   24.1 cron
  376.    24.1.1 イントロダクション
  377.    24.1.2 信頼性という観点
  378.   24.2 cronジョブと冪等性
  379.   24.3 大規模環境におけるcron
  380.    24.3.1 拡張されたインフラストラクチャ
  381.    24.3.2 拡張された要求
  382.   24.4 Googleにおけるcronの構築
  383.    24.4.1 cronジョブの状態の追跡
  384.    24.4.2 Paxosの利用
  385.    24.4.3 リーダーとフォロワーの役割
  386.    24.4.4 状態の保存
  387.    24.4.5 大規模なcronの実行
  388.   24.5 まとめ
  389.  25章 データ処理のパイプライン
  390.   25.1 パイプラインのデザインパターンの起源
  391.   25.2 シンプルなパイプラインパターンでのビッグデータの初期の効果
  392.   25.3 定期的なパイプラインパターンでの課題
  393.   25.4 不均衡な負荷の配分によるトラブル
  394.   25.5 分散環境における定期パイプラインの欠点
  395.    25.5.1 定期パイプラインにおけるモニタリングの問題
  396.    25.5.2 “Thundering Herd”問題
  397.    25.5.3 モアレ負荷パターン
  398.   25.6 Google Workflowの紹介
  399.    25.6.1 Model-View-ControllerパターンとしてのWorkflow
  400.   25.7 Workflowにおける実行のステージ
  401.    25.7.1 Workflowの正しさの保証
  402.   25.8 ビジネスの継続性の保証
  403.   25.9 まとめ、そして終わりに
  404.  26章 データの完全性:What You Read Is What You Wrote
  405.   26.1 データの完全性への厳格な要求
  406.    26.1.1 データ完全性をきわめて高くするための戦略の選択
  407.    26.1.2 バックアップとアーカイブ
  408.    26.1.3 大局的な視点から見たクラウド環境の要件
  409.   26.2 データの完全性及び可用性の管理におけるGoogle SREの目標
  410.    26.2.1 データの完全性は手段であり、目標とするのはデータの可用性である
  411.    26.2.2 バックアップシステムよりもリカバリのシステムを提供しよう
  412.    26.2.3 データの損失につながる障害の種類
  413.    26.2.4 深く、そして広くデータの完全性を管理することの難しさ
  414.   26.3 データ完全性の課題へのGoogle SREの対処
  415.    26.3.1 データ完全性の障害の形態の24種の組み合わせ
  416.    26.3.2 第1のレイヤー:論理削除
  417.    26.3.3 第2のレイヤー:バックアップと関連するリカバリの方法
  418.    26.3.4 包括的な階層:レプリケーション
  419.    26.3.5 テラバイト対エクサバイト:大きい「だけ」ではなくなるバックアップ
  420.    26.3.6 第3のレイヤー:早期の検出
  421.    26.3.7 データリカバリがうまくいくことの確認
  422.   26.4 ケーススタディ
  423.    26.4.1 Gmail - 2011年2月:GTapeからのリストア
  424.    26.4.2 Google Music - 2012年3月:暴走した削除の検出
  425.   26.5 データの完全性に対するSREの一般原則の適用
  426.    26.5.1 初心者の心構えを忘れないこと
  427.    26.5.2 信頼しつつも検証を
  428.    26.5.3 願望は戦略にあらず
  429.    26.5.4 多層防御
  430.    振り返りと再検証
  431.   26.6 まとめ
  432.  27章 大規模なプロダクトのローンチにおける信頼性
  433.   27.1 ローンチ調整エンジニアリング
  434.    27.1.1 ローンチ調整エンジニアの役割
  435.   27.2 ローンチプロセスのセットアップ
  436.    27.2.1 ローンチチェックリスト
  437.    27.2.2 収束と単純化の推進
  438.    27.2.3 予想外のローンチ
  439.   27.3 ローンチチェックリストの開発
  440.    27.3.1 アーキテクチャと依存関係
  441.    27.3.2 統合
  442.    27.3.3 キャパシティプランニング
  443.    27.3.4 障害の形態
  444.    27.3.5 クライアントの動作
  445.    27.3.6 プロセスと自動化
  446.    27.3.7 開発のプロセス
  447.    27.3.8 外部の依存対象
  448.    27.3.9 ロールアウトの計画
  449.   27.4 信頼性のあるローンチのためのテクニック
  450.    27.4.1 逐次的かつ段階的なロールアウト
  451.    27.4.2 機能フラグフレームワーク
  452.    27.4.3 攻撃的なクライアントの挙動への対処
  453.    27.4.4 過負荷時の挙動とロードテスト
  454.   27.5 LCEの発展
  455.    27.5.1 LCEチェックリストの進化
  456.    27.5.2 LCEが解決しなかった問題
  457.   27.6 まとめ
  458. 第Ⅳ部 管理
  459.   Ⅳ.1 Google SREが推奨する参考文献
  460.  28章 SREの成長を加速する方法:新人からオンコール担当、そしてその先へ
  461.   28.1 自分の後継SRE(たち)を雇用した後にすべきことは?
  462.   28.2 初期の学習経験:混沌ではなく構造を提供する
  463.    28.2.1 順序立てて積み重ねる学習の道筋
  464.    28.2.2 単純作業ではなく、目的のはっきりしたプロジェクトの作業を受け持ってもらうこと
  465.   28.3 優れたリバースエンジニアリングと柔軟な思考の育成
  466.    28.3.1 リバースエンジニアリング:システムの動作を理解する
  467.    28.3.2 統計的及び比較的思考:プレッシャーの下での科学的手法の活用
  468.    28.3.3 即興の芸術家:予想外の事態への対応
  469.    28.3.4 総合的なトレーニング:プロダクションサービスのリバースエンジニアリング
  470.   28.4 上を目指すオンコール担当者の5つのプラクティス
  471.    28.4.1 障害への渇望:ポストモーテムの読み込みと共有
  472.    28.4.2 ディザスタロールプレイング
  473.    28.4.3 本物の破壊と修復
  474.    28.4.4 徒弟関係としてのドキュメンテーション
  475.    28.4.5 早期からの頻繁なオンコールのシャドウイング
  476.   28.5 オンコールの担当、そしてその先:通過儀礼と継続的な教育の実践
  477.   28.6 まとめ
  478.  29章 割り込みへの対処
  479.   29.1 運用負荷の管理
  480.   29.2 割り込みへの対処を決定する要素
  481.   29.3 不完全なマシン
  482.    29.3.1 認知的フロー状態
  483.    29.3.2 1つのことをうまく行う
  484.    29.3.3 真剣な解決策
  485.    29.3.4 割り込みの削減
  486.  30章 SREの投入による運用過負荷からのリカバリ
  487.   30.1 フェーズ1:サービスの学習と状況の把握
  488.    運用モードと非線形のスケーリング
  489.    30.1.1 最大のストレス発生源の特定
  490.    30.1.2 発火点の特定
  491.   30.2 フェーズ2:状況の共有
  492.    30.2.1 チームのために良いポストモーテムを書く
  493.    30.2.2 火事を種類別に並べる
  494.   30.3 フェーズ3:変化の推進
  495.    30.3.1 基本からのスタート
  496.    30.3.2 発火点の掃除の手助けを求める
  497.    30.3.3 根拠を説明すること
  498.    30.3.4 導く質問を投げかけること
  499.   30.4 まとめ
  500.  31章 SREにおけるコミュニケーションとコラボレーション
  501.   31.1 コミュニケーション:プロダクションミーティング
  502.    31.1.1 アジェンダ
  503.    31.1.2 出席者
  504.   31.2 SRE内でのコラボレーション
  505.    31.2.1 チームの構成
  506.    31.2.2 効率的な作業のための手法
  507.   31.3 SRE内でのコラボレーションのケーススタディ:Viceroy
  508.    31.3.1 Viceroy登場
  509.    31.3.2 課題
  510.    31.3.3 推奨事項
  511.   31.4 SRE外でのコラボレーション
  512.   31.5 ケーススタディ:DFPにおけるF1へのマイグレーション
  513.   31.6 まとめ
  514.  32章 進化するSREのエンゲージメントモデル
  515.   32.1 SREのエンゲージメント:その対象、方法、理由
  516.   32.2 PRRモデル
  517.   32.3 SREのエンゲージメントモデル
  518.    32.3.1 代替サポート
  519.   32.4 プロダクションレディネスレビュー:単純PRRモデル
  520.    32.4.1 エンゲージメント
  521.    32.4.2 分析
  522.    32.4.3 改善とリファクタリング
  523.    32.4.4 トレーニング
  524.    32.4.5 オンボーディング
  525.    32.4.6 継続的な改善
  526.    シェークスピアサービスとのエンゲージメント
  527.   32.5 単純PRRモデルの進化形:早期エンゲージメント
  528.    32.5.1 早期エンゲージメントの候補
  529.    32.5.2 早期エンゲージメントモデルのメリット
  530.   32.6 進化するサービス開発:フレームワークとSREプラットフォーム
  531.    32.6.1 学んだ教訓
  532.    32.6.2 SREに影響を及ぼす外部要因
  533.    32.6.3 構造的なソリューション:フレームワーク化に向かって
  534.    32.6.4 サービスや管理に関する新たなメリット
  535.   32.7 まとめ
  536. 第V部 まとめ
  537.  33章 他の業界からの教訓
  538.   33.1 業界のベテランたち
  539.   33.2 準備とディザスタテスト
  540.    33.2.1 安全への徹底した組織的集中
  541.    33.2.2 細部への注意
  542.    33.2.3 余剰キャパシティ
  543.    33.2.4 シミュレーションと実地訓練
  544.    33.2.5 トレーニングと認定
  545.    33.2.6 詳細な要求の収集と設計への集中
  546.    33.2.7 広範囲にわたる多層防御
  547.   33.3 ポストモーテムの文化
  548.   33.4 反復業務と運用のオーバーヘッドの自動化
  549.   33.5 構造化された合理的判断
  550.   33.6 まとめ
  551.  34章 まとめ
  552.  付録A 可用性の一覧
  553.  付録B プロダクションサービスのためのベストプラクティス
  554.   B.1 処理の適切な中止
  555.    事例
  556.   B.2 段階的なロールアウト
  557.   B.3 SLOの定義はユーザーの観点で
  558.    事例
  559.   B.4 エラーバジェット
  560.   B.5 モニタリング
  561.   B.6 ポストモーテム
  562.   B.7 キャパシティプランニング
  563.   B.8 過負荷と障害
  564.   B.9 SREチーム
  565.  付録C インシデント状況ドキュメントの例
  566.  付録D ポストモーテムの例
  567.    教訓
  568.    タイムライン
  569.    参考情報
  570.  付録E ローンチ調整チェックリスト
  571.  付録F プロダクションミーティングの議事録の例
  572.  参考文献
  573.  訳者あとがき
  574.  編者、監訳者、訳者紹介
  575.  カバーの説明
  576.  奥付

Product information

  • Title: SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム
  • Author(s): Betsy Beyer, Chris Jones, Jennifer Petoff, Niall Richard Murphy, 澤田 武男, 関根 達夫, 細川 一茂, 矢吹 大輔, Sky株式会社 玉川 竜司
  • Release date: August 2017
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873117911

You might also like

book

脳に収まるコードの書き方 ―複雑さを避け持続可能にするための経験則とテクニック

by Mark Seemann, 吉羽 龍太郎, 原田 騎郎, Robert C. Martin

ソフトウェアは複雑さを増すばかりですが、人間の脳は限られた複雑さしか扱えません。ソフトウェアが思い通りに動くようするには、脳に収まり、人間が理解できるコードを書く必要があります。 本書は、拡張を続けても行き詰ることなくコードを書き、複雑さを回避するための実践的な方法を解説します。最初のコードを書き始めるところから機能を追加していくところまでを解説し、効率的で持続可能なペースを保ちながら、横断的な問題への対処やトラブルシューティング、最適化を行なう方法を説明します。自分のチェックリストからチームワーク、カプセル化から分解、API設計から単体テストまで、ソフトウエア開発の重要な課題に対する考え方やテクニックを紹介します。サンプルプロジェクトで使うコードは、Gitリポジトリの形で入手でき、試しながら学べます。 有効に機能するプロセスを選び、効果のない方法論から脱却する方法。チェックリストを使うことで、すでに持っているスキルを活用する方法。アプリケーションのバーティカルスライス(ひとつの機能をUIからバックエンドまで一通り実装したもの)を作成しデプロイすることで、分析による停滞から脱却する方法を学びます。さらに、コードの腐敗や不必要な複雑さにつながる要因を避ける方法、コードの振る舞いを変更するためのテクニック、コードの問題を迅速かつ効果的に解決する方法について解説します。

book

詳説 イーサネット 第2版

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

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

book

詳解 システム・パフォーマンス 第2版

by Brendan Gregg, 西脇 靖紘, 長尾 高弘

本書は、エンタープライズとクラウド環境を対象としたオペレーティングシステムとアプリケーションのパフォーマンス分析と向上について解説します。 主にLinuxベースのオペレーティングシステムに含まれるツールとその使用例を通じてシステムパフォーマンスを引き出す手法を説明します。システム評価のためのベンチマーク、キャパシティプランニング、ボトルネックの解消について解説しスケーラビリティを制限する要因を発見、分析し、解決する方法を学びます。 第2版では、perf、Ftrace、BPFの解説が加わり、Linuxとクラウドコンピューティングについての説明が充実しました。 システムのパフォーマンスを向上させ、コストを削減し、レイテンシの外れ値を減らすための方法を学ぶ本書はエンジニア必携の一冊です。

book

データベースリライアビリティエンジニアリング ―回復力のあるデータベースシステムの設計と運用

by Laine Campbell, Charity Majors, 八木 和生

テクノロジーの進化に合わせて、データベースもまた進化しています。従来のパフォーマンス、スケーラビリティが重要なことはもちろん、今日ではセキュリティ、インフラのコード化、CI/CD、クラウド活用といったタスクにも取り組んでいかなければなりません。 データベースの本質は、長期的に安定していること。つまりリライアビリティ(信頼性)です。時代とともにアーキテクチャやツールが変わってもこの原則は変わりません。本書はデータベースのリライアビリティを実現するための考え方を「データベースリライアビリティエンジニアリング」と定義して、その具体的な手法を紹介します。サービスのリライアビリティに関わるすべてのエンジニア必読の一冊です。