Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Enabling Client-side SLO

gr1m0h
August 04, 2024

Enabling Client-side SLO

gr1m0h

August 04, 2024
Tweet

More Decks by gr1m0h

Other Decks in Technology

Transcript

  1. Luup, Inc. - Confidential and Proprietary 2 whoami Wataru Tsuda

    / gr1m0h Reliability Engineer @Luup,inc. SRE Lounge / SRE NEXT Organizar Platform Engineering Meetup Organizar
  2. Luup, Inc. - Confidential and Proprietary 6 0. 事業説明 1.

    LUUPでクライアントのSLOを設定する理由 2. LUUPでクライアントのSLOを設定するために行った取り組み 3. 今後の展望 4. まとめ
  3. Luup, Inc. - Confidential and Proprietary 7 0. 事業説明 1.

    LUUPでクライアントのSLOを設定する理由 2. LUUPでクライアントのSLOを設定するために行った取り組み 3. 今後の展望 4. まとめ
  4. Luup, Inc. - Confidential and Proprietary 8 LUUPとは 街じゅうの電動マイクロモビリティに、 どこからでも乗れて好きな場所に返せる

    シェアリングサービス LUUPは電動キックボードと電動アシスト自転車のシェアリングサービス です。 LUUPのポートは街じゅうに広がっています。駅前や繁華街、住宅街や コンビニなど、近くのポートから好きなタイミングで借りて、好きな場所に 返すことができます。 毎日の最寄り駅までの移動や、「歩くには少し遠いな」と感じる場所へ向 かうこと、できれば避けたい坂道をのぼることも、 “早く・ラクに・気持ちの よい“ライドに変えることができます。 現在は、東京・大阪・横浜・京都・神戸・名古屋などで展開しており、さら に拡大を目指しています。
  5. Luup, Inc. - Confidential and Proprietary 9 0. 事業説明 1.

    LUUPでクライアントのSLOを設定する理由 2. LUUPでクライアントのSLOを設定するために行った取り組み 3. 今後の展望 4. まとめ
  6. Luup, Inc. - Confidential and Proprietary 10 なぜClient-side SLOの話が少ないのか? 多分こんな感じ?

    - コストの問題 - ユーザー側の都合に左右される問題 - ネットワーク問題 - 端末問題 - ユーザーの途中キャンセル問題 - “SRE” というロールのバックグラウンド/ケイパビリティの問題 - バックエンド/インフラ出身者が多く、慣れていないクライアントの信頼性に手を回すのが 遅れがち? - クライアントサイドでSLOを設定する必要がない場合がある - サービス自体の処理がAPIでほぼ完結する場合は計測する価値はあまりない https://www.usenix.org/conference/srecon17americas/program/presentation/chen
  7. Luup, Inc. - Confidential and Proprietary 11 なぜLUUPでClient-side SLOを設定するのか? 以下の動機があった

    - よりユーザーに近い部分で計測できる方が望ましい - クライアント側でAPIを介さずにFirestoreを叩いているケースがある - APIのみの計測だとここが漏れてしまう - APIを介さない処理を含めてユーザーに体験を提供できているかを計測したい - BLEでのアクションなど
  8. Luup, Inc. - Confidential and Proprietary 12 0. 事業説明 1.

    LUUPでクライアントのSLOを設定する理由 2. LUUPでクライアントのSLOを設定するために行った取り組み 3. 今後の展望 4. まとめ
  9. Luup, Inc. - Confidential and Proprietary 13 LUUPでClient-side SLOを設定するためにやったこと CUJの再設定

    PdM、SWEを巻き込んでCUJを再設定 SLIの設定 SLIの基となるメトリクスをDatadogにアップロード Latency SLIの閾値を決める 文化醸成 SLIを計測するDashboardの作成 SLI/SLOをWeeklyで確認する SLOの設定 Datadog Time Slice SLOの利用 SLOを複数作成 1 2 3 4
  10. Luup, Inc. - Confidential and Proprietary 14 0. 事業説明 1.

    LUUPでクライアントのSLOを設定する理由 2. LUUPでクライアントのSLOを設定するために行った取り組み - CUJの再設定 - SLIの設定 - 文化醸成 - SLOの設定 3. 今後の展望 4. まとめ
  11. Luup, Inc. - Confidential and Proprietary 15 CUJの再設定 なぜCUJを再設定する必要があったのか? -

    これまでSLOを運用してきたが、これもCUJを基に設定はしていた - サービス的に自明であるCUJを基にしていた - 施錠・解錠・ライド開始、ライド終了周り クライアントのSLOを設定するにあたって、サービスの全体観から考え直す サービスのユーザージャーニーを洗い出して、そこから議論しCUJを決める - ユーザージャーニー一覧を基に議論 - ユーザージャーニーマトリクスに結果をまとめた
  12. Luup, Inc. - Confidential and Proprietary 16 CUJの再設定 ユーザージャーニー一覧 -

    FigmaでPdMにユーザージャーニー一覧を作成してもらった - これを基にPdM、SWE、SREで議論する
  13. Luup, Inc. - Confidential and Proprietary 17 CUJの再設定 ユーザージャーニーマトリクス -

    PdM、SWE、SREで議論した結果を整理 - Enabling SLOではこれを更新していく
  14. Luup, Inc. - Confidential and Proprietary 18 0. 事業説明 1.

    LUUPでクライアントのSLOを設定する理由 2. LUUPでクライアントのSLOを設定するために行った取り組み - CUJの再設定 - SLIの設定 - 文化醸成 - SLOの設定 3. 今後の展望 4. まとめ
  15. Luup, Inc. - Confidential and Proprietary 19 SLIの設定 SLOを考えるうえで以下を設定することを検討 -

    Availability SLO - Latency SLO SLIは何にする? - iOS, Andoridで同様の目的で見ていた指標があるので、一旦これを活用する - Availability: Firebase Crashlytics - Latency: Firebase Performance Custom Trace
  16. Luup, Inc. - Confidential and Proprietary 20 SLIの設定 SLOを考えるうえで以下を設定することを検討 -

    Availability SLO - Latency SLO SLIは何にする? - iOS, Andoridで同様の目的で見ていた指標があるので、一旦これを活用する - Availability: Firebase Crashlytics → Datadog RUM - Latency: Firebase Performance Custom Trace → Datadog APM FirebaseではSLIを計測/SLOを設定できないので、Datadogにメトリクスをアップロードする - Datadog RUMはコスト等の観点から断念 - 上記の通り値を見ていないわけではないので、Latency SLOから進める(運用実績を作る)
  17. Luup, Inc. - Confidential and Proprietary 21 メトリクスをDatadogにアップロード Datadog SDKを使ってTraceをDatadogにアップロードする

    トライアルの実施はSREがメインで動いた - iOS, Androidチームサポートのもと、SREがSDKの導入・Traceの設定部分をコーディング
  18. Luup, Inc. - Confidential and Proprietary 22 SLI設計 Latency SLI

    Metricsを具体的に何にするか? - 本番環境のAPM Metrics(CUJの実行時間)の75%ile - Query; "p75:trace.<TRACE_NAME>{service:<SERVICE_NAME>, env:production}" “ユーザー側の都合に左右される問題” を除外したい そこにダイレクトに関連する変数である “Latency SLI Metrics の %ile値” の設定に悩んだ
  19. Luup, Inc. - Confidential and Proprietary 23 SLI設計 Latency SLI

    Metricsを具体的に何にするか? - 本番環境のAPM Metrics(CUJの実行時間)の75%ile - Query; "p75:trace.<TRACE_NAME>{service:<SERVICE_NAME>, env:production}" “ユーザー側の都合に左右される問題” を除外したい そこにダイレクトに関連する変数である “Latency SLI Metrics の %ile値” の設定に悩んだ なぜ 75%ile にしたのか?
  20. Luup, Inc. - Confidential and Proprietary 24 “Latency SLI Metrics

    の %ile値” の設定 同じような問題を抱えているWeb周りではどのように設定しているだろう?? Core Web Vitals の Good LCP Score で 75%ile を使っている! Core Web Vitals;Googleが提唱するユーザー体験の品質を測定するための主要な指標群 LCP;ページの主要なコンテンツ(通常は最大の画像やテキストブロック)が読み込まれて表示され るまでの時間 https://web.dev/articles/lcp#what-is-a-good-lcp-score
  21. Luup, Inc. - Confidential and Proprietary 25 0. 事業説明 1.

    LUUPでクライアントのSLOを設定する理由 2. LUUPでクライアントのSLOを設定するために行った取り組み - CUJの再設定 - SLIの設定 - 文化醸成 - SLOの設定 3. 今後の展望 4. まとめ
  22. Luup, Inc. - Confidential and Proprietary 26 文化醸成 Enablingしていく中で文化醸成や運用を軌道に乗せる部分が一番重要 これらを進めるために以下の活動を実施した

    1. SLIを見るためのダッシュボードを作成 SLOを設定するための情報を集めたい、SLI(値自体)を馴染みがあるものにしたい 2. SLI/SLOをWeeklyで確認 SLO(文化・考え方)/SLI(値自体)を馴染みがあるものにしたい
  23. Luup, Inc. - Confidential and Proprietary 27 SLIを見るためのダッシュボードを作成 SLIの詳細を確認するためにダッシュボードを作成 -

    PdM/SWEがイメージしやすいようCUJごとにグルーピング - iOSとAndroidのパフォーマンスを比較しやすいようにグラフを横に並べる
  24. Luup, Inc. - Confidential and Proprietary 28 SLI/SLOをWeeklyで確認 SLI/SLOを意識するためにWeeklyでダッシュボードを確認 -

    SREがファシリテーションし、サマリーを共有 - CUJ、SLI、SLOの妥当性、パフォーマンスについて議論
  25. Luup, Inc. - Confidential and Proprietary 29 0. 事業説明 1.

    LUUPでクライアントのSLOを設定する理由 2. LUUPでクライアントのSLOを設定するために行った取り組み - CUJの再設定 - SLIの設定 - 文化醸成 - SLOの設定 3. 今後の展望 4. まとめ
  26. Luup, Inc. - Confidential and Proprietary 30 SLOの設定 SLOを実際に設定、作成していく中で運用を考慮して作成方法を考える必要がある これを進めるために以下の活動を実施した

    1. DatadogでのSLOの作成 Time Slice SLOの選択 2. Multi-tiered SLOs SLOを決める際にSLOの値の意味・決める基準について熟考 1つのSLIに対して複数のSLOを作成
  27. Luup, Inc. - Confidential and Proprietary 31 DatadogでのSLOの作成 APIのLatency SLOではMonitor-based

    SLOを使用していたが、今回Time Slice SLOを検討した - Monitor-based SLOを使用していた段階ではTime Slice SLOはGAしていない - Time Slice SLOは2024年5月2日にGA https://app.datadoghq.com/release-notes/time-slice-slos-are-now-generally-available https://docs.datadoghq.com/service_management/service_level_objectives/guide/slo_types_comparison/ Monitor-based SLO Time Slice SLO SLI を時間ベースで計算したい場合に使用でき、 SLI はモニターのアップタイムを基にしています 。モニ ターベースの SLO は新規または既存の Datadog モ ニターに基づく必要があり、調整はそのモニターに対 して行う必要があります (SLO の作成時にはできま せん)。 SLI を時間ベースで計算したい場合に使用でき、 SLI はカスタムアップタイム定義 (システムが正常な動 作を示した時間を合計時間で割ったもの ) に基づき ます。タイムスライス SLO は、Datadog モニターを 必要とせず、さまざまなメトリクスフィルターとしきい 値を試して、SLO 作成中にダウンタイムを即座に調 査することができます。
  28. Luup, Inc. - Confidential and Proprietary 32 Datadog Time Slice

    SLOの採用 Time Slice SLOを採用した - Datadog SLOの利用できる機能の多さ - Datadog SLOの多くの機能を利用できる - Graph historical SLO data, SLO calendar view等 - データポイントの評価方法 - 最小1分単位の時間スライスを評価するので詳細にパフォーマンスを評価できる - 短期的なパフォーマンス変動が重要なアプリケーションではないので、割合によって値が 丸められることを許容する https://docs.datadoghq.com/service_management/service_level_objectives/#slo-calendar-view
  29. Luup, Inc. - Confidential and Proprietary 33 Multi-tiered SLOs PdMがイメージしやすいように1つのSLIに複数のSLOを作成

    - Upside, Downside, Actual の3つのSLOを作成した - 基本的にはDownside SLOを見ていくことになる Upside SLO Downside SLO Actual SLO 将来的に目指す水準 理想値であり、現実との乖離 を確認するためにSLOを計測 する (e.g., 99%, 1sec) 現実的に割りたくない水準 現状はこのSLOを注視、運用 していくことになる (e.g., 99%, 3sec) 実測値を基にSLOを設定 Downsideを割ってしまってい る一部SLOのみ作成 (e.g., 99% 5sec) https://blog.alexewerlof.com/p/multi-tiered-slos
  30. Luup, Inc. - Confidential and Proprietary 34 SLOの運用 Phase Now

    Near Future Actual is gone Future Downside is gone SLO Type / Role PdM SWE PdM SWE PdM SWE Upside ◎ ◯ ◎ ◯ ◎ ◎ Downside ◯ ◎ ◯ ◎ - - Actual ◯ ◎ - - - - フェーズごとにそれぞれのロールで意識するSLOが変わってくる - ◎:強く意識する、◯:意識する
  31. Luup, Inc. - Confidential and Proprietary 35 0. 事業説明 1.

    LUUPでクライアントのSLOを設定する理由 2. LUUPでクライアントのSLOを設定するために行った取り組み 3. 今後の展望 4. まとめ
  32. Luup, Inc. - Confidential and Proprietary 36 今後の展望 アラート設定 -

    Burn Rate Alertの調整 - SLOの補助アラートの追加 運用 - Actual廃止 - Downsideだけ見る状態にする - APIのSLOとの接続 SLOの追加 - Client-side Availability SLOの追加
  33. Luup, Inc. - Confidential and Proprietary 37 0. 事業説明 1.

    LUUPでクライアントのSLOを設定する理由 2. LUUPでクライアントのSLOを設定するために行った取り組み 3. 今後の展望 4. まとめ
  34. Luup, Inc. - Confidential and Proprietary 38 まとめ - クライアントのSLOを導入するときにやったことについて紹介しました

    - CUJの再設定、SLIの設定、文化醸成、SLOの設定 - 一緒に進めるPdMやSWEの立場に立つことが重要 - SLI/SLOはあくまでもツールなので、振り回されないこと - 最適な方法は探っていく必要がある - SLOの課題やプラクティスについて語りましょう! - クライアントのSLOの話をしましたが、IoTのSREの話も歓迎です! - #srenext, #srenext_b, @gr1m0h, Ask the Speaker 等で!
  35. Luup, Inc. - Confidential and Proprietary 39 Ref. - SRE

    NEXT 2023 - https://sre-next.dev/2023/ - Engineering Reliable Mobile Applications - SREcon17 Americas / USENIX - https://www.usenix.org/conference/srecon17americas/program/presentation/chen - Largest Contentful Paint(LCP)- web.dev - https://web.dev/articles/lcp#what-is-a-good-lcp-score - Datadog - https://app.datadoghq.com/release-notes/time-slice-slos-are-now-generally-availa ble - https://docs.datadoghq.com/service_management/service_level_objectives/guide/s lo_types_comparison/ - https://docs.datadoghq.com/service_management/service_level_objectives/ - Multi-tiered SLOs - Alex Ewerlöf Notes - https://blog.alexewerlof.com/p/multi-tiered-slos