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

Merpay Tech Fest 2021_メルペイにおけるSLOの活用事例 - 信頼性を定義しよう / Use case of SLOs in Merpay Let’s Define Reliability

mercari
July 29, 2021

Merpay Tech Fest 2021_メルペイにおけるSLOの活用事例 - 信頼性を定義しよう / Use case of SLOs in Merpay Let’s Define Reliability

Merpay Tech Fest 2021は5日間のオンライン技術カンファレンスです。

IT企業で働くソフトウェアエンジニアおよびメルペイの技術スタックに興味がある方々を対象に2021年7月26日(月)から7月30日(金)までの5日間、開催します。 Merpay Tech Festは事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知れるお祭りです。 セッションでは事業を支える組織・技術・課題などへの試行錯誤やアプローチを紹介予定です。お楽しみに!

■イベント関連情報
- 公式ウェブサイト:https://events.merpay.com/techfest-2021/
- 申し込みページ:https://mercari.connpass.com/event/215035/
- Twitterハッシュタグ: #MerpayTechFest

■リンク集
- メルカリ・メルペイイベント一覧:https://mercari.connpass.com/
- メルカリキャリアサイト:https://careers.mercari.com/
- メルカリエンジニアリングブログ:https://engineering.mercari.com/blog/
- メルカリエンジニア向けTwitterアカウント:https://twitter.com/mercaridevjp
- 株式会社メルペイ:https://jp.merpay.com/

mercari

July 29, 2021
Tweet

More Decks by mercari

Other Decks in Technology

Transcript

  1. #MerpayTechFest Platform Engineering Div. SRE Team Kosuke Adachi 2019年入社、サービスの品質を担保するための仕組みづくりや、 SLOを設定す

    るための基盤を開発。最近は SLOをベースにしたモニタリング周りの整備に取り 組んでいる。趣味はキーボードをつくること。
  2. #MerpayTechFest お客さまの期待値とサービスの信頼性 お客さま の体験 信頼性の目標 信頼性が低く 体験が悪い状態 参考: Shrinking the

    impact of production incidents using SRE principles—CRE Life Lessons 目標以上の信頼性を実現するに は高いコストと時間がかかる 信頼性 (&コスト) お客さまの期待値とコストとのバ ランスが取れている
  3. #MerpayTechFest 信頼性の目標を決める SLO (Service Level Objective) 理想的なSLO = お客さまの期待値とコストとのバランスが 取れる目標

    SLOを決める = 目指す信頼性を決めるだけでなく、 次のサービス成長へのチャンスを作る
  4. #MerpayTechFest SLI (Service Level Indicator) 可用性: 成功したリクエストの割合 Load Balancer Service

    A HTTP requests HTTP responses ログ収集 SLI = 200 OK リクエスト / リクエスト総数
  5. #MerpayTechFest SLO (Service Level Objective) Request-based SLO (Metric-based SLO) Window-based

    SLO (Monitor-based SLO) 参考 GCP: Concepts in service monitoring | Operations Suite Datadog: サービスレベル目標 成功したリクエストの割合が30日間で99.9% 100ms以内で完了したリクエストの割合が7日間で99% 正常に稼働している時間の割合が30日間で99.9% 99%ileが100ms以下である時間の割合が7日間で99%
  6. #MerpayTechFest SLO (Service Level Objective) 可用性: 成功したリクエストの割合が30日間で99.9% SLI = 200

    OK リクエスト / リクエスト総数 30日間計測 例: 100 rpsのエンドポイントの場合 リクエスト総数 = 100 * 60 * 60 * 24 * 30 = 259,200,000 SLO 99.9% = リクエスト総数 * 0.999 = 258,940,800 許容できる異常リクエスト = リクエスト総数 * (1-0.999) = 259,200
  7. #MerpayTechFest Error Budget SLO: 成功したリクエストの割合が30日間で99.9% どのぐらいで使い果たすか 100 rps のエンドポイントの場合 Error

    Budget = 259,200 例: デプロイミスでエラー率が100%になる → 2,592秒 = 43.2分 バグを仕込んでエラー率が1%になる → 259,200秒 = 3日
  8. #MerpayTechFest Project GKE マイクロサービスアーキテクチャとSLO Load Balancer Google Kubernetes Engine API

    Gateway Authority API Service X API Service Y Service A Service B Service C Client
  9. #MerpayTechFest Project GKE マイクロサービスアーキテクチャとSLO Load Balancer Google Kubernetes Engine API

    Gateway Authority API Service X API Service Y Service A Service B Service C Client Dev team A Dev team B Dev team C Dev team D
  10. #MerpayTechFest Project GKE マイクロサービスアーキテクチャとSLO Load Balancer Google Kubernetes Engine API

    Gateway Authority API Service X API Service Y Service A Service B Service C Client Dev team A Dev team B Dev team C Dev team D 各開発チームが担当マイクロサービスのエン ドポイント毎にSLOを設定/運用している
  11. #MerpayTechFest マイクロサービスとSLI Goアプリケーション内で独自のメトリクスを収集 Service A Service B gPRC grpc.UnaryInterceptor •

    go-microservices-kit.datadog.grpc.UnaryInterceptor Datadog custom metrics • mercari.grpc_server.handled.count • mercari.grpc_server.handled.duration SLIとして利用する情報を収集 ※ The Go gopher was designed by Renée French.
  12. #MerpayTechFest マイクロサービスとSLO Service A serviceId: merpay-service-a teamName: merpay-dev-1 service_level: service_level_objectives:

    - definition: time_window: MONTHLY objective: "P99_99" request_availability: protocol: GRPC exclude_status_codes: - "not_found" - "invalid_argument" selector: - grpc_methods: 省略 - definition: time_window: MONTHLY objective: "P99_9" request_latency: protocol: HTTP threshold_ms: 200 percentile: "P99" selector: - http_services: 省略 Spec Microserviceに関する 情報をyamlで定義 成功したgPRCリクエストの 割合が30日間で99.99% HTTPリクエストの99%ileレ イテンシが200ms以下であ る時間の割合が30日間で 99.9%
  13. #MerpayTechFest アラートは鳴りすぎていないか あらゆるメトリクスに対してモニタリングしている CPU使用率 / メモリ使用率 / ネットワークI/O / LA

    etc… これらの数値を監視してアラートを鳴らす必要はあるか? システムの状態を知るのに有力なメトリクスではあるが、必ずし もお客さまに影響が出るわけではない
  14. #MerpayTechFest SLOを基準としたアラート お客さま の体験 SLO SLOが達成できな いとお客さまの満足 度が下がる SLOが達成できるとお客さまの体 験が良い

    信頼性 ここより下がる前にアラートを鳴ら して気付く必要がある 参考: Shrinking the impact of production incidents using SRE principles—CRE Life Lessons
  15. #MerpayTechFest SLOを基準としたアラート お客さま の体験 SLO Error Budget が 枯渇している状態 Error

    Budgetが残っている状 態 信頼性 Error Budget が 0 の状態 参考: Shrinking the impact of production incidents using SRE principles—CRE Life Lessons
  16. #MerpayTechFest SLOアラートの手法 Burn Rate に基づいたアラート SLO: 成功したリクエストの割合が30日間で99.9% Error Budgetの消費速度(Burn Rate)で考える

    1時間でError Budgetの2%を消費したらアラート 例: 100 rps のエンドポイントの場合、Error Budget * 0.02 = 5,184 エラー を超えるとアラート
  17. #MerpayTechFest SLOアラートの手法の選択 Terraform module で SLO アラートの手法を選択可能に Service A Spec

    Service B Spec slo-module monitor_type = { availability = { name= "multi-window-multi-burnrate" } }