Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
500万ユーザーを支える残高の冪等性 / The idempotency of the bal...
Search
Kenshi Kamata
December 18, 2019
Technology
0
2.8k
500万ユーザーを支える残高の冪等性 / The idempotency of the balance for 5 million Merpay users
Tech Talk vol.2 Backend Engineer 〜マイクロサービスの冪等性〜 (
https://mercari.connpass.com/event/157009/
) での発表資料
Kenshi Kamata
December 18, 2019
Tweet
Share
More Decks by Kenshi Kamata
See All by Kenshi Kamata
チャネルの仕組み
knsh14
6
5.4k
Go1.10 strings.Builder の紹介
knsh14
2
1.3k
Go でインタプリタを 書いてみよう
knsh14
0
2.9k
Let’s Create An Interpreter In Go
knsh14
0
140
Go Code Review Comment を翻訳した話
knsh14
0
7.4k
tvOS Leaderboard
knsh14
0
1.2k
Other Decks in Technology
See All in Technology
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
39k
激動の時代、新卒エンジニアはAIツールにどう向き合うか。 [LayerX Bet AI Day Countdown LT Day1 ツールの選択]
tak848
0
540
「手を動かした者だけが世界を変える」ソフトウェア開発だけではない開発者人生
onishi
4
1.1k
PHPでResult型やってみよう
higaki_program
0
180
An introduction to Claude Code SDK
choplin
3
3.3k
QuickBooks®️ Customer®️ USA Contact Numbers: Complete 2025 Support Guide
qbsupportinfo
0
100
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
18k
データエンジニアリング 4年前と変わったこと、 4年前と変わらないこと
tanakarian
2
350
怖くない!GritQLでBiomeプラグインを作ろうよ
pal4de
1
120
データ戦略部門 紹介資料
sansan33
PRO
1
3.3k
Digitization部 紹介資料
sansan33
PRO
1
4.6k
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
13k
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
431
65k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
How to train your dragon (web standard)
notwaldorf
96
6.1k
GitHub's CSS Performance
jonrohan
1031
460k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
282
13k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Docker and Python
trallard
45
3.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Building Applications with DynamoDB
mza
95
6.5k
Transcript
knsh14 500万ユーザーを支える残高の冪等性
鎌田健史(@knsh14) • Merpay Backend Engineer • Payment Platform team 2
自己紹介
残高を管理するマイクロサービス 01 残高を管理するAPIの冪等性 02 冪等性をもたせるときに考えること 03 3 アジェンダ
残高管理マイクロサービスの紹介 4
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 残高管理マイクロサービスの紹介
残高管理サービス • 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 残高管理マイクロサービスの紹介
残高管理マイクロサービス(Balance Service)の特徴 • 使っているDBはCloud Spanner • 外部のサービスや他のマイクロサービスに依存してない • Delete 操作はなくて
Read / Insert / Update のみ • かなりシンプルな存在 7 残高管理マイクロサービスの紹介
Balance Service の冪等性 8
冪等性があるAPI 01 02 お客様の残高を追加や消費 冪等性がないAPI お客様の現在の残高を取得 消費の履歴を取得 9 Balance Service
の冪等性
冪等性があるAPI • ある取引は最初に成功した1度だけ処理される • 1度成功すれば同じリクエストを何回繰り返しても内部的には処理され ない • 何度リクエストしてもレスポンスは同じものが返ってくる • 何度でもリトライできる
10 Balance Service の冪等性
冪等性があるAPI • リクエストの取引IDが保存されていれば既に行われた取引である • リクエスト内容をチェックして結果を返す ◦ 偶然同じ取引IDになっても弾けるように 11 Balance Service
の冪等性
冪等性キーが同じ 01 02 03 外部から指定される取引ID 残高の種類が同じ ポイント/メルペイ残高など 操作する額が同じ ポイントがP〇〇 メルペイ残高が¥△△
12 Balance Service の冪等性
冪等なレスポンス • レスポンスはDBから引ける情報で組み立てる • 取引IDから引ける情報 ◦ 取引後の残高などは返さない 13 Balance Service
の冪等性
冪等なAPIでのエラー • エラーはリクエストする側にリトライさせるか決める材料になる • リトライしても良いエラー ◦ タイムアウトなど • リトライしても意味がないエラー ◦
そもそも残高不足など 14 Balance Service の冪等性
冪等性を持たせるときに考えること 15
誰がどう使うのか? 冪等になるためのリクエスト 01 02 16 冪等性を持たせるときに考えること
誰がどう使うのか? • リクエストを投げる側の使い方1つで簡単に冪等性は壊れる • どういう情報でリクエストするのか、どうやってリトライするのか 17 冪等性を持たせるときに考えること
冪等にするためのリクエスト • UUID 使っとけば OK やろ?みたいな話ではない • 自分のマイクロサービスをよく考えて決める 18 冪等性を持たせるときに考えること
冪等性のための要素はドメイン次第 Balance Serviceではリクエスト内容 まで含めた情報で冪等になる 自分だけでは冪等性は守れないので コミュニケーション大事 01 02 03 19
まとめ
おわり 20