【第8回】SRE本 輪読会 の個人的メモ
Miyaさんの資料
https://docs.google.com/presentation/d/13Y4q18Bixs7ArUMZwmp199M0KhB4fSlhB3cfQd-t-JE/edit#slide=id.p
ここらへんも参考にしながら
7.5 苦痛の緩和:クラスタのターンアップへの自動化の適用
- クラスタを立ち上げるのと同頻度で「チームが立ち上がる」
- 程よいトレーニングになってた
- 依存関係の網の目
- 一つミスると顧客に直影響
- 「12ディスクの最初のディスクを使ってなければ使ってない判定」のロジック
- 案の定「重要なデータが吹き飛ぶ」
- 「安全」シグナルの設計への注意
- 「定型化されていない自由な」スクリプトは「技術負債のコレステロール」
7.5.1 Prodtest での不整合の検出
- 用語
- GFS: Google File System(後のColossus)
- セル: セルはデータセンター内でジョブを実行するマシンの集合単位,平均で1万台構成
- Prodtest: Prouction Testの略
- 「独自スクリプト群」はスケーラビリティが無かった
- サービスの依存対象がすべて利用可能で、適切に設定されているか。
- すべての設定とパッケージは、他の動作環境と一貫しているか。
- 例外的な設定はすべて意図的なものであることを確認できたか。
- prodtestというものを使った
- Pythonのユニットテストフレームワーク拡張
- 「チームのクラスタ名」指定で、サービスをテスト出来る
- 他チームの設定ミスで遅延したら、「Prodtestを拡張する」バグが登録できる
「3ヶ月以内に、5つの新しいクラスタが同日にネットワークの準備完了状態になる。 それらのクラスタを、1週間以内に立ち上げてほしい。」
7.5.2 不整合の冪等な解消
- 用語
- Macine Database: GoogleのDC内のマシンがすべて登録されるデータベース
- Ads : Google AdSense, 広告最適化サービス
- 「設定ミスを見つけるのユニットテスト」を「設定ミスを修正するコード」に
- 「べき等な修正が必要」であるとは
- チームがクラスタの設定にダメージを与える心配なく
- 「修正スクリプト」を15分ごとに実行できる
- どこかのテストでコケても「修正を試みる」
- 複数回コケたら、そこで「失敗」とみなしユーザに通知する
- 問題
- テスト、修正、2回目のテスト「間の」レイテンシで不安定
7.5.3 特化する傾向
- 用語
- インセンティブ : ご褒美
- Admin Server : RPCベースで絶対に証跡の残るエージェント?
- ACL : アクセスコントロールリスト、ユーザと権限の管理
- 不格好な組織的インセンティブを作ってしまった
- 「ターンアップ」は「自動化に向かない」最悪の処理
- セキュテリティ観点から「sshdからRPCベースの管理デーモンへ」の置き換え
- 「誰もログインできない」状態が功を奏し「最悪の処理」から抜け出すことができた
7.5.4 サービス指向のクラスタのターンアップ
- クラスタのターンアップをSOAで行う
- クラスタのTU/TDのRPCを扱うAdminServerの作成も、サービス所有者が受け持つ
- ターンアップの進化
- 運用担当者が開始する手作業のアクション(自動化なし)
- 運用担当者が作成した、システム固有の自動化
- 外部でメンテナンスされる汎用の自動化
- 内部でメンテナンスされるシステム固有の自動化
- 人間による介入を必要としない自律的システム
7.6 Borg :ウェアハウススケールコンピュータの誕生
- 用語
- Google Borg : k8sのご先祖
- クラスタ管理システムの開発の歴史
- ラックに特定用途のマシンを乗っけてた
- 「ゴールデン」バイナリと設定はマスターの中に存在
- クラスタ使い始める
- クラスタ=ドメイン名で管理した
- ゆるい命名則で役割を決めてた
- 並列SSHで管理
- 「リソース(マシン)開放をチケットで知らせてた」時代
- ラックに特定用途のマシンを乗っけてた
- 自動化開始
- シンプルなPythonスクリプト
- サービス管理 : サービスを動作させ続ける(セグフォの後のリスポンなど)
- サービス追跡 : どのサービスがどのマシンで動いてるか
- ログのパース : SSHでマシンに入り正規表現で検索
- 次にデータベースとモニタリングツール
- 故障通知、サービス除去、サーバの修理への配送、戻ってきたマシンへのリストア
- シンプルなPythonスクリプト
- そしてBorg
- クラスタ管理を「集中的なコーディネータ」に発行可能なAPI呼び出しのエントリに変換するという発想
- 非常にわずかな労力を一定量かけるだけで、継続的かつ自動的にOSをアップグレードできるようになりました
- 一定量: 少なくて、その量が変化しないこと(≒人がスケールしない)
- 「興味深い比喩」
- 「他マシンへの再スケジューリング」は「他CPUへのプロセス移動」に似ている
- 上記で考えると「システムが本来持っている機能」であるように思える
- この比喩を使うと…
- Googleのクラスタ -> 地球規模のコンピュータ
- クラスタのターンアップ -> スケジュール割当可能なキャパ追加(RAM,ディスクの追加)
- 自己修復が当たり前
7.7 基本的機能としての信頼性
- 「自動化システムのが壊れたら、運用者はもうそれを直せない」問題
- 「予想される動作」も「実際の動作」とはかけ離れる
- 「本質が隠れ」ても「規模の大小にかかわらず、より自律的な動作を求めるべき」と主張する!
- ※意訳
7.8 自動化のすすめ
- 「そんなん言うても、Googleの規模なったら自動化したええって話でしょ?」
- 2つの理由で間違ってる
- 自動化のメリットは時間の節約だけではない
- 後半ペイ出来る(意訳)
- 「設計段階」に役立つ
- サブシステムの分離、APIの導入、副作用の最小化などの標準的に優れたプラクティス
- 自動化のメリットは時間の節約だけではない
- 2つの理由で間違ってる
コラム「自動化による大規模な障害の発生」
- 用語
- colos : コロケーション設備
- コロケーション : ネットワークへの常時接続環境のもとに、サーバや回線接続装置などを共同の場所に設置する事,ハウジング
- Diskerase : ディスクの自動消去とそれを確認するプロセス
- ”空”が"すべて"と判断される問題
- プログラムによく在る null や ""(から文字) に意味持っちゃった問題かな?
- CDNの「イチ区画」が死んだが、なんとも無かったぜ
疑問(Q)
7.5冒頭
- 「クラスタイフラストラクチャSREチーム」? 10年前にSRE入ってんの?
7.5.1 Prodtest での不整合の検出
- Prodtest(Production Test) …は「本番環境への自動単体(Unit)テスト流し」をイメージすれば良いのかな?
- 「Serviceへのユニットテスト」というところが読まなければならないところかも
- 「アプリを入れる前の仕込み」っぽいやつかな?
- 「他チームの設定ミスで遅延したら、「Prodtestを拡張する」バグが登録できる」ってなんぞ?
7.5.2 不整合の冪等な解消
7.5.3 特化する傾向
- 上の「3つの面」と下の対応がいまいち…うーんって感じ
- 「不格好な組織的インセンティブを作ってしまった」って?
- 価値基準としての「自動化を無視する傾向」の話かな?
7.5.4 サービス指向のクラスタのターンアップ
- クラスタのTU/TDのRPCを扱うAdminServerの作成も、サービス所有者が受け持つ
- 「開発チーム(というのか、サーバにデプロイされてるプロダクトを作ってるチームというか)」が、サーバへの「AdminServer 」の導入も行う、ってことかなぁ?
7.6 Borg:ウェアハウススケールコンピュータの誕生
- 「クラスタ管理を集中的なコーディネータに発行可能なAPい呼び出しのエントリに変換するという発想」ってなんぞ?
- 「マネージャっぽいAPIの口を用意する」「中は見えない(抽象化)」みたいな話かな?