Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Chapter 2. Implementing SLOs
Search
coffee
January 06, 2025
12
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Chapter 2. Implementing SLOs
coffee
January 06, 2025
More Decks by coffee
See All by coffee
Chapter 2. Implementing SLOs (2)
tai25011601
0
4
Chapter 3. SLO Engineering Case Studies
tai25011601
0
5
SRW - Chapter 4. Monitoring
tai25011601
0
8
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
What's in a price? How to price your products and services
michaelherold
247
13k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
New Earth Scene 8
popppiees
4
2.7k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
620
Product Roadmaps are Hard
iamctodd
55
13k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Amusing Abliteration
ianozsvald
1
350
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
480
How to train your dragon (web standard)
notwaldorf
96
6.9k
Mind Mapping
helmedeiros
1
400
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Transcript
Chapter 2. Implementing SLOs 1
SLOとエラーバジェットの基礎と実践 サービス信頼性を向上させるためのアプローチ 2
アジェンダ 1. SLOとエラーバジェットの概要 2. なぜSREにSLOが必要か 3. SLOの設定方法 4. SLIの選定と実装 5.
SLOの運用と改善 6. エラーバジェットの活用事例 7. 高度なトピック 8. まとめと次のステップ 3
1. SLOとエラーバジェットの概要 4
SLO(サービスレベル目標)とは サービスの信頼性に関する目標値を定義したもの。 ユーザーが期待する品質基準を設定(例: 99.9%のリクエスト成功率)。 SLOを基にエンジニアリングリソースの優先順位を決定。 5
SLOの具体例 HTTPリクエストの成功率: 99.9% レイテンシ: 90%のリクエストが100ms未満 データ新鮮度: 98%のリクエストが10分以内の最新データを取得 6
エラーバジェットとは 定義: SLOの目標値に基づき、許容される失敗やエラーの余地を定量化。 例: 0.1%の失敗許容(99.9%のSLOであれば0.1%がエラーバジェット)。 役割: i. 信頼性向上と新機能開発の優先順位決定をサポート。 ii. 問題発生時のリスク許容範囲を提供。
iii. チーム間での合意形成を促進。 7
信頼性と機能開発のバランス 課題: 100%信頼性は現実的でなく、コスト効率も悪い。 トレードオフ: 信頼性を高めすぎると、機能開発が停滞する。 信頼性を下げすぎると、ユーザー体験が損なわれる。 8
信頼性と機能開発のバランス(例) トレードオフの視覚化 信頼性が高いほど追加コストが増加(図示) 機能開発のスピードと信頼性向上のバランスを取る 9
エラーバジェット活用例 1. インシデント対応: 信頼性の低下が発生した際、エラーバジェットの消費を確認して対応の優先 順位を決定。 2. 新機能開発: エラーバジェットの残量に応じてリリース頻度を調整。 3. プロジェクト管理:
エラーバジェットを使い果たした場合、リリースを停止し、信頼性改善に集 中。 10
2. なぜSREにSLOが必要か 11
限られたリソースを効果的に配分するための重要性 SLOは、エンジニアリングリソースを最適に活用するための基準。 機能開発と信頼性改善のトレードオフを数値で明確化。 例: 新機能を開発するか、障害対応に集中するかをSLOを基に判断。 SLOがない場合のリスク 1. 信頼性の判断が曖昧 どの程度の信頼性が必要か分からず、過剰設計や信頼性不足を招く。 例:
目標が不明確なため、対応優先順位が決まらない。 2. 組織内の混乱 開発チームと運用チームで期待値の認識がズレる。 プロジェクト進行が不透明に。 12
SLOがない場合の具体例 事例1: リソースの浪費 開発チームが信頼性向上に注力しすぎ、機能開発が停滞。 ユーザーにとって重要な部分にリソースが投入されない。 事例2: インシデント対応の非効率 障害対応の基準がなく、緊急性が低い問題に過剰対応。 結果、重要な障害対応が後回しになる。 13
まとめ SLOの有無で生まれる違い: 限られたリソースの効果的活用。 チーム間の認識合わせと優先順位の明確化。 信頼性向上と新機能開発のバランスを数値化。 SLOの導入: 組織全体の透明性を高め、効率的なプロジェクト管理を支援。 14
3. SLOの設定方法 15
SLO導入の基本条件 1. 関係者の合意 SLOがプロダクトに適切であることに全員が納得している。 2. 現実的な達成可能性 通常の状況下でSLO達成が可能である。 3. エラーバジェットの活用 優先順位付けや意思決定にエラーバジェットを使用することを組織が約束している。
4. 改善プロセスの整備 継続的な改善の仕組みが構築されている。 16
適切なSLOの基準 100%を目指さない理由 1. 達成不可能 冗長構成でも全コンポーネントが同時に故障する可能性はゼロではない。 2. 顧客体感の限界 システムの複雑性から、顧客が100%を体感することは不可能。 3. コスト対効果
信頼性向上のコストが急激に増加し、顧客満足度への影響が減少。 4. 改善の余地を確保 100%を目指すと変更やアップデートが停滞。 17
初期設定手順 1. アプリケーションの選定 SLOを定義したいアプリケーションを1つ選ぶ。 例: ユーザー利用頻度が高いAPIサービス。 18
初期設定手順 2. ユーザー分析 サービスの「ユーザー」を定義し、その満足度を最適化。 例: システム管理者、エンドユーザー、API利用者など。 3. ユーザーのインタラクション分析 ユーザーがシステムをどのように利用しているか把握。 例:
データ検索、APIリクエスト、ファイルアップロード。 19
初期設定手順 4. 高レベルアーキテクチャ図の作成 システムの主要コンポーネントやデータフローを図示。 例: リクエストフロー、バックエンド依存関係。 目的: 信頼性に影響する重要な部分を特定。 20
まとめ 導入の条件: 合意、達成可能性、エラーバジェット活用、改善プロセス。 適切な基準: 100%を目指さず、現実的な目標設定。 初期設定手順: i. アプリ選定 ii. ユーザー分析
iii. ユーザーインタラクション分析 iv. 高レベルアーキテクチャ図の作成 次のステップ: 測定開始と継続的改善。 21
4. SLIの選定と実装 22
SLIの定義 SLI(サービスレベル指標): サービスの品質を測る具体的な指標。 「良好なイベント ÷ 総イベント」の形式が一般的。 例: 成功したHTTPリクエスト数 ÷ 総HTTPリクエスト数(成功率)
100ms未満で成功したAPI呼び出し数 ÷ 総APIリクエスト数 23
「良好なイベント ÷ 総イベント」形式の重要性 1. 直感的なスケール 0%: 全く機能していない 100%: 完全に正常 2.
エラーバジェットとの統合 SLO(目標): 99.9% エラーバジェット: 100% - 99.9% = 0.1% 例: 月間300万リクエストの場合、3,000件の失敗が許容範囲。 3. 一貫した形式の利点 アラート設定やレポート生成が効率化。 24
SLIの具体例 指標 例 成功率 成功したHTTPリクエスト数 ÷ 総リクエスト数 レイテンシ 100ms未満で完了したリクエスト数 ÷
総リクエスト数 新鮮度(データの鮮度) 10分以内に更新されたデータ数 ÷ 総データ数 正確性(結果の品質) 正確な検索結果数 ÷ 総検索結果数 25
SLI仕様と実装の違い SLI仕様 ユーザーにとって重要なサービスの結果を評価する基準。 測定方法に依存しない。 SLI実装 SLI仕様を実際に測定する方法。 利用可能なデータや技術に基づく。 26
SLI仕様と実装の比較 項目 SLI仕様 SLI実装 定義 ユーザーに重要な品質基準を示す 測定を具体的に行う方法を示す 例 「100ms未満で応答したリクエストの割合」 サーバーログやブラウザ計測を利用
柔軟性 測定方法に依存しない 技術的な制約を受ける 測定精度 全体的な目標を反映 実装により異なる精度を持つ 27
SLI実装の選択肢 1. サーバーログの利用 成功/失敗のステータスを記録。 簡易だが、一部ユーザーエラーを見逃す可能性あり。 2. プローブによる測定 仮想マシン上でクライアント動作をシミュレート。 ネットワーク到達エラーを検出可能。 3.
クライアントサイド計測 ユーザー体験を正確に反映。 コード変更やテレメトリ導入が必要。 28
まとめ SLIの定義: 「良好なイベント ÷ 総イベント」で直感的かつ一貫性を重視。 具体例: 成功率、レイテンシ、新鮮度、正確性など。 仕様と実装の違い: 柔軟性と測定精度を考慮。 実装の選択肢:
サーバーログ、プローブ、クライアントサイド計測など、目的に応じた方法を選 定。 29
5. SLOの運用と改善 30
ロールウィンドウとカレンダーウィンドウ ロールウィンドウ 固定期間を動的に更新(例: 過去4週間)。 最新の状況を常に反映。 用途: ユーザー体験を監視。 例: 大規模障害が発生した場合、その影響は翌期間にも継続。 31
ロールウィンドウとカレンダーウィンドウ カレンダーウィンドウ カレンダーに基づき固定期間を設定(例: 四半期)。 ビジネス計画やプロジェクト管理に適合。 用途: 組織内の報告やリソース配分。 例: 四半期ごとにSLO達成状況を評価。 32
ロールウィンドウとカレンダーウィンドウの比較 特徴 ロールウィンドウ カレンダーウィンドウ 更新方法 過去固定期間を動的にスライド 固定された期間(例: 四半期) 主な用途 ユーザー体験の監視
ビジネス計画の調整 メリット 最新状況を常に反映 期間が明確で共有しやすい 適用例 「過去30日間の成功率」 「2025年第1四半期の成功率」 33
適切な期間の選択 推奨期間: 4週間のロールウィンドウ 理由: トラフィック変動(平日と週末の違い)を均一化。 インシデントの影響を把握しやすい。 短期間(1週間): 問題の早期対応に適する。 バグ修正の優先順位付けに有効。 長期間(四半期以上):
戦略的決定や大規模改善に向く。 例: データベースの冗長性向上。 34
継続的改善プロセス 1. データ収集と分析 SLO達成状況を記録。 過去のインシデントを振り返り、改善点を特定。 2. 改善の実施 ユーザー体験に近い測定方法を導入。 自動化やアラート感度の調整。 3.
ステークホルダーとの合意 新しいSLOや測定方法を関係者間で共有。 4. 反復プロセス 短期間でレビューし、必要に応じてSLOを更新。 35
まとめ ロールウィンドウとカレンダーウィンドウ: 特徴と用途を理解し、適切に選択。 適切な期間の選択: 推奨: 4週間のロールウィンドウ。 短期間と長期間の特性を考慮。 継続的改善: データ収集→改善実施→合意形成→反復のプロセスを確立。 36
6. エラーバジェットの活用事例 37
エラーバジェットとは 定義: サービスがSLOを満たしつつ許容できる失敗の割合。 目的: 信頼性と機能開発のバランスを取る。 インシデントの重要度を評価し、優先順位付けに活用。 38
意思決定への活用 1. リリース停止 エラーバジェットを使い果たした場合、新機能リリースを停止。 優先的にバグ修正や信頼性向上にリソースを投入。 2. インシデント評価 エラーバジェット消費率を用いて障害の重要度を評価。 例: 1つの障害でエラーバジェットの20%を消費
→ 高優先度。 軽微な障害 → 継続監視。 39
具体例: リリース停止 状況: 新機能リリース後に多くのエラー発生。 1日でエラーバジェットの50%を消費。 対応: リリースを一時停止。 エラー原因の特定と修正。 再リリース前に十分なテストを実施。 40
具体例: インシデント評価 例1: APIエラー エラーバジェット: 10,000リクエスト中9,700成功(SLO: 97%)。 消費: 300エラー(10,000 -
9,700)。 対応: 継続監視。再発の際は改善優先。 例2: データベース障害 エラーバジェット: 10,000リクエスト中8,500成功(SLO: 97%)。 消費: 1,500エラー。 対応: 高優先度で修正を実施。 41
エラーバジェット消費状況の可視化 ツール例: ダッシュボードで四半期ごとの消費状況を表示。 グラフでエラーバジェットの使用量を監視。 エラーバジェット消費例 四半期エラーバジェット: 1,000リクエスト。 イベントAで400リクエスト消費(40%)。 イベントBで300リクエスト消費(30%)。 残り:
30%(300リクエスト)。 42
まとめ エラーバジェットの意義: 信頼性と機能開発の優先順位付けに貢献。 失敗許容度を定量的に管理。 活用例: リリース停止の判断基準。 インシデント評価の指針。 具体的な数値の可視化: 消費状況をリアルタイムで監視。 チーム間で共通理解を形成。
43
7. 高度なトピック 44
概要 ユーザージャーニーのモデル化 リクエスト重要度の分類 SLO緩和実験の方法と注意点 依存関係のモデル化 45
ユーザージャーニーのモデル化 目的 ユーザー体験を向上させるため、重要な行動を測定。 各ジャーニーに対するSLI/SLOを設計。 例: オンラインショッピング 1. 商品検索: 成功率、検索速度を測定。 2.
カートへの追加: レスポンスの成功率を追跡。 3. 購入完了: 決済成功率、遅延の測定。 46
リクエスト重要度の分類 必要性 全リクエストを同じ重要度で扱わない。 顧客影響度に基づく優先順位付け。 例: 分類基準 高重要度: 広告主の請求処理リクエスト → SLO:
99.99% 低重要度: 通知チェックリクエスト → SLO: 99.9% 47
SLO緩和実験 目的 信頼性の変化がビジネス指標へ与える影響を把握。 システムの限界を検証。 手法 1. 遅延を意図的に追加(例: 50ms)。 2. エラーバジェットの範囲内で実施。
注意点 ユーザー体験や売上への影響を慎重に分析。 定期的なレビューを実施。 48
依存関係のモデル化 目的 システム間の依存性を明確化し、信頼性の向上を図る。 例: モデル化 1. 高可用性要件: コンポーネントAが99.9% → 依存するBも同等かそれ以上。
2. キャッシュと劣化対応: 依存先障害時に優雅に劣化する仕組みを追加。 49
高度なトピックのまとめ 主要ポイント ユーザージャーニーのモデル化: ユーザー行動に基づくSLO設計。 リクエスト重要度の分類: 顧客影響度に基づくSLO優先度付け。 SLO緩和実験: 信頼性の影響を測定。 依存関係のモデル化: システムの冗長性と優雅な劣化の設計。
次のステップ 各トピックをサービス特性に合わせて実装。 50
8. まとめと次のステップ 51
概要 SLOの重要性を振り返り 継続的改善の必要性 チームでの具体的な次のアクション 52
要点の整理 1. SLOの重要性 信頼性の指標: ユーザー体験を数値で示す。 リソース配分のガイド: 機能開発と信頼性のバランスを最適化。 意思決定の基盤: データに基づく改善と優先順位付けを可能にする。 2.
継続的改善 フィードバックループを構築。 現在のパフォーマンスや顧客期待に応じてSLOを更新。 53
次のアクション 1. SLOの導入計画 対象サービスの選定: 例: ユーザー数が多いコアサービス。 関係者の合意形成: プロダクトマネージャー、開発チーム、運用チームを巻き込む。 2. 改善の第一歩
現在のパフォーマンスを測定し、暫定SLOを設定。 フィードバックループを実装。 54
次のアクション(続き) 3. 継続的レビュー 定期的なSLOの見直しスケジュールを設定(例: 四半期ごと)。 重大なインシデントの振り返りを実施。 4. チーム間の共有 成果をレポートし、他のプロジェクトに適用。 信頼性文化を促進。
55
まとめ図 graph TD A[SLOの設定] --> B[フィードバックループの実装] B --> C[継続的改善] C
--> D[チーム間での共有と適用] D --> E[信頼性文化の促進] 56
57