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

モバイルアプリのSLI/SLOについて考える | DMM.swift #2

モバイルアプリのSLI/SLOについて考える | DMM.swift #2

Shunsuke Nakao

March 28, 2024
Tweet

More Decks by Shunsuke Nakao

Other Decks in Technology

Transcript

  1. 中尾 俊介 合同会社 DMM.com プラットフォーム開発本部 第1開発部 DMM PointClub グループ iOS

    Team Leader Shunsuke Nakao 2021年に合同会社DMM.comに新卒入社し、ソフトウェアエンジニアとして 『DMMポイントクラブ』のiOSアプリ開発に従事。翌年からiOSテックリードとしてDMMポイ ントクラブグループのモバイル開発をリードし、技術戦略や開発生産性の改善にコミット。 現在は同グループのiOS Team Leaderを務める。 About Me
  2. 01 SLI/SLOについて確認する Q. SLI/SLOとは何か A. Google が提唱する "Site Reliability Engineering

    (SRE)" の 概論の中で出てくる、サービスを正しく管理するための指標群 It’s impossible to manage a service correctly, let alone well, without understanding which behaviors really matter for that service and how to measure and evaluate those behaviors. To this end, we would like to define and deliver a given level of service to our users, whether they use an internal API or a public product. We use intuition, experience, and an understanding of what users want to define service level indicators (SLIs), objectives (SLOs), and agreements (SLAs). https://sre.google/sre-book/table-of-contents/
  3. 01 SLI/SLOについて確認する Q. SLI/SLOとは何か A. Googleが提唱する "Site Reliability Engineering (SRE)"

    の 概論の中で出てくる、サービスを正しく管理するための指標群 It’s impossible to manage a service correctly, let alone well, without understanding which behaviors really matter for that service and how to measure and evaluate those behaviors. To this end, we would like to define and deliver a given level of service to our users, whether they use an internal API or a public product. We use intuition, experience, and an understanding of what users want to define service level indicators (SLIs), objectives (SLOs), and agreements (SLAs). https://sre.google/sre-book/table-of-content s/ "Site Reliability Engineering (SRE)" 🤔?
  4. DevOpsの概念が生まれた背景 01 SLI/SLOについて確認する Developers Operators 組 織 的 な 壁

    「機能の提供」に責任をもつ 機能を速くリリースして製品のビジ ネス的価値の向上を加速させた い。 Developers 開発担当 「製品の安定性」に責任をもつ 製品が利用できない事態を避けシ ステムを安定して運用させたい。 Operators 運用担当 かつて企業は、ソフトウェアを運用するために、 開発者と運用者を分けるというアプローチをとってきた。 ソフトウェアを開発する開発者と、開発されたソフトウェアを載せて稼働させるハード(インフラ)を運用する運用者
  5. 01 SLI/SLOについて確認する 「機能の提供」に責任をもつ 機能を速くリリースして製品のビジ ネス的価値の向上を加速させた い。 Developers 開発担当 「製品の安定性」に責任をもつ 製品が利用できない事態を避けシ

    ステムを安定して運用させたい。 Operators 運用担当 開発者(Dev)と運用者(Ops)を分けるアプローチは、 主に"本番環境への機能のデプロイ "をめぐって衝突。 組織間の摩擦を生んだ 早くリリースしたい! そんな頻繁にリリースできない! 🔥
  6. 01 SLI/SLOについて確認する 価値の提供と信頼性の担保 どちらも同じミッションからブレイクダウンされたものであり、 目指す方向は同じはず。 価値の提供 信頼性の担保 機能を速くリリースして製品のビジネス的価値の向上 を加速させたい。 製品が利用できない事態を避けシステムを安定して

    運用させたい。 Mission 製品のビジネス価値向上 信頼性の担保 機能を速くリリースして製品のビジネス的価 値の向上を加速させたい。 製品が利用できない事態を避けシステムを 安定して運用させたい。 Mission 製品のビジネス価値向上 🤝 DevOpsとは 組織間の摩擦・壁を減らし、協調を促すことで さらなる製品の価値向上を達成するための 概念・実践・文化 価値の提供
  7. 01 SLI/SLOについて確認する モバイルアプリにおいてもこれらは同じ。 価値の提供 信頼性の担保 機能を速くリリースして製品のビジネス的価値の向上 を加速させたい。 製品が利用できない事態を避けシステムを安定して 運用させたい。 Mission

    製品のビジネス価値向上 ソフトウェアの話なので 開発しているアプリ、 開発速度は維持できていますか? バグ修正・不具合対応に圧されて機能開発遅くなっていませんか?
  8. 01 SLI/SLOについて確認する モバイルアプリにおいてもこれらは同じ。 価値の提供 信頼性の担保 機能を速くリリースして製品のビジネス的価値の向上 を加速させたい。 製品が利用できない事態を避けシステムを安定して 運用させたい。 Mission

    製品のビジネス価値向上 ソフトウェアの話なので 開発しているアプリ、 品質は適切に管理できていますか? 今リリースされているアプリの信頼性はモニタリングできていますか?
  9. 02 SLI/SLOについて確認する Google のDevOps の解釈 組織のサイロを削減する Reduce organizational silos エラー発生を普通と捉える

    Accept failure as normal 段階的変更を実施する Implement gradual change ツールと自動化を活用する Leverage tooling and automation すべてを測定する Measure everything SRE 所有権の共有 Share ownership エラーバジェットによる許容 SLOs & Blameless PMs カナリアリリース Reduce cost of failure 手作業の自動化 Automate common case 苦労と信頼性の計測 Measure toil and reliability DevOps
  10. 02 SLI/SLOについて確認する Google のDevOps の解釈 組織のサイロを削減する Reduce organizational silos エラー発生を普通と捉える

    Accept failure as normal 段階的変更を実施する Implement gradual change ツールと自動化を活用する Leverage tooling and automation すべてを測定する Measure everything SRE 所有権の共有 Share ownership エラーバジェットによる許容 SLOs & Blameless PMs カナリアリリース Reduce cost of failure 手作業の自動化 Automate common case 苦労と信頼性の計測 Measure toil and reliability DevOps
  11. 02 SLI/SLOについて確認する GoogleのDevOpsの解釈 組織のサイロを削減する Reduce organizational silos エラー発生を普通と捉える Accept failure

    as normal 段階的変更を実施する Implement gradual change ツールと自動化を活用する Leverage tooling and automation すべてを測定する Measure everything SRE 所有権の共有 Share ownership エラーバジェットによる許容 SLOs & Blameless PMs カナリアリリース Reduce cost of failure 手作業の自動化 Automate common case 苦労と信頼性の計測 Measure toil and reliability DevOps DevOps のエッセンス 迅速に価値をエンドユーザーに届けるために SREが定めた手段 どこまでなら失敗を許容できるか定めよう = SLI/SLO (= Error Budget )
  12. SLI/SLO 02 SLI/SLOについて確認する SLI: Service Level Indicators ユーザーが、品質や体験などの "サービスに対して期待する側面 "

    を定量的に示した具体的な指標。 e.g.) リクエストレイテンシ、エラー率など SLO: Service Level Objectives ユーザーが、品質や体験などの "サービスに対して期待する側面 "において要求または期待される具体的な目標値。 e.g.) リクエストレイテンシが200ms以内、エラー率が99.9%以上 SLA: Service Level Agreements ユーザーが利用するサービスに期待するサービスレベルの水準 (=SLO)を公約として規定し取り交わす契約。 遵守すべきサービスレベルを下回った時のペナルティや責任について記載される。 エラーバジェットによる許容 SLOs & Blameless PMs 苦労と信頼性の計測 Measure toil and reliability
  13. 01 SLI/SLOについて確認する SLI/SLO はどう決めればいいのか? ユーザー向けかどうかに関係なく、すべてのサービスで個別の SLO を開発したくなることがあります。たとえば、2 つ以上の サービス(たとえば、フロントエンド サービスとバックエンド

    データストア)で、ユーザーが両方のサービスに依存しているが、 それらを区別できない場合に、個別に測定してしまうことがよくある間違いです。 よりよいアプローチは、プロダクト(サービスのコレクション)に基づいて SLO を開発し、ユーザーがこのプロダクトと行う最も重 要なインタラクションに焦点を合わせることです。 https://cloud.google.com/architecture/framework/reliability/defining-SLOs?hl=ja
  14. 01 SLI/SLOについて確認する よりよいアプローチは、プロダクト(サービスのコレクション)に基づいて SLO を開発し、ユーザーがこのプロダクトと行う最も重 要なインタラクションに焦点を合わせること クリティカル・ユーザージャーニー( CUJ) 効果的な SLO

    を開発するために、クリティカル ユーザー ジャーニー(CUJ)と呼ばれる、ユーザーとサービスとのインタラクションを理解することが理想 です。 CUJ では、ユーザーの目的とユーザーがその目的の達成のためにサービスをどのように使用するかが考慮されます。  CUJ は、サービスの境界線を考慮せずに顧客の視点で定義されます。  CUJ が満たされていれば顧客は満足であり、顧客の満足度がサービスの成功 の重要な尺度になります。 https://cloud.google.com/architecture/framework/reliability/defining-SLOs?hl=ja
  15. 例えばコード決済アプリのCUJ 01 SLI/SLOについて確認する ❌ 1.支払いのために アプリを開く 0. 商品をカゴに 入れる 2.QRコードをリーダーに

    スキャンする 異常系① 2.QRコードが表示されない 異常系② 0. 商品をカゴに 入れる 1.支払いのために アプリを開く ❌ または ・アプリがクラッシュする ・QRコードの読み取りができない 3.支払いに失敗する または ・アプリがクラッシュする ・支払いが実行されたまま終わらない
  16. 例えばコード決済アプリのCUJ 01 SLI/SLOについて確認する ❌ 1.支払いのために アプリを開く 0. 商品をカゴに 入れる 2.QRコードをリーダーに

    スキャンする 異常系① 2.QRコードが表示されない 異常系② 0. 商品をカゴに 入れる 1.支払いのために アプリを開く ❌ または ・アプリがクラッシュする ・QRコードの読み取りができない 3.支払いに失敗する または ・アプリがクラッシュする ・支払いが実行されたまま終わらない SLI/SLO ではここを見る ※ユーザーがサービスに対して 最も信頼を失うリスクが高い、 CUJの達成を阻害するケース 2.QRコードが表示されない または ・アプリがクラッシュする ・QRコードの読み取りができない ❌ 3.支払いに失敗する または ・アプリがクラッシュする ・支払いが実行されたまま終わらない ❌
  17. 01 SLI/SLOについて確認する CUJの担保を目標に置くと考えた時に… Crash Free Rate だけでは CUJが担保できていると言い切れない QRコードが表示されない ❌

    または ・アプリがクラッシュする ・QRコードの読み取りができない ❌ 支払いに失敗する または ・アプリがクラッシュする ・支払いが実行されたまま終わらない クラッシュは CUJを阻害する要因の一つに過ぎない
  18. 01 SLI/SLOについて確認する CUJの担保を目標に置くと考えた時に… Crash Free Rateだけでは CUJが担保できていると言い切れない 1. QRコードが表示されない ❌

    または ・アプリがクラッシュする ・QRコードの読み取りができない ❌ 1. 支払いに失敗する または ・アプリがクラッシュする ・支払いが実行されたまま終わらない クラッシュは CUJを阻害する要因の一つに過ぎない 正常系 問題なくCUJを 達成したユーザー 異常系 何かしらの要因で CUJを 達成できなかったユーザー ❌ Firebase 等の モニタリングツール CUJを追跡して ユーザーエクスペリエンスの異常 (=サービスレベルの低下) を検知する
  19. 02 DMMポイントクラブの事例 正常系 問題なくCUJを 達成したユーザー 異常系 何かしらの要因で CUJを 達成できなかったユーザー ❌

    1.Crash Free Rate (30days) 最優先で達成すべきSLO CUJに直結するか・ SLIの下り幅でインシデントをトリアージ Crash Free Rateの次に優先して達成すべきSLO 2.Error Alert Free Rate (30days) DMMポイントクラブの事例 定義運用しているSLO
  20. Conclusion 1. DevOps の具体的なプラクティスが SRE。 SLI/SLO を用いた失敗の許容によって、開発速度と オペレーションを両立しよう 2. SLI/SLO

    ではCUJを追跡可能な正確な指標を測って インシデントのトリアージ をしよう 3. CUJを阻害する要因はクラッシュだけではないので、ユーザー がアプリに対して行う 最も重要なインタラクション を考えて設計し よう