The Art of SLOs
混沌のなかにこそ 勝機 信頼性あり
— 孫子の兵法 (The Art of War)
https://cre.page.link/art-of-slos-slides
ようこそ!
恥ずかしがらないで・・・
となりの人に やあ ってあいさつしてみよう
https://cre.page.link/art-of-slos-slides
参加者の約束
https://cre.page.link/art-of-slos-slides
もくじ
https://cre.page.link/art-of-slos-slides
Service Level Indicator
サービスの 信頼性 の 定量化できる 尺度
https://cre.page.link/art-of-slos-slides
Service Level Objectives
SLI に対する 信頼性の目標
https://cre.page.link/art-of-slos-slides
ユーザー?お客様?
お客様 というのは、サービスに 直接お金を払う ユーザー
https://cre.page.link/art-of-slos-slides
サービスには SLO が必要
https://cre.page.link/art-of-slos-slides
信じられないって?
「SLO を導入してから、運用と開発チームとの関係が、�わずかだが注目に値するほど改善した」
— Ben McCormack, Evernote; The Site Reliability Workbook, Chapter 3
「... 明確に定義しないことには、いい仕事をすることは難しい。�「いい仕事」を定義するために SLO はことばを与えてくれる」
— Theo Schlossnagle, Circonus; Seeking SRE, Chapter 21
https://cre.page.link/art-of-slos-slides
どんなシステムでも�最も重要な機能は�信頼性
➊
https://cre.page.link/art-of-slos-slides
運用者
安定性
どうやったら
信頼性を
自分ごとにして
もらえるだろう?
開発者
アジリティ
https://cre.page.link/art-of-slos-slides
みんながサービスの望ましい信頼性に
ついて納得できる
原理に基づいた方法
https://cre.page.link/art-of-slos-slides
「信頼性が高い」って?
Netflix, Google 検索, Gmail, Twitter を思い浮かべてみて…
サービスがちゃんと「動いてる」って、どうやって見分ける?
https://cre.page.link/art-of-slos-slides
0 ms
300 ms
200 ms
お客様
“HTTP GET / …”
うーむ
目標
契約
https://cre.page.link/art-of-slos-slides
ついてきてる?
https://cre.page.link/art-of-slos-slides
どういうときにもっと高い信頼性が�必要になるんだろう?
https://cre.page.link/art-of-slos-slides
100%
基本的にどんなときでも 100% は誤った信頼性の目標です
— Benjamin Treynor Sloss, VP 24x7, Google; Site Reliability Engineering, Introduction
https://cre.page.link/art-of-slos-slides
SLO は、ギリギリ達成 できればサービスの典型的なお客様が満足するような、性能や可用性のレベルにすべき
「SLO を満たしている」 ⇒ 「お客様は満足している」
「お客様が不満になる」 ⇒ 「SLO を満たしていない」
https://cre.page.link/art-of-slos-slides
SLO を測って目標をわずかに 超えるようにがんばる...
目標
SLI
https://cre.page.link/art-of-slos-slides
…でも高くしすぎない。ユーザーがそれに頼ってしまう
"Workflow", Randall Munroe, XKCD
Source: https://xkcd.com/1172/
目標
!
SLI
https://cre.page.link/art-of-slos-slides
エラー バジェット
SLO は許容可能なレベルの信頼性の欠如を意味する
これは割り当てることができる予算になる
https://cre.page.link/art-of-slos-slides
実装のしくみ
決められた期間(例: 28 日)における SLO のパフォーマンスを評価
残った予算がエンジニアリング作業の優先順位を決める
https://cre.page.link/art-of-slos-slides
ITIL での近似
SLO を満たしている → ほとんどの運用作業は標準的な変更
SLO を満たさなくなりそう → 通常の変更に戻す
(ごめん、「標準的」と「通常」の違いすらわからない…)
https://cre.page.link/art-of-slos-slides
エラー バジェットは�何に使えばいいの?
https://cre.page.link/art-of-slos-slides
エラー バジェットは
などに使える
https://cre.page.link/art-of-slos-slides
エラー バジェットの利点
https://cre.page.link/art-of-slos-slides
まだついてきてる?
https://cre.page.link/art-of-slos-slides
演習
信頼性の原則
https://cre.page.link/art-of-slos-slides
社員のみなさんへ
先日のシステム障害に対する否定的な報道をうけて、私たち全員が、サービスの信頼性についてもっと真剣に受け止める必要があると確信しました。
この公開書簡では、将来のみなさんの正しい意思決定を促すために、信頼性に関する 3 つの原則を示したいと思います。
https://cre.page.link/art-of-slos-slides
最初の原則は、ユーザーに関することです。私たちは今回ユーザーを失望させてしまいましたが、ユーザーはもっと優遇されるべきです。ユーザーは、私たちのサービスを利用したら、幸せになるべきなのです!
私たちのビジネスは...
https://cre.page.link/art-of-slos-slides
2番目の原則は、サービスの構築方法に関するものです。信頼性を組み込むために、開発プロセスを変更する必要があります。
私たちのビジネスは...
https://cre.page.link/art-of-slos-slides
3番目の原則は、私たちの運用の実践に関するものです。今日私たちがしていることはうまくいきません。運用チームが燃え尽きており、インシデント率が高すぎます。改善するには、別のやりかたで行う必要があります。
私たちのビジネスは...
https://cre.page.link/art-of-slos-slides
これらの原則を実践するために、Google からいくつかのアイデアを借ります。次のステップは、サービスの SLO をいくつか定義し、それらに対するパフォーマンスの測定を開始することです。
読んでくれてありがとう!
Eleanor Exec, CEO
https://cre.page.link/art-of-slos-slides
休憩!
https://cre.page.link/art-of-slos-slides
いい SLI を選ぶ
https://cre.page.link/art-of-slos-slides
https://cre.page.link/art-of-slos-slides
time
不満なユーザー
https://cre.page.link/art-of-slos-slides
時間
時間
指標
指標
BAD
GOOD
https://cre.page.link/art-of-slos-slides
時間
時間
指標
上下していて指標の悪化がわかりにくい
指標
BAD
GOOD
https://cre.page.link/art-of-slos-slides
時間
指標
指標の悪化がサービスで起きる問題と相関する
指標
時間
BAD
GOOD
https://cre.page.link/art-of-slos-slides
時間
時間
指標
指標の S/N 比が悪い
指標は良好な�S/N 比を示す
指標
?
✓
BAD
GOOD
https://cre.page.link/art-of-slos-slides
SLO
SLI
https://cre.page.link/art-of-slos-slides
SLI :
良いイベント
有効なイベント
× 100%
https://cre.page.link/art-of-slos-slides
3–5 SLIs*
* ユーザージャーニーあたり
https://cre.page.link/art-of-slos-slides
SLO
SLI
https://cre.page.link/art-of-slos-slides
ビジネスの視点からみて
どれくらいの�パフォーマンスが
必要だろう?
https://cre.page.link/art-of-slos-slides
ユーザーの期待は
過去のパフォーマンスに
ものすごくひっぱられる
https://cre.page.link/art-of-slos-slides
?
継続的な
改善
https://cre.page.link/art-of-slos-slides
おなかいっぱい?
https://cre.page.link/art-of-slos-slides
SLO と SLI を作る
https://cre.page.link/art-of-slos-slides
?
https://cre.page.link/art-of-slos-slides
みんなのゲーム: Fang Faction
Web サーバー
API サーバー
リーダーボード
プロファイル
ゲーム�サーバー
リーダーボードの�生成
ロード
バランサー
https://cre.page.link/art-of-slos-slides
SomeUser のプロファイル
SomeUser
かえる族�Faction Score: 31337
Midwest Canyon
https://fangfactiongame.com/profile/someuser
チーム: | かえる族 |
リーダー: | SomeUser |
メールアドレス: | user@example.com |
更新
1.
2.
3.
4.
5.
6.
Tri-Bool 65535
Tri Repetae 61995
Triassic Five 52391
Tricksy Hobbits 37164
かえる族 31337
Trite Examples 29243
https://cre.page.link/art-of-slos-slides
プロファイル ページの読み込み
Web サーバー
API サーバー
リーダーボード
プロファイル
ゲーム�サーバー
リーダーボードの�生成
ロード
バランサー
https://cre.page.link/art-of-slos-slides
SLI Menu
リクエスト / レスポンス | 可用性 レイテンシー 品質 |
データ処理 | カバレッジ 正確性 鮮度 スループット |
ストレージ | スループット レイテンシー |
https://cre.page.link/art-of-slos-slides
可用性
レイテンシー
プロファイルページの読み込みに成功する
プロファイルページの読み込みが速い
https://cre.page.link/art-of-slos-slides
可用性
レイテンシー
プロファイルページの読み込みに成功する
プロファイルページの読み込みが速い
https://cre.page.link/art-of-slos-slides
可用性
レイテンシー
有効なリクエストのうち、しきい値よりも速く処理された割合
有効なリクエストのうち、正常に処理された割合
プロファイルページの読み込みに成功する
プロファイルページの読み込みが速い
https://cre.page.link/art-of-slos-slides
可用性
レイテンシー
有効なリクエストのうち、しきい値よりも速く処理された割合
有効なリクエストのうち、正常に処理された割合
プロファイルページの読み込みに成功する
プロファイルページの読み込みが速い
https://cre.page.link/art-of-slos-slides
可用性
レイテンシー
/profile/{user} に対する HTTP GET リクエストのうち、しきい値よりも速く処理された割合
/profile/{user} または /profile/{user}/avatar に対する HTTP GET リクエストのうち、正常に処理された割合
プロファイルページの読み込みに成功する
プロファイルページの読み込みが速い
https://cre.page.link/art-of-slos-slides
可用性
レイテンシー
/profile/{user} に対する HTTP GET リクエストのうち、しきい値よりも速く処理された割合
/profile/{user} または /profile/{user}/avatar に対する HTTP GET リクエストのうち、正常に処理された割合
プロファイルページの読み込みに成功する
プロファイルページの読み込みが速い
https://cre.page.link/art-of-slos-slides
可用性
レイテンシー
/profile/{user} に対する HTTP GET リクエストのうち、X ms の範囲内で処理されたリクエストの割合
/profile/{user} または /profile/{user}/avatar に対する HTTP GET リクエストのうち、ステータスが200番台、300番台 または 400 番台 (excl. 429) を返す割合
プロファイルページの読み込みに成功する
プロファイルページの読み込みが速い
https://cre.page.link/art-of-slos-slides
SLI Menu
測定の戦略 | アプリケーションレベルのメトリックス ログ 処理 フロント エンド インフラのメトリックス 人工的なクライアント/データ クライアント サイド への埋め込み |
https://cre.page.link/art-of-slos-slides
可用性
レイテンシー
ロードバランサーで測定した、/profile/{user} に対する HTTP GET リクエストのうち、X ms の範囲内にレスポンス全体を送信したものの割合
ロードバランサーで測定したステータスが/profile/{user} または /profile/{user}/avatar に対するすべての HTTP GET リクエストのうち、200番台、300 番台または 400 番台 (excl. 429) を返す割合
プロファイルページの読み込みに成功する
プロファイルページの読み込みが速い
https://cre.page.link/art-of-slos-slides
演習
ポストモーテム
https://cre.page.link/art-of-slos-slides
可用性
レイテンシー
ロードバランサーで測定したステータスが、/profile/{user} または /profile/{user}/avatarに対するHTTP GET リクエストのうち、200番台、3XX または 4XX (excl. 429) を返す割合
および
5秒ごとに外形監視で測定される/profile/prober_user 及びリンクのある全てのリソースに対するHTTP GETリクエストのうち "ProberUser"を含む有効なHTMLを返す割合
ロードバランサで測定した、/profile/{user} に対する HTTP GET リクエストのうち、X ms の範囲内にレスポンス全体を送信したものの割合
https://cre.page.link/art-of-slos-slides
SLI は障害モードを網羅している?
API サーバー
リーダーボード
プロファイル
ロード
バランサー
外形監視
可用性
可用性
レイテンシー
ゲーム
サーバー
リーダーボードの�生成
Web サーバー
https://cre.page.link/art-of-slos-slides
演習
SLO の目標値を決める
https://cre.page.link/art-of-slos-slides
ジャーニーの信頼性の目標には何を設定しよう?
サービス | SLO の種類 | 目標 |
Web: プロファイル | 可用性 | |
Web: プロファイル | レイテンシー | |
... | ... | |
過去 28 日で 99.95% 成功
過去 28 日でリクエストの 90% < 500ms
目標には目標値と測定期間の両方がないといけない
https://cre.page.link/art-of-slos-slides
まだ眠くない?
https://cre.page.link/art-of-slos-slides
休憩!
https://cre.page.link/art-of-slos-slides
ワークショップ: SLI と SLO を設定してみよう
これまでの手順に沿って ゲーム内通貨の購入 ジャーニーに取り組もう:
もし終わったら、別のジャーニーにも取り組んでみる
45 分ぐらい でやってみよう
https://cre.page.link/art-of-slos-slides
みんなのゲーム: Fang Faction
Play
Store
Web サーバー
API サーバー
リーダーボード
プロファイル
ゲーム�サーバー
リーダーボードの�生成
ロード
バランサー
https://cre.page.link/art-of-slos-slides
休憩!
https://cre.page.link/art-of-slos-slides
ゲーム内通貨の購入
モデル解答
https://cre.page.link/art-of-slos-slides
ジャーニーの分解
5 つのリクエストとレスポンスのペア
1
2
3
4
5
https://cre.page.link/art-of-slos-slides
ジャーニーの分解
ジャーニーには 2 つの部分がある�A: SKU のフェッチ
1
2
https://cre.page.link/art-of-slos-slides
ジャーニーの分解
ジャーニーには 2 つの部分がある�B: アイテムの購入
3
4
5
https://cre.page.link/art-of-slos-slides
ジャーニーの分解
ユーザーはアイテムを購入しない かもしれない :-(
この部分は別々に考えないといけない!
1
2
https://cre.page.link/art-of-slos-slides
ジャーニーの分解
2 つのリクエストはAPI サーバに 全くヒットしない!
サーバーやロードバランサーのメトリックだとジャーニーを網羅できないかも :-(
2
3
https://cre.page.link/art-of-slos-slides
2
3
ジャーニーの分解
2 つのリクエストはAPI サーバに 全くヒットしない!
サーバーやロードバランサーのメトリックだとジャーニーを網羅できないかも :-(
...クライアントから情報収集するならユーザーに同意を得ないといけない
https://cre.page.link/art-of-slos-slides
購入フロー
どのSLIを使う?
購入フローのジャーニーは
リクエスト/レスポンス
SLI メニューをみると
可用性とレイテンシの SLI
を使えばよさそうだ
https://cre.page.link/art-of-slos-slides
購入フローの可用性
仕様
Bは売上につながるので、そこから始めよう!
可用性SLI の仕様
正常に処理された有効なリクエストの割合
3
4
5
https://cre.page.link/art-of-slos-slides
購入フローの可用性
有効なリクエスト
可用性SLI
正常に処理された有効なリクエストの割合
… どのリクエストが有効なんだろう?
起動する
課金フローが開始されたってことは、ユーザーが購入する意志を示した、ということ
ユーザーがクライアントからの情報収集に同意してくれれば、その意志を捕捉できる
3
https://cre.page.link/art-of-slos-slides
購入フローの可用性
正常の基準
可用性SLI
情報収集に同意したユーザーが開始した課金フロー のうち成功したものの割合
… 成功したことはどうやってわかる?
一連のやりとりが成功するってことだ!
3
4
5
https://cre.page.link/art-of-slos-slides
購入フローの可用性
測定
可用性SLI
情報収集に同意したユーザーが開始した課金フロー のうち成功したものの割合
課金フローは以下を返す
/api/completePurchase は以下を返す
… でも、どこでそれを測定しよう?
3
4
https://cre.page.link/art-of-slos-slides
3
4
購入フローの可用性
測定
可用性SLI
情報収集に同意したユーザーが開始した課金フロー のうち成功したものの割合
課金フローは以下を返す
/api/completePurchase は以下を返す
… でも、どこでそれを測定しよう?
ゲームクライアントで測定して、非同期で報告させよう!
https://cre.page.link/art-of-slos-slides
購入フローのレイテンシ仕様
Bのレイテンシも測定したいよね
レイテンシSLI の仕様
しきい値よりも速く処理された有効なリクエストの割合
3
4
5
https://cre.page.link/art-of-slos-slides
購入フローのレイテンシ�有効なリクエスト
レイテンシSLI
しきい値よりも速く処理された有効なリクエストの割合
… どのリクエストが有効なんだろう?
3 じゃないの?
4
https://cre.page.link/art-of-slos-slides
購入フローのレイテンシ�「遅すぎる」しきい値
レイテンシSLI
しきい値よりも速く処理された/api/completePurchaseリクエストの割合
… で、十分に速いって何だろう?
ざっくり見積もると
https://cre.page.link/art-of-slos-slides
購入フローのレイテンシ�測定
レイテンシSLI
1000ms以内に 処理される/api/completePurchaseリクエストの割合
… で、どこでそれを測定しよう?
いつからいつまでを測る?
https://cre.page.link/art-of-slos-slides
購入フローのレイテンシ�測定
レイテンシSLI
ロードバランサーで測定された
1000ms以内に完全なレスポンス がクライアントに返されている
/api/completePurchasリクエストの割合
https://cre.page.link/art-of-slos-slides
ちょっとだけ宣伝させて...
https://cre.page.link/art-of-slos-slides
https://cre.page.link/art-of-slos-slides
SLO をもっと勉強したい? Coursera のコースを受けてみて:
https://cre.page.link/art-of-slos-slides
この本は HTML なら無料で読めるよ!
https://cre.page.link/art-of-slos-slides
ありがとう!
アンケートにも答えてね!
Insert QR code link
to feedback form
in this space!
Insert QR code link
to feedback form
in this space!
https://cre.page.link/art-of-slos-slides
Q&A
パネリストに質問をどうぞ!
https://cre.page.link/art-of-slos-slides