Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How to measure "Site Reliability Engineering"

How to measure "Site Reliability Engineering"

Takeshi Kondo

August 25, 2021
Tweet

More Decks by Takeshi Kondo

Other Decks in Technology

Transcript

  1. #sapurimeetup How to measure "Site Reliability Engineering"
    How to measure
    “Site Reliability Engineering”
    @chaspy / Takeshi Kondo
    スタディサプリ / Quipper オンラインミートアップ #3 (SRE)

    View Slide

  2. #sapurimeetup How to measure "Site Reliability Engineering"
    #sapurimeetup
    (QA は zoom にお願いします)

    View Slide

  3. #sapurimeetup How to measure "Site Reliability Engineering"
    Takeshi Kondo
    Lead Software Engineer, K12 SRE Team
    @chaspy_ @chaspy

    View Slide

  4. #sapurimeetup How to measure "Site Reliability Engineering"
    Agenda | 01
    02
    03
    04
    SRE Team の紹介
    Site Reliability Engineering とはなにか
    どのように Site Reliability Engineering を計測するのか
    まとめと今後

    View Slide

  5. #sapurimeetup How to measure "Site Reliability Engineering"
    今日お話しすること
    どのように Site Reliability Engineering を計測するのか
    Service Level だけでなく、SRE の関心である Developer Productivity と
    Production Reliability、そしてそれらを支える Platform Development の4つの
    領域に関連する指標を定め、分析・改善のサイクルを回すことを試みました。本
    発表ではこの課題に取り組んだ軌跡と学びを紹介します。意思決定を「なんとな
    く」行なってしまっている、以前の僕たちのような方にヒントを持ち帰ってもらえたら
    幸いです。

    View Slide

  6. #sapurimeetup How to measure "Site Reliability Engineering"
    SRE Team の紹介
    01

    View Slide

  7. #sapurimeetup How to measure "Site Reliability Engineering"
    2 Products
    100+
    Developers
    7 SREs
    Hiring😉
    70+ 30+

    View Slide

  8. #sapurimeetup How to measure "Site Reliability Engineering"

    View Slide

  9. #sapurimeetup How to measure "Site Reliability Engineering"
    Vision
    ● 最高の学習プロダクトを作り続けられる開発組織の実現
    Mission
    ● 自己完結チームがプロダクトを素早く安全に届け続けるためのプラットフォー
    ムと文化を作る

    View Slide

  10. #sapurimeetup How to measure "Site Reliability Engineering"
    Values
    ● Fail smart
    ○ 失敗を非難せず、学習の糧とする。また、影響範囲をコントロールし、最小のリスクから最大のリターンを得
    られるよう、プロセスに失敗を織り込む。
    ● Learning
    ○ 未知の課題を発見・解決するために、あらゆる物事を学習の機会と捉え、必要な変化をし続ける。
    ● Borderless
    ○ 組織の垣根なくコミュニケーションし、協力しあうことでより大きな成果を目指す。
    ● Metrics-driven
    ○ あらゆる課題・物事を指標化し、問題を点ではなく線で捉え、柔軟かつ自動的な解決を目指す。

    View Slide

  11. #sapurimeetup How to measure "Site Reliability Engineering"
    Concerns
    Developer
    Productivity
    Production
    Reliability
    Platform Development
    Security
    Cost Management

    View Slide

  12. #sapurimeetup How to measure "Site Reliability Engineering"
    Vision
    ● 最高の学習プロダクトを作り続けられる開発組織の実現
    Mission
    ● 自己完結チームがプロダクトを素早く安全に届け続けるためのプラット
    フォームと文化を作る

    View Slide

  13. #sapurimeetup How to measure "Site Reliability Engineering"
    Concerns
    Developer
    Productivity
    Production
    Reliability
    Platform Development
    Security
    Cost Management
    素早く開発できる
    ● Monorepo CI/CD
    ● Preview Environment
    ● Infrastructure Management
    ● Microservice setup script

    View Slide

  14. #sapurimeetup How to measure "Site Reliability Engineering"
    Concerns
    Developer
    Productivity
    Production
    Reliability
    Platform Development
    Security
    Cost Management
    安全に運用できる
    ● Incident Response
    ● Auto Scaling(HPA/CA)
    ● Worker Node Management
    ● Monitoring

    View Slide

  15. #sapurimeetup How to measure "Site Reliability Engineering"
    Concerns
    Developer
    Productivity
    Production
    Reliability
    Platform Development
    Security
    Cost Management
    両方を支える Platform
    ● Application Platform (Kubernetes Cluster)
    ● Monorepo CI/CD
    ● Terraform CI/CD
    ⬆Empowerment⬆

    View Slide

  16. #sapurimeetup How to measure "Site Reliability Engineering"
    Site Reliability Engineering とはなにか
    02

    View Slide

  17. #sapurimeetup How to measure "Site Reliability Engineering"
    Definition
    our Site Reliability Engineering teams focus on hiring software
    engineers to run our products and to create systems to accomplish the
    work that would otherwise be performed, often manually, by
    sysadmins
    - Site Reliability Engineering / Chapter1 Introduction: Google’s Approach to Service Management: Site
    Reliability Engineering

    View Slide

  18. #sapurimeetup How to measure "Site Reliability Engineering"
    Core Concepts: SLI/SLO
    Product development and SRE teams can enjoy a productive working
    relationship by eliminating the structural conflict in their respective
    goals. The structural conflict is between pace of innovation and
    product stability, and as described earlier, this conflict often is
    expressed indirectly. In SRE we bring this conflict to the fore, and then
    resolve it with the introduction of an error budget.
    - Site Reliability Engineering / Chapter1 Introduction: Pursuing Maximum Change Velocity Without
    Violating a Service’s SLO

    View Slide

  19. #sapurimeetup How to measure "Site Reliability Engineering"
    Concerns
    Developer
    Productivity
    Production
    Reliability
    Platform Development
    Security
    Cost Management
    Service
    Level
    目標を満たしているうちは Productivity に(ガンガンリリース)
    目標を下回ったら Reliability に投資する
    数値という fact を用いて開発チームが自律的に意思決定できるように
    する

    View Slide

  20. #sapurimeetup How to measure "Site Reliability Engineering"
    SLI/SLO 運用の現状と課題
    ● ✅ ほぼ全てのチームでサービスの SLI/SLO を設定し、定期的に確認している
    ● ✅ SLO 違反時のアラートも設定できている
    ● 🤔 エラーバジェットポリシーを設定できていないチームが多い
    ● 🤔 SLI/SLO/エラーバジェットポリシーを定期的に見直すカルチャーが定着していな

    ● 🤔 SLI/SLO をビジネスチームを含めて合意できていない
    ○ これができないと、リリースより信頼性、という意思決定をができ
    ない

    View Slide

  21. #sapurimeetup How to measure "Site Reliability Engineering"
    SLI/SLO だけが SRE の仕事か 🤔

    View Slide

  22. #sapurimeetup How to measure "Site Reliability Engineering"
    SLI/SLO 運用の現状と課題
    ● SLI/SLO の運用は大事だが Production Reliability を示す指標に過ぎない
    ● 真に目指したいのは Reliability を保ちながら Productivity を最大化すること
    ● そしてそれを事業全体で同じ目線を持つこと
    ● SLI/SLO だけでなく、Productivity や Platform という自分達がやっている仕事が事
    業にどのように関連するのかを再定義し、それを数値にしていくことが必要ではない

    View Slide

  23. #sapurimeetup How to measure "Site Reliability Engineering"
    どのように Site Reliability
    Engineering を計測するのか
    03

    View Slide

  24. #sapurimeetup How to measure "Site Reliability Engineering"
    SRE Team が提供する価値をどう計
    測すれば良いか

    View Slide

  25. #sapurimeetup How to measure "Site Reliability Engineering"
    Concerns
    Developer
    Productivity
    Production
    Reliability
    Platform Development
    Security
    Cost Management
    Service
    Level
    最大化したい 安定させたい
    信頼性を示すような指
    標を選びたい

    View Slide

  26. #sapurimeetup How to measure "Site Reliability Engineering"
    Concerns
    Developer
    Productivity
    Production
    Reliability
    Platform Development
    Security
    Cost Management
    Service
    Level
    最大化したい 安定化させたい
    信頼性を示すような指
    標を選びたい

    View Slide

  27. #sapurimeetup How to measure "Site Reliability Engineering"
    事業にとって
    ”Developer Productivity”
    はどう関係するのか

    View Slide

  28. #sapurimeetup How to measure "Site Reliability Engineering"
    スタディサプリという事業は
    どのように成り立っているのか

    View Slide

  29. #sapurimeetup How to measure "Site Reliability Engineering"

    View Slide

  30. #sapurimeetup How to measure "Site Reliability Engineering"

    View Slide

  31. #sapurimeetup How to measure "Site Reliability Engineering"
    スタディサプリ大学受験講座の場合
    大学受験生というユーザに対して、
    プロ講師の神授業の視聴、理解度確認
    のテスト、コーチの伴走という価値を提供
    するプロダクト

    View Slide

  32. #sapurimeetup How to measure "Site Reliability Engineering"
    スタディサプリ大学受験講座の場合
    大学受験生というユーザに対して、
    プロ講師の神授業の視聴、理解度確認
    のテスト、コーチの伴走という価値を提供
    するプロダクト
    受験合格というアウトカ
    ムを目指して、価値を事
    業KPIと学習KPIで計測
    し、それを向上させるた
    めの仮説検証を繰り返

    View Slide

  33. #sapurimeetup How to measure "Site Reliability Engineering"
    仮説検証を繰り返すための
    ”Developer Productivity”

    View Slide

  34. #sapurimeetup How to measure "Site Reliability Engineering"
    それを示す指標は?

    View Slide

  35. #sapurimeetup How to measure "Site Reliability Engineering"
    (本番環境への)デプロイ頻度🚀

    View Slide

  36. #sapurimeetup How to measure "Site Reliability Engineering"
    デプロイ頻度 リードタイム
    MTTR
    変更失敗率
    Lean と DevOps の科学より - 4 Keys

    View Slide

  37. #sapurimeetup How to measure "Site Reliability Engineering"
    なぜデプロイ頻度が適当か🤔

    View Slide

  38. #sapurimeetup How to measure "Site Reliability Engineering"
    初回課金率
    学習KPI デプロイ頻度
    継続率
    事業KPIとの関連性
    事業KPI
    課金額だけでなく、ユーザに
    使ってもらうことを重視してKPI
    を設定

    View Slide

  39. #sapurimeetup How to measure "Site Reliability Engineering"
    初回課金率
    学習KPI デプロイ頻度
    継続率
    事業KPIとの関連性
    事業KPI
    開発チームは学習KPI改善の
    How として機能開発や修正を
    行う
    開発した機能が学習KPIを改善
    するかどうかはリリースしてみ
    ないと分からない(目的不確実
    性)
    仮説検証を繰り返し、本番環境
    からフィードバックを得る必要が
    ある

    View Slide

  40. #sapurimeetup How to measure "Site Reliability Engineering"
    初回課金率
    学習KPI デプロイ頻度
    継続率
    事業KPIとの関連性
    事業KPI
    速く、安全に、多く機能を届け続
    ければ学習KPIが改善する可
    能性が高い

    View Slide

  41. #sapurimeetup How to measure "Site Reliability Engineering"
    なぜデプロイ頻度が指標として適切か
    ● 前提としてプロダクト開発ではリリースしてみないとKPIを改善するかどうかわからな
    い(目的不確実性)がある
    ● 仮説検証をできるだけ多く繰り返すためにはデプロイ頻度を高める必要がある

    View Slide

  42. #sapurimeetup How to measure "Site Reliability Engineering"
    デプロイ頻度だけ追えば良いか🤔

    View Slide

  43. #sapurimeetup How to measure "Site Reliability Engineering"
    デプロイ頻度 リードタイム
    MTTR
    変更失敗率
    4 Keys の関係性
    デプロイ頻度があがると
    変更失敗率はさがる?
    リードタイムが短くなると
    デプロイ頻度があがる
    リードタイムが短くなると
    MTTR も短くなる

    View Slide

  44. #sapurimeetup How to measure "Site Reliability Engineering"
    開発環境
    デプロイ
    頻度
    リードタイ

    MTTR
    変更失敗

    Sub KPIs
    開発ブランチ
    へのデプロイ
    頻度
    PR 平均生存
    時間
    Preview 環境
    が準備できる
    までの時間
    開発環境稼働

    コードメトリクス
    (量・循環複雑
    度)
    本番環境

    View Slide

  45. #sapurimeetup How to measure "Site Reliability Engineering"
    デプロイ頻度だけ追えばいいか
    ● No
    ● さまざまな指標がシステム的に複雑に影響しあう
    ● デプロイ頻度を main KPI と置きつつ、他の指標も観察する必要がある
    ● 指標間には様々な関係性がある
    ○ 先行指標 ↔ 遅行指標
    ○ 比例 / 反比例
    ○ 包含関係

    View Slide

  46. #sapurimeetup How to measure "Site Reliability Engineering"
    結局、どこからどうやって
    はじめたらいい?

    View Slide

  47. #sapurimeetup How to measure "Site Reliability Engineering"
    “プロダクト的”に考える 💡

    View Slide

  48. #sapurimeetup How to measure "Site Reliability Engineering"
    スタディサプリ大学受験講座の場合
    大学受験生というユーザに対して、
    プロ講師の神授業の視聴、理解度確認
    のテスト、コーチの伴走という価値を提供
    するプロダクト
    受験合格というアウトカ
    ムを目指して、価値を事
    業KPIと学習KPIで計測
    し、それを向上させるた
    めの仮説検証を繰り返

    View Slide

  49. #sapurimeetup How to measure "Site Reliability Engineering"
    Vision
    ● 最高の学習プロダクトを作り続けられる開発組織の実現
    Mission
    ● 自己完結チームがプロダクトを素早く安全に届け続けるためのプラットフォー
    ムと文化を作る
    ユーザ 価値 プロダクト
    提供する価値を”デプロイ頻度”という指標で計
    測し、それを向上させるために仮説検証を繰り
    返す

    View Slide

  50. #sapurimeetup How to measure "Site Reliability Engineering"
    “プロダクト的”に Platform を進化させる
    ● ユーザを観察し
    ● 価値を提供し
    ● その価値を示す指標を定めて
    ● 指標改善のための仮説検証を繰り返す

    View Slide

  51. #sapurimeetup How to measure "Site Reliability Engineering"
    なぜ”プロダクト的”に考えると良いのか
    ● “プロダクト的”に考えないとどうなるか
    ○ 開発・改善した効果が分からない
    ○ 効果がわからないとどの施策をやるべきか優先順位がつけられない
    ● Business との関連性
    ○ 当たり前だが、SRE / Platform もスタディサプリ/Quipper 事業のために
    存在している
    ○ “Developer Productivity” / “Service Level” / “Production Reliability”
    を事業全体で共有したいなら、ツリー的につながる数値目標(KPI)を持つ
    べき

    View Slide

  52. #sapurimeetup How to measure "Site Reliability Engineering"
    指標を検討するためにやってきたこと
    ● 顧客・提供価値の言語化
    ● 開発チームの Value Stream Mapping
    ● 目指す姿をツリーで書き出し

    View Slide

  53. #sapurimeetup How to measure "Site Reliability Engineering"
    顧客・提供価値の言語化
    ● 興味あるひといればあとで画面共有します

    View Slide

  54. #sapurimeetup How to measure "Site Reliability Engineering"
    開発チームの Value Stream Mapping
    ● 実際にリリースする様子を見学・観察した

    View Slide

  55. #sapurimeetup How to measure "Site Reliability Engineering"
    目指す姿をツリーで書き出し
    ● ちょっと巨大なのでこれも興味あるひとあれば画面共有します

    View Slide

  56. #sapurimeetup How to measure "Site Reliability Engineering"
    今やっている取り組み
    ● 指標の Monitoring 強化
    ● Autify による E2E テスト自動化
    ● Release 体験改善

    View Slide

  57. #sapurimeetup How to measure "Site Reliability Engineering"
    指標の Monitoring 強化
    ● coverband gem によるプロダクションコードカバレッジ取得
    ● リードタイムで支配的なビルド時間の短縮検討
    ● 開発ブランチのデプロイ数の継続的取得
    ○ gh pr list で spot で取得したのみなので metric として取れるとなお良い

    View Slide

  58. #sapurimeetup How to measure "Site Reliability Engineering"
    Autify による E2E テスト自動化
    ● 検証中
    ● あるサービスでは既存の手動テストがほぼカバーできることが分かった
    ● ノウハウを他サービスに展開中

    View Slide

  59. #sapurimeetup How to measure "Site Reliability Engineering"
    Release 体験改善
    ● Release PR 作成 Script 実行時間高速化
    ● Master branch へ Hotfix した際の backport PR 作成自動化
    ● デプロイ完了後、Pod が Ready になった際の通知

    View Slide

  60. #sapurimeetup How to measure "Site Reliability Engineering"
    まとめと今後
    04

    View Slide

  61. #sapurimeetup How to measure "Site Reliability Engineering"
    まとめ
    ● Platform を”プロダクト的”に考えよう
    ○ ユーザは誰か
    ○ 提供する価値は何か
    ○ 価値を計測する指標は何か
    ● 指標はデプロイ数からはじめよう
    ○ 計測が簡単
    ○ これを main KPI とおけば他の指標は従属指標になる
    ● 事業活動との関係を意識しよう
    ○ Site Reliabiliy Engineering は「組織への実装」が必要
    ○ 開発組織だけに閉じない

    View Slide

  62. #sapurimeetup How to measure "Site Reliability Engineering"
    今後
    ● Business Team と一緒に Platform KPI を追いかけていく
    ● ユーザの観察と指標改善のためのアクションを打って、仮説検証を繰り返し
    ていく
    ● Platform Development 以外の領域にも同じ考え方を適用する
    ○ Security: 脅威と頻度等から数値化できないか?
    ○ Cost Management: User 規模と売り上げ・利益率から目標値を定め
    て適切なアクションを打っていくべき

    View Slide

  63. #sapurimeetup How to measure "Site Reliability Engineering"
    2 Products
    100+
    Developers
    7 SREs
    70+ 30+
    We are hiring 😉
    🔍【Quipper SRE】

    View Slide

  64. #sapurimeetup How to measure "Site Reliability Engineering"
    カジュアル面談しましょう!

    View Slide

  65. #sapurimeetup How to measure "Site Reliability Engineering"
    Takeshi Kondo
    Lead Software Engineer, K12 SRE Team
    @chaspy_ @chaspy

    View Slide

  66. #sapurimeetup How to measure "Site Reliability Engineering"
    Thank you!

    View Slide

  67. #sapurimeetup How to measure "Site Reliability Engineering"
    FAQ
    Q. SLI/SLOとエラーバジェットの運用について、SREだけでなくプロダクト開発組織
    全体を巻き込んだ運用を行うためにはどうすればいいでしょうか (どうしてもSRE
    本位になりがちで悩んでいます)
    A. 以下がコツになりそう。
    - 推奨(Default) SLI/SLO を提供する
    - Terraform 等で定義・作成を自動化、generator で簡易化する
    - 開発者と対話する・共同作業する
    - プロセスに組み込む
    - 新規サービス開始時の Design Doc / Production readiness Checklist の項目にしています
    - 可能な限りシンプルにする
    - よくある Web Service ならまずは Availability(Success Rate) と Latency だけでいい

    View Slide

  68. #sapurimeetup How to measure "Site Reliability Engineering"
    FAQ
    Q. 開発チームとSREチームの境界線
    (SLI/SLOに対して各チームがどこから/どこまで主体性を持って取り組んでいる
    か。インフラの選定やアップデートなども同様)
    A. 基本境界はない、Boaderless、はみ出し歓迎スタンスを前提に
    ● Web Application, Kubernetes manifest, CI は Developer
    ● Kubernetes Cluster, CD, Infrastructure CI/CD, IAM 等は SRE
    ● アーキテクチャレビューは SRE がやるが、基本開発チーム主導
    ● SLI/SLO 運用は開発チーム任せ、metrics 取得や考え方のサポートを SRE
    がする

    View Slide

  69. #sapurimeetup How to measure "Site Reliability Engineering"
    FAQ
    Q. 変更失敗率はどうやって計測しているか
    A. 現状は計測していない
    ● 変更失敗率は非常に重要。main KPI であるデプロイ頻度が高くても、変更
    失敗率も同時に高ければ意味がない
    ● 変更失敗した場合、必ず Revert するため Revert PR の数でいいか?と考
    えたが、失敗してなくても Revert することはある
    ● 能動的に Label をつけるなどプロセスに組み込む必要性を感じている
    ● QA Team と協力してモニタリングする予定

    View Slide

  70. #sapurimeetup How to measure "Site Reliability Engineering"
    FAQ
    Q. MTTR はどうやって計測しているか
    A. 現状は計測していない
    ● 一度過去のインシデントから棚卸しして手作業で計測したことはある
    ● 障害自体の発生数はそう多くないため、手作業での計測でも問題ない
    ● また、MTTR の数値は頻度が低いことから十分なデータ量が得られず、少数
    の大障害が大きな影響を与えてしまう
    ● 一方で、障害対応の Value Stream Mapping を考えた場合、共通でこれら
    を遅くする要因は取り除くべき
    ● 重要な指標ではあるが、自動計測は難しく、また統計値としては役に立ちづ
    らいため優先度を下げている。

    View Slide