Slide 1

Slide 1 text

Site Reliability Engineering 4th DevOps unit study group Makoto Korenaga 


Slide 2

Slide 2 text

アジェンダ
 1. Googleにおける自動化の進化
 2. リリースエンジニアリング
 3. 単純さ
 
 


Slide 3

Slide 3 text

Googleにおける自動化の進化


Slide 4

Slide 4 text

自動化の価値
 一貫性
 何度も人によって行われるアクションはミスや品質の安定、信頼性という点で問題が ある。
 例)アカウントの作成など


Slide 5

Slide 5 text

自動化の価値
 プラットフォーム
 適切に設計・実装された自動化はその後の自動化基盤(プラットフォーム)となり、間 違いを集約してくれるメリットがある
 


Slide 6

Slide 6 text

自動化の価値
 高速な修復
 システムでよくある障害解決を自動化することにより、MTTR(平均修復時間)を削減 することができる。
 


Slide 7

Slide 7 text

自動化の価値
 時間の節約
 自動化の為のコード化で初期コストはかかるが、その後は手作業での時間削減に繋 がる上に、作業がカプセル化されることにより誰でも実行できるようになる(属人化の 防止)
 


Slide 8

Slide 8 text

自動化のユースケース
 ● ユーザーアカウントの作成
 ● サービス用のクラスタのターンアップおよびターンダウン
 ● ソフトウェアやハードウェアのインストール準備や撤去
 ● 新しいバージョンのソフトウェアのロールアウト
 ● ランタイムの設定変更
 ● ランタイムの設定変更の特殊なケース:依存対象の設定変更


Slide 9

Slide 9 text

自動化の進化
 ● 自動化以前
 データベースマスターのフェイルオーバーが手動で行われる状態
 ● 外部でメンテナンスされるシステム固有の自動化
 SREでフェイルオーバーのスクリプトを持っている状態
 ● 外部でメンテナンスされる汎用の自動化
 誰もが使用する汎用フェイルオーバーのスクリプトに追加されている状態
 ● 内部でメンテナンスされるシステム固有の自動化
 データベース自身にフェイルオーバースクリプトが同梱されている状態
 ● システムが自動化を必要としない
 データベースが問題を検出し、人間の介入なしで自動フェイルオーバーできる状態


Slide 10

Slide 10 text

自分の仕事の自動化:何もかも自動化する
 ● 手動でのフェイルオーバーは人間の時間をかなり消費し、最もうまくいっても99% の可用性しか得られず、ビジネス上の要求を満たせない
 ● エラーバジェット内に収めるには1回のフェイルオーバーによる停止時間を30秒 以内にする必要があった
 フェイルオーバーの自動化
 →フェイルオーバーに止まらずすべてを自動化する


Slide 11

Slide 11 text

リリースエンジニアリング


Slide 12

Slide 12 text

リリースエンジニアの役割
 プロジェクトのリリースが確実に一貫して再現可能な方法で行われるようにする為に ツールの使用方法のベストプラクティスを定義する。
 プロダクトを安全にデプロイしサービスを動作させ続ける為に、SREと協力し、変更の カナリアテスト、サービスの停止なしでの新リリースのプッシュ、問題が生じた機能の ロールバック戦略を開発する。


Slide 13

Slide 13 text

哲学
 ● セルフサービスモデル
 自動化されたビルドシステムとデプロイメントツールの組み合わせでリリースを完全に自動化。
 ● 高速性
 リリースを頻繁に行えるようにしバージョン間の変更をできるだけ少なくする
 ● 密封ビルド
 ビルドツールは一貫性と再現性を持つ。別の開発者が同じコードをビルドした際に同じ結果になる。
 ● ポリシーと手順の強制
 ○ ソースコード変更の承認 
 ○ リリースプロセス間の各手順の指定 
 ○ 新しいリリースの作成とデプロイ 


Slide 14

Slide 14 text

継続的ビルドとデプロイメント
 ● ビルド
 GoogleではBlazeを使用(BazelとしてOSS化)
 ● ブランチ
 ● テスト
 変更が投入される度にユニットテスト実行
 ● パッケージ化
 ● Rapid
 次ページで説明
 ● デプロイメント


Slide 15

Slide 15 text

Rapidアーキテクチャ
 ● リクエストされたリビジョン番号を使い、 リリースブランチ生成 
 ● Blazeを使ってバイナリコンパイルし、ユ ニットテストを実行(並列実行) 
 ● システムテスト、カナリアデプロイメント の実施
 ● 各ステップの結果はロギングされ、リ リース後に変更に関するレポートが作成 される


Slide 16

Slide 16 text

設定管理
 リリースエンジニアとSREが密に協力する領域の一つ
 ● メインラインの設定使用
 ● バイナリと設定ファイルの同梱
 ● 設定ファイルをパッケージ化
 ● 外部ソースからの設定ファイル読み込み
 頻繁に変更が必要だったり、動的な変更をする場合


Slide 17

Slide 17 text

まとめ
 リリースエンジニアリングは初期の段階から始めよう
 ● パッケージのバージョン付けはどうするか? 
 ● 継続的ビルドやデプロイのモデルを採用するか?定期的なビルドが良いか? 
 ● リリース頻度はどれくらいか? 
 ● 設定管理のポリシーはどうするか? 
 ● リリースに関して注目すべきメトリクスは? 
 ● リソース、期間や予算を計画されているか? 


Slide 18

Slide 18 text

単純さ


Slide 19

Slide 19 text

システムの安定性とアジリティ
 安定性を犠牲にしてアジリティを優先させる方が妥当なこともあります
 プロダクションソフトウェアの大部分は安定性とアジリティをバランス良く調整する必 要があります
 SREはソフトウェアの信頼性を高める為の手続き、プラクティス、ツールを作成する為 に働くと同時に開発者のアジリティに与える影響を最小限にとどめる必要もあります


Slide 20

Slide 20 text

退屈の美徳
 ソフトウェアにおいて退屈なのは良いことで、プログラムには定められた通りに動作し 予想通りに作業目標を完遂してもらわなければなりません 必要な複雑さと想定外の複雑さを区別し、想定外の複雑さはエンジニアリングで解決 していくことが重要 ● 受け持っているシステムに想定外の複雑さが生じていたら差し戻す ● 関わっているシステムや運用を受け持つことになるシステムから複雑さを取り除 く努力を継続的に行う

Slide 21

Slide 21 text

単純さを保つ為に
 ● 不要になったコードは削除する(無用な混乱をさせない為) ○ BAD)コメントアウトして残す ○ BAD)フラグで不要なコードを通らなくする ● 最小限のAPI ○ 利用者に提供するメソッドや引数は必要最低限にする ● モジュラー性 ○ バイナリとバイナリ、バイナリと設定を疎結合にし単純にすることにより開発のアジリティとシス テムの安全性を同時に高めてくれる ● リリースの単純さ ○ 複数の変更をまとめてリリースより単一の変更をリリースする方が影響調査しやすい

Slide 22

Slide 22 text

● 時系列データからの実践的な アラート
 ● オンコール対応
 ● 効果的なトラブルシューティン グ
 ● 緊急対応
 
 次回予告 第5回


Slide 23

Slide 23 text

ありがとうございました
 参照:
 SRE
 サイトリライアビリティ 
 エンジニアリング
 Googleの信頼性を支えるエンジニアリングチーム 
 (オライリー・ジャパン)