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

microservices and monitoring @Merpay

Komazaki
October 31, 2018

microservices and monitoring @Merpay

Komazaki

October 31, 2018
Tweet

More Decks by Komazaki

Other Decks in Technology

Transcript

  1. 3 Merpayにおけるアーキテクチャと組織 01 今日の目次 02 • アーキテクチャと組織 • 開発者を支える取り組み •

    SREの取り組み Monitoring • Monitoring基盤のコンセプト • Metrics Driven • AlertとTicket Copyright © Merpay, Inc. All Rights Reserved.
  2. アーキテクチャのポイント Merpay API Gateway API microservice A microservice B microservice

    C API Clients (API) Mercari App Clients (Browser) CDN 1. 基本的に4階層構造を取る 2. Microservices 3. GKE(Google Kubernetes Engine) 4. API Gateway
  3. Microservicesアーキテクチャと組織 • Scaleするサービス&組織に耐えられるアーキテクチャ • 機能やデータをサービスごとに分離し、それぞれがOwnershipをもっ て開発を進められる ◦ コードが分かれている ◦ チームが分かれている

    ◦ データベースが分かれている ◦ Kubernetesのnamespaceが分かれている ◦ GCPのprojectが分かれている サービスと組織の安定性・安全性・迅速な成長を 実現するために重要
  4. namespace Merpay Architecture and Org. Structure API Kubernetes Engine namespace

    API namespace microservice C namespace microservice B namespace microservice A namespace Merpay API Gateway • repository • team Cloud Spanner • repository • team Cloud Pub/Sub Cloud SQL Stackdriver Monitoring Logging BigQuery Cloud Load Balancing … + + Project for Centralized GKE Cluster
  5. gRPC / Common function • mercari-echo-jp ◦ Monitoring server for

    liveness/readiness probe ◦ error reporting ◦ dockerfile ◦ CI Settings ◦ … • これをMicroservice共通の実装として、各チームがforkし Microserviceを実装していく 初期実装の敷居を低くしつつ、 安定化のための機能を自ずと持つようにしている
  6. API GatewayのProtocol Transform 3rd Party Merpay API Gateway API API

    Browser App gRPC HTTP + Protobuf HTTP + JSON RESTful API
  7. Merpay API Gateway (+GLB) • RequestのRouting + Protocol transform •

    共通のEndpoint処理 ◦ DDoS Protection(GLB) ◦ TLS Termination(GLB) ◦ Authentication ◦ Buffering • Observability ◦ Logging & Tracing 参考: 「API GatewayによるMicroservices化」 by deeeet
  8. API Gatewayの特徴 • メルカリのAPI Gatewayとcoreは同じ ◦ もともとcoreがGoのpkgとして実装されている ◦ coreの上にMerpayのロジックを載せている •

    API Gateway自体もGKE上に動いている • ObservabilityはMicroserviceでは重要 ◦ ErrorRateやLatancyがサービスの信頼性の指標になる
  9. Infrastructure as Code • 中央管理のリポジトリで全てのMicroservice用のProjectの管理を行 う • ディレクトリ:Microserviceを1:1対応させる ◦ CODEOWNERを適切に設定することができるので、

    チーム内でのReview/Approveを加速させることが出来る terraform/ ├──microservice-A ├──microservice-B … Cloud Spanner Cloud Pub/Sub Cloud SQL Project: microservie-A Project: microservie-B
  10. Service A Infrastructure as Code Cloud SQL Developers SRE Pull

    Request Review Terraform plan tfnotifyを使ってGithub PR上でTerraform Plan結果を確認できるようにしている (OSSとして公開中: github.com/mercari/tfnotify)
  11. Service A Infrastructure as Code Cloud SQL Developers Service B

    Developers SRE Pull Request Cloud Spanner Cloud Pub/Sub Pull Request Review Service A Cloud SQL Developers Service B Developers Cloud Spanner Cloud Pub/Sub Pull Request Pull Request Bottleneck!? Terraform plan / apply
  12. Service A Infrastructure as Code Cloud SQL Developers Service B

    Developers SRE Pull Request Cloud Spanner Cloud Pub/Sub Pull Request & Review / Approve Review Service A Cloud SQL Developers Service B Developers Cloud Spanner Cloud Pub/Sub Terraform plan / apply Pull Request CODEOWNER CODEOWNER Pull Request & Review / Approve CODEOWNERを適切に渡すことでSREがBottleneckになることを防ぐ
  13. Application Performance Monitoring Monitoring Chaos Map Analyzation External Monitoring Infrastructure

    Monitoring Application Bug Tracking Notification/Call ※ 順不同 弊社での活用例(検証中含む)
  14. Metrics Driven Development 適切なモニタリングを行うために、あらゆる事象を特徴の異なる3つの指標にグルーピングすること を推奨している 種類 例 特徴 Work Metrics

    • Throughput • Success • Error • Performance ユーザに一番分かりやすく、 CVなどに影響 → 閲覧が…できる/できない → 表示までの速度が…速い/遅い これが悪化したらすぐに直さないといけない Resource Metrics • Utilization • Saturation • (Internal) Error • Availability これが悪化するとWork Metricsに影響が出るもの の、すぐに影響する訳ではない これが悪化したらいつか直さないといけない Events • CI/CDジョブの実行 • CM、広告 Work / Resource両方のMetricsに影響が出る
  15. SLI / SLO Determination 何をMonitoringするかはSLI/SLO(SLA)を定義することでハッキリする • SLO(Service Level Objective): サービスレベル指標

    • SLI(Service Level Indicator): サービスレベル目標 • SLA(Service Level Agreement): サービスレベル合意(品質保障) SLI/SLOの例: 1. Availability: 1時間測定し99.99%のリクエストが正常な結果 (Status: 200, 300系, 400 系) を返す 2. Latency: 1時間測定してBackendへの99%のリクエストが 150msec以内に返る 3. Quality: Sentryで10分測定して、想定外のエラー率が 0.1%以下である
  16. Alert or Ticket さらに、Monitoringはすぐに対応しないといけないAlertと いつか対応すれば良いTicketに分離することができる。 実はWork MetricsとResource Metricsがそれぞれに対応する。 • Work

    Metrics: Alert • Resource Metrics: Ticket おさらい: • Work Metrics: ユーザに目に見えるMetrics (e.g.アクセス出来る/出来ない) • Resource Metrics: ユーザに目に見えないMetrics (e.g. CPU usage)
  17. Stack x SLI/SLO x Alert or Ticket Application Performance Monitoring

    Analyzation External Monitoring Infrastructure Monitoring Application Bug Tracking Notification/Call Work Metrics =Alert Resource Metrics =Ticket •Server up time •process stuck •cluster failure •cpu usage •mem usage •disk usage Work Metrics =Alert Resource Metrics =Ticket •error rate •99th % duration •cpu usage •mem usage •queue length Work Metrics =Alert Resource Metrics =Ticket •error rate •unknown error •well-known error Work Metrics =Alert Resource Metrics =Ticket •error rate •99th % duration •cert expiration •rendering time まずはMonitoringできるMetricsを一覧し、Work / Resourceに分類する
  18. Stack x SLI/SLO x Alert or Ticket Application Performance Monitoring

    Analyzation External Monitoring Infrastructure Monitoring Application Bug Tracking Notification/Call Work Metrics =Alert Resource Metrics =Ticket •Server up time •process stuck •cluster failure •cpu usage •mem usage •disk usage Work Metrics =Alert Resource Metrics =Ticket •error rate •99th % duration •cpu usage •mem usage •queue length Work Metrics =Alert Resource Metrics =Ticket •error rate •unknown error •well-known error Work Metrics =Alert Resource Metrics =Ticket •error rate •99th % duration •cert expiration •rendering time •cache hit rate 次にSLO損失に繋がるMetricsをピックアップする
  19. Stack x SLI/SLO x Alert or Ticket Application Performance Monitoring

    Analyzation External Monitoring Infrastructure Monitoring Application Bug Tracking Notification/Call Work Metrics =Alert Resource Metrics =Ticket •Server up time •process stuck •cluster failure •cpu usage •mem usage •disk usage Work Metrics =Alert Resource Metrics =Ticket •error rate •99th % duration •cpu usage •mem usage •queue length Work Metrics =Alert Resource Metrics =Ticket •error rate •unknown error •well-known error Work Metrics =Alert Resource Metrics =Ticket •error rate •99th % duration •cert expiration •rendering time •cache hit rate SLO損失=電話を検討する Engineer
  20. Stack x SLI/SLO x Alert or Ticket Application Performance Monitoring

    Analyzation External Monitoring Infrastructure Monitoring Application Bug Tracking Notification/Call Work Metrics =Alert Resource Metrics =Ticket •Server up time •process stuck •cluster failure •cpu usage •mem usage •disk usage Work Metrics =Alert Resource Metrics =Ticket •error rate •99th % duration •cpu usage •mem usage •queue length Work Metrics =Alert Resource Metrics =Ticket •error rate •unknown error •well-known error Work Metrics =Alert Resource Metrics =Ticket •error rate •99th % duration •cert expiration •rendering time •cache hit rate Resource Metricsの悪化は放っておくとSLO損失に繋がるのでTicket管理する
  21. 運用体制イメージ サービスに関する問題 • Error • Latency • DB • 問い合わせ

    Service Alert PlatformやInfraの問題 • kubernetes • Gateway • GCPまわり Platform Alert Service Team SRE • Sinmetal(GCP Hero) • Google Support Microservice Platform Team GCP
  22. まとめ MerpayのSREは • Microservice Platformを使ったサービス運用を行うチームです • Microservice Platform自体の改善にも参加しています • 安定化にもコミットしています

    GCPやりたい人、KubernetesやMicroserviceやりたい人、DB, Network, Securityなどが 得意な人、ぜひ一緒にやりましょう!! Merpay 採用ページの SiteReliability までお願いします We are hiring!!!