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

20180830 Merpay Microservices Platform

tjun
August 30, 2018

20180830 Merpay Microservices Platform

tjun

August 30, 2018
Tweet

More Decks by tjun

Other Decks in Technology

Transcript

  1. 3 Merpayのアーキテクチャ 01 今日の目次 02 • Microservice アーキテクチャ Microservicesの構築 •

    構成管理 • CI/CD Copyright © Merpay, Inc. All Rights Reserved. 03 Microservicesの運用 • 運用の仕組みづくり • 運用体制
  2. Microservices • Scaleする組織&サービスに耐えられるアーキテクチャ • 機能やデータをサービスごとに分離できる ◦ コードが分かれている(当たり前) ◦ チームが分かれている ◦

    データベースが分かれている ◦ Kubernetesのnamespaceが分かれている ◦ GCPのprojectが分かれている サービスの安定性・安全性を実現するために重要
  3. MerpayのMicroservices • ほとんどはGoで書かれている ◦ Go microservice templateのようなコードがある • gRPCでやりとり ◦

    protoファイルで定義を決めて共有できる ◦ 多言語対応が比較的カンタン • APIレイヤを分離することで、各サービスはサービスの機能に専念 できる ◦ クライアントを意識するのはAPIレイヤの仕事
  4. GKE(Google Kubernetes Engine) • Microserviceのための機能 ◦ Namespace ◦ Secret ◦

    RBAC ◦ Managed Istio(まだ使ってない) • 運用が楽になるための機能 ◦ Managed kubernetes ◦ Update/Rollback ◦ Load balance & Autoscale ◦ Auto repair
  5. Merpay API Gateway (+GLB) • RequestのRouting + Protocol transform(後述) •

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

    API Gateway自体もGKE上に動いている • ObservabilityはMicroserviceでは重要 ◦ ErrorRateやLatancyがサービスの信頼性の指標になる
  7. API GatewayのProtocol Transform 3rd Party Merpay API Gateway API API

    Browser App gRPC HTTP + Protobuf HTTP + JSON RESTful API
  8. Microservice Platform team @mercari • Microservices Platform = GCP, GKEとその周りの仕組み

    ◦ MerpayのサービスはMicroservicesPlatform上に構築 • Merpay SREはPlatform側の改善にも参加する
  9. CI/CD • CI ◦ GitHubのPRベースの開発 ◦ CircleCIまたは CloudBuildでCI ◦ GoogleDockerRegistryにImageをPush

    • CD ◦ SpinnakerでKubernetesのnamespaceに対してdeploy ◦ 開発者自身がdeployを行える ◦ Canary releaseなどの機能も今後利用していく
  10. Bootstrap & Ops with Terraform • 新たなserviceを作るとき `./script/new` コマンドで ◦

    GCP Project ◦ Kubernetes namespace ◦ Sentry/Pagerduty などを作成し、紐付けするPullRequestを自動生成するstarter-kitがあ る • Databaseの追加やIAMの追加などインフラに対する変更をTerraformの コードで管理・レビューできる
  11. GCP project for GKE Centralized cluster Namespace: Service A Namespace:

    Service B IAM: SRE IAM: Team A Service A Service B RBAC: Team A RBAC: Team B Bootstrap Bootstrap IAM: Team B
  12. Platform Security • EndPointをAPI Gatewayに集約 • Serviceごとにコードやデータを分離 • 権限を持つチームメンバをコードで管理&Review •

    GCP, Kubernetes, SpinnakerなどのAudit Loggingとその監視 • 各レイヤでのセキュリティ対策や監視 ◦ Deploy, Container Image ◦ Kubernetes Cluster, Pod ◦ GCP(Database, Network)
  13. 運用体制イメージ サービスに関する問題 • Error • Latency • DB • 問い合わせ

    Service Alert PlatformやInfraの問題 • kubernetes • Gateway • GCPまわり Platform Alert Service Team SRE (Sinmetal) Microservice Platform Team GCP
  14. 運用の仕組みの共通化 • SLO: サービスが信頼できる状態かどうか判断するための指標 ◦ 例: Gatewayで測定して、あるAPIのRequestの成功率が99.99% ◦ 指標がないと、何を直すのか、いつ緊急対応するのかの判断ができない •

    ツールの共通化 ◦ ログ: StackDriver & BigQuery, メトリクス: Datadog, エラー通知: Sentry, 当番通 知: Pagerduty ◦ Microservice starter-kitで自動で各サービスのTeamやProjectなどが生成され る