merpay インフラTALK!
merpay で使われている GCP Service
@sinmetal san
Solution Team 所属
何かの得意領域を持つエンジニア
いろんなレイヤーの人間がいる
GCP サービス色々使ってます
merpay の 8 割が Cloud Spanner を使ってる
Application Logic は GKE
Spanner を選択した理由
まずは Cloud SQL を使おうとする
Scalabirity, Avillability, Full Managed
DB で重視していたこと
Performance
一度の決済で複数の API を実行しているため WRITE が多い
Availability
止めると決済できない
Full Managed
@kazeburo san いない
Cloud SQL
Performance
Network Disk がボトルネック
秒間 400 件ぐらいから厳しい
Availabirity
3ヶ月に1回ぐらい Master Node のメンテがある
数分間止まる
MySQL on GCE
自分らで全部やらないといけない
DBA がいないとつらい
Google Cloud Datastore
P
Datastore 全体で共有しているので Performance にブレがある
A
非常に高い
F
できる
Google Cloud Spanner
全部満たす
GCP にしかないサービス
ノウハウがあまりない
Spanner の Unit Test
公式の emulator が存在しない
実際に Soanner を動かして Unit Test を行う
Go の UnitTest とコンフリクトするとつらい
DB, Table, Index を作成するのに時間がかかることがあるので、Unit Test が詰まることがある
Spanner の UnitTest の高速化
事前に Spanner に DB をたくさん作っておく
Region には気をつける
CI と Spanner は同 Region がいいよね
Spanner の Table 設計
自分のアプリケーションのユースケースに合わせて、最適な設計をすることが重要
PK 戦略
INDEX の戦略
Merpay の Microservice 基盤
@tjun san
Merpay のアーキテクチャのポイント
Microserives
GKE
API Gateway
MIcroservices
Scale する組織 & サービスに耐えられるアーキテクチャ
機能やデータをサービスごとに分離できる
コード、チーム、DB が分かれている
k8s の namespace が分かれている
GCP の project が分かれている
ほとんどは Go で書かれている
Go microservice template のようなコードがある
gRPC でやりとり
proto ファイルで定義を決めて共有できる
多言語対応が簡単
API レイヤを分離することで、各サービスはサービスの機能に専念できる
GKE
Microservice のための機能
Namespace
権限管理ができる
Secret
秘匿情報をどうやってサービスに持たせるか
RBAC
Managed Istio
運用が楽になる機能がある
Merpay API Gateway
Request の Routing + Protocol transform
共通の Endpoint 処理
Observability
Logging & Tracing
API Gateway の特徴
メルペイの API Gateway と core は同じ
core の上に merpay のロジックを載せる
Protocol Transform
色々な形式のリクエストを受けて API に流す
CI/CD
CI
CircleCI or CloudBuild
GoogleDockerRegistry に Image を push
CD
Spineker
Bootstrap & Ops with Terraform
新たな serivice を作るときは starter-kit を使って作成する
GCP Project
Terraform
microservices の運用
各サービスのバックエンドのデベロッパーがアラートを受ける
解決できないときは SRE を呼ぶ
Cluster, Geteway のことは SRE で管理
運用の仕組みの共通化
SRE や他のチームがサポートするための共通化
ルールの共通化: SLO を決めよう
サービスが信頼できる状態かどうか判断するための指標
ツールの共通化: Datadog, Sentry, Pagerduty
Merpay のデータ収集基盤
@syu_cream san
merpay DataPipeline 概要
Data Pipeline という土管を作る
シンプルな世界を実現してあげる
共通処理が差し込める
batch vs stream
どちらもサポート!
Schema Registry
ProtocolBuffer でログのスキーマを予め定義
将来的にはmeracri のデータもコントロールしていきたい
Scale で作るデータパイプライン
@laughingman7743 san
Scio, ScalaPB
proto
any 型: なんでもいれられる
Scala 強い...
Scala で書くメリット
簡潔な記述で複雑な処理を書ける
豊富なコレクション操作メソッド、協力なパターンマッチング
Optional, Try, Either 等エラーハンドリングがしやすい
ジェネリックプログラミング
関数型はほどほどに(ベターJava の認識で
merpay で Scala 書けるのは 2人