Slide 1

Slide 1 text

機密・専有情報 株式会社Luupによる個別の明示的な承諾を得ることなく、この資料を使用することを固く禁じます。 Wataru Tsuda / gr1m0h 2024.8.04 SRE NEXT 2024 Track B Enabling Client-side SLO

Slide 2

Slide 2 text

Luup, Inc. - Confidential and Proprietary 2 whoami Wataru Tsuda / gr1m0h Reliability Engineer @Luup,inc. SRE Lounge / SRE NEXT Organizar Platform Engineering Meetup Organizar

Slide 3

Slide 3 text

Luup, Inc. - Confidential and Proprietary 3 #srenext #srenext_b

Slide 4

Slide 4 text

Luup, Inc. - Confidential and Proprietary 4

Slide 5

Slide 5 text

Luup, Inc. - Confidential and Proprietary 5 https://sre-next.dev/2023/schedule/#jp027 Enabling SLO

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Luup, Inc. - Confidential and Proprietary 11 なぜLUUPでClient-side SLOを設定するのか? 以下の動機があった - よりユーザーに近い部分で計測できる方が望ましい - クライアント側でAPIを介さずにFirestoreを叩いているケースがある - APIのみの計測だとここが漏れてしまう - APIを介さない処理を含めてユーザーに体験を提供できているかを計測したい - BLEでのアクションなど

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Luup, Inc. - Confidential and Proprietary 17 CUJの再設定 ユーザージャーニーマトリクス - PdM、SWE、SREで議論した結果を整理 - Enabling SLOではこれを更新していく

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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から進める(運用実績を作る)

Slide 21

Slide 21 text

Luup, Inc. - Confidential and Proprietary 21 メトリクスをDatadogにアップロード Datadog SDKを使ってTraceをDatadogにアップロードする トライアルの実施はSREがメインで動いた - iOS, Androidチームサポートのもと、SREがSDKの導入・Traceの設定部分をコーディング

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Luup, Inc. - Confidential and Proprietary 26 文化醸成 Enablingしていく中で文化醸成や運用を軌道に乗せる部分が一番重要 これらを進めるために以下の活動を実施した 1. SLIを見るためのダッシュボードを作成 SLOを設定するための情報を集めたい、SLI(値自体)を馴染みがあるものにしたい 2. SLI/SLOをWeeklyで確認 SLO(文化・考え方)/SLI(値自体)を馴染みがあるものにしたい

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Luup, Inc. - Confidential and Proprietary 28 SLI/SLOをWeeklyで確認 SLI/SLOを意識するためにWeeklyでダッシュボードを確認 - SREがファシリテーションし、サマリーを共有 - CUJ、SLI、SLOの妥当性、パフォーマンスについて議論

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Luup, Inc. - Confidential and Proprietary 30 SLOの設定 SLOを実際に設定、作成していく中で運用を考慮して作成方法を考える必要がある これを進めるために以下の活動を実施した 1. DatadogでのSLOの作成 Time Slice SLOの選択 2. Multi-tiered SLOs SLOを決める際にSLOの値の意味・決める基準について熟考 1つのSLIに対して複数のSLOを作成

Slide 31

Slide 31 text

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 作成中にダウンタイムを即座に調 査することができます。

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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が変わってくる - ◎:強く意識する、◯:意識する

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

Luup, Inc. - Confidential and Proprietary 36 今後の展望 アラート設定 - Burn Rate Alertの調整 - SLOの補助アラートの追加 運用 - Actual廃止 - Downsideだけ見る状態にする - APIのSLOとの接続 SLOの追加 - Client-side Availability SLOの追加

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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 等で!

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

一緒に、街じゅうを「駅前化」する インフラをつくりませんか? 詳細は採用ページをご覧ください https://recruit.luup.sc/

Slide 41

Slide 41 text

No content