Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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