Slide 1

Slide 1 text

メルコイン決済マ イクロサービスの トランザクション 管理を支える技 術 メルコイン決済マイクロサービスのトラ ンザクション管理を支える技術 susho Merpay Payment Platform Team Session Title

Slide 2

Slide 2 text

Shota Suzuki / @susho 2018年メルペイ入社。iD, コード決済のマイ クロサービスを開発し、現在はメルコインの 決済、会計のマイクロサービスを開発してい る。 株式会社メルペイ Backend Engineer

Slide 3

Slide 3 text

メルコイン決済マイクロサービスとは 01 トランザクション管理 02 リコンサイル 03 まとめ 04 アジェンダ

Slide 4

Slide 4 text

メルコイン決済マイクロサービスとは 01 トランザクション管理 02 リコンサイル 03 まとめ 04 アジェンダ

Slide 5

Slide 5 text

メルコイン決済マイクロサービスとは お客さまの決済処理を担うマイクロサービス。 主に下記のようなユースケースが存在する。 ● メルペイ残高からメルコイン残高への入金 ● メルコイン残高からメルペイ残高への出金 ● メルコイン残高/メルカリポイントを利用した暗号資産購入 ● 暗号資産売却 ● など

Slide 6

Slide 6 text

メルコイン決済マイクロサービスとは 01 トランザクション管理 02 リコンサイル 03 まとめ 04 アジェンダ

Slide 7

Slide 7 text

トランザクション管理 マイクロサービスを跨いだトランザクションでは、マイクロサービスがそれぞれの DBを持っているため、依存先マイクロサービスのDBのロールバックを実行する ことができない。 2フェーズコミットに代表される分散トランザクションは、リソースの状態をロック する必要があるため、サービスの可用性が下がる可能性がある。そのため、実 行した操作を取り消すビジネスロジックを補償トランザクションとして実装し、そ れらを最後まで順次実行する結果整合性の手法を取っている。

Slide 8

Slide 8 text

Saga 結果整合性を使ったアーキテクチャの1つで、トランザクションを複数のトランザ クションに分割し、それらを順次実行する。そしてリトライ不可能なエラーが発生 したら逆処理となる補償トランザクションを順次実行する。

Slide 9

Slide 9 text

トランザクション管理(暗号資産購入) 補償トランザクション Subtract point Subtract JPY balance Add BTC balance Publish event Insert payment resource Update payment resource Update payment resource Add point Add JPY balance Publish event

Slide 10

Slide 10 text

トランザクション管理(暗号資産購入) 補償トランザクション Subtract point Subtract JPY balance Add BTC balance Publish event Insert payment resource Update payment resource Update payment resource Add point Add JPY balance Publish event

Slide 11

Slide 11 text

トランザクション管理(暗号資産購入) 補償トランザクション Subtract point Subtract JPY balance Add BTC balance Publish event Insert payment resource Update payment resource Update payment resource Add point Add JPY balance Publish event

Slide 12

Slide 12 text

トランザクション管理(暗号資産購入) 補償トランザクション Subtract point Subtract JPY balance Add BTC balance Insert payment resource Update payment resource Update payment resource Add point Add JPY balance Publish event Publish event

Slide 13

Slide 13 text

Workflow Engine 弊社はクラウドサービスとしてGCPを利用しているため、OSS or GCPの製品 が候補としてあがり、下記を検討した。 1. GCP Workflows 2. Cadence / Temporal GCP Workflowsは各処理をHTTP APIのエンドポイントとして実装する必要が あり、開発時のユニットテストなどで検証しづらいことが懸念となり、Cadenceや TemporalはCloud Spannerに対応していなかったため、自社で開発することと した。

Slide 14

Slide 14 text

Workflow Engine アーキテクチャ Worker Engine Server Execution State Application Recovery Worker Channel Register Workflow Function / Execute Workflow Go Runtime Deploy on application servers Create Workflow / Activity Complete Workflow / Activity List Workflow / Activity Workflow / Activity State Changed Event Workflow Function Registry Register / Get reflect.ValueOf(fn).Call

Slide 15

Slide 15 text

アーキテクチャ ● Workflow ○ 複数のActivityを使ったビジネスロジック ● Activity ○ ビジネスロジックの最小単位

Slide 16

Slide 16 text

アーキテクチャ ● Worker ○ アプリケーションサーバからの要求に従い、Engine Serverへコミュニケーションす る。 ○ ChannelからEventをSubscribeし、Eventの種別に沿った処理を実行する。 ● Recovery Worker ○ Engine Serverから終了していないWorkflowの一覧を取得し、リトライするWorker。 ○ ChannelからEventをSubscribeし、Workerと同様にEventの種別に沿った処理を実 行する。 ● Workflow Function Registry ○ アプリケーションで定義されたGoのコード

Slide 17

Slide 17 text

アーキテクチャ ● Channel ○ Workflow/Activityの状態遷移のEvent HubとなるChannel ■ WorkflowStarted ● Workflowを実行するためのEvent ■ WorkflowCompleted ● Workflowが完了した際に、アプリケーション側へレスポンスを返すための Event ■ ActivityStarted ● Activityを実行するためのEvent ■ ActivityCompleted ● Activityが完了した際に、アプリケーション側へレスポンスを返すための Event ● Engine Server ○ Workflowの状態を管理するサーバ。 Workflow, Activityのインプット/アウトプットも保存する。 ■ インプット/アウトプットが保存されることにより、リトライする際に冪等に処理していくことが できる。

Slide 18

Slide 18 text

Workflow メルコイン決済マイクロサービスのWorkflow Subtract point Subtract JPY balance Add BTC balance Publish event Insert payment resource Update payment resource Update payment resource Add point Add JPY balance Publish event Activity Activity Activity Activity Activity Activity Activity Activity Activity Activity

Slide 19

Slide 19 text

コードサンプル ● Workflow ○ SayHello(context.Context, string) (string, error) ● Activity ○ Hello(context.Context, string) (string, error)

Slide 20

Slide 20 text

メルコイン決済マイクロサービスとは 01 トランザクション管理 02 リコンサイル 03 まとめ 04 アジェンダ

Slide 21

Slide 21 text

リコンサイル 依存先マイクロサービスと整合性が取れているかを突合して検証するプロセ ス。

Slide 22

Slide 22 text

リコンサイル ● サービスの特性上、お客様の資産を預かるためマイクロサービス間で不整 合が起きていないことを別プロセスで検証したい。 ● 自分たちのマイクロサービスだけでなく、依存している全てのマイクロサー ビスで検証し、その結果、整合性が取れていることが確認できた上で会計 処理を実施したい。

Slide 23

Slide 23 text

Processing Tracer マイクロサービスのリコンサイル処理をHook、リコンサイル状況の監視、アラー トするためのマイクロサービス。

Slide 24

Slide 24 text

Processing Tracer Processing State / Service Info CronJob Slack Pub/Sub Balance gRPC Server Payment Order Register ProcessingID Reconcile Event Report Reconcile Send Alert Publish Reconcile Event Buy Transaction Request w/ ProcessingID Request w/ ProcessingID Generate ProcessingID

Slide 25

Slide 25 text

Processing Tracer ● ProcessingID ○ リコンサイルする処理を一意に識別するための ID。処理のエントリーポイントとなるマイ クロサービスが生成し、ユニーク性担保のため、生成には SDKを利用する。 ● Register ProcessingID ○ 処理のエントリーポイントとなるマイクロサービスが生成した ProcessingIDを登録する。 ● Reconcile Event ○ ProcessingIDが登録されて一定期間経過後、マイクロサービスの Pub/Sub Topicに向け てEventを発行する。 ● Report Reconcile ○ 各マイクロサービスが自分たちの TopicをSubscribeしてリコンサイル処理を実行し、リコ ンサイルができたらレポートを送信する。この際、依存先マイクロサービスが存在すれば サービス識別子をレポートに含める。 ● Alert ○ 一定期間経過後、リコンサイルされていない ProcessingIDをそのマイクロサービスの on-callチャンネルに対してアラートメッセージを投稿する。

Slide 26

Slide 26 text

メルコイン決済マイクロサービスのリコンサイル処理 payment merpay payment processing tracer balance Pub/Sub Publish reconcile event reconcile event Find resource w/ ProcessingID Call Get API Call Get API Check desired state and current state Check desired state and current state Call Reconcile Report API

Slide 27

Slide 27 text

メルコイン決済マイクロサービスとは 01 トランザクション管理 02 リコンサイル 03 まとめ 04 アジェンダ

Slide 28

Slide 28 text

まとめ ● トランザクション管理 ○ 複数のマイクロサービスを跨いだトランザクション処理を実行するために Sagaを 採用したWorkflow Engineを開発し、利用している。 ● リコンサイル ○ サービスの特性上、リコンサイルすることで最終的にその処理が想定通りに実 行されているかどうかを確認する必要があるが、 Processing Tracerというマイ クロサービスを開発し、リコンサイル処理の共通化をしている。

Slide 29

Slide 29 text

No content