Slide 1

Slide 1 text

knsh14
 500万ユーザーを支える残高の冪等性


Slide 2

Slide 2 text

鎌田健史(@knsh14)
 ● Merpay Backend Engineer
 ● Payment Platform team
 2 自己紹介


Slide 3

Slide 3 text

残高を管理するマイクロサービス 01 残高を管理するAPIの冪等性 02 冪等性をもたせるときに考えること 03 3 アジェンダ


Slide 4

Slide 4 text

残高管理マイクロサービスの紹介
 4

Slide 5

Slide 5 text

Open SKT から紹介
 ● https://speakerdeck.com/kazegusuri/builderscon-tokyo-2019-open-s kt 
 ● https://builderscon.io/tokyo/2019/session/c50caef7-a858-43c6-adc a-de4341094d4a 
 ● メルペイのアーキテクチャについての神解説
 
 5 残高管理マイクロサービスの紹介


Slide 6

Slide 6 text

残高管理サービス
 ● https://speakerdeck.com/kazegusuri/builderscon-tokyo-2019-open-s kt?slide=17 
 ● https://speakerdeck.com/kazegusuri/builderscon-tokyo-2019-open-s kt?slide=19 
 ● 決済のドメイン機能の一部を構成している
 6 残高管理マイクロサービスの紹介


Slide 7

Slide 7 text

残高管理マイクロサービス(Balance Service)の特徴
 ● 使っているDBはCloud Spanner
 ● 外部のサービスや他のマイクロサービスに依存してない
 ● Delete 操作はなくて Read / Insert / Update のみ
 ● かなりシンプルな存在
 7 残高管理マイクロサービスの紹介


Slide 8

Slide 8 text

Balance Service の冪等性
 8

Slide 9

Slide 9 text

冪等性があるAPI
 01 02 お客様の残高を追加や消費 冪等性がないAPI
 お客様の現在の残高を取得 消費の履歴を取得 9 Balance Service の冪等性


Slide 10

Slide 10 text

冪等性があるAPI
 ● ある取引は最初に成功した1度だけ処理される
 ● 1度成功すれば同じリクエストを何回繰り返しても内部的には処理され ない
 ● 何度リクエストしてもレスポンスは同じものが返ってくる
 ● 何度でもリトライできる
 10 Balance Service の冪等性


Slide 11

Slide 11 text

冪等性があるAPI
 ● リクエストの取引IDが保存されていれば既に行われた取引である
 ● リクエスト内容をチェックして結果を返す
 ○ 偶然同じ取引IDになっても弾けるように 11 Balance Service の冪等性


Slide 12

Slide 12 text

冪等性キーが同じ
 01 02 03 外部から指定される取引ID 残高の種類が同じ
 ポイント/メルペイ残高など
 操作する額が同じ
 ポイントがP〇〇 メルペイ残高が¥△△ 12 Balance Service の冪等性


Slide 13

Slide 13 text

冪等なレスポンス
 ● レスポンスはDBから引ける情報で組み立てる
 ● 取引IDから引ける情報
 ○ 取引後の残高などは返さない 13 Balance Service の冪等性


Slide 14

Slide 14 text

冪等なAPIでのエラー
 ● エラーはリクエストする側にリトライさせるか決める材料になる
 ● リトライしても良いエラー
 ○ タイムアウトなど ● リトライしても意味がないエラー
 ○ そもそも残高不足など 14 Balance Service の冪等性


Slide 15

Slide 15 text

冪等性を持たせるときに考えること
 15

Slide 16

Slide 16 text

誰がどう使うのか?
 冪等になるためのリクエスト
 01 02 16 冪等性を持たせるときに考えること


Slide 17

Slide 17 text

誰がどう使うのか?
 ● リクエストを投げる側の使い方1つで簡単に冪等性は壊れる
 ● どういう情報でリクエストするのか、どうやってリトライするのか
 17 冪等性を持たせるときに考えること


Slide 18

Slide 18 text

冪等にするためのリクエスト
 ● UUID 使っとけば OK やろ?みたいな話ではない
 ● 自分のマイクロサービスをよく考えて決める
 18 冪等性を持たせるときに考えること


Slide 19

Slide 19 text

冪等性のための要素はドメイン次第
 Balance Serviceではリクエスト内容
 まで含めた情報で冪等になる
 自分だけでは冪等性は守れないので
 コミュニケーション大事
 01 02 03 19 まとめ


Slide 20

Slide 20 text

おわり
 20