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.4k
Go でインタプリタを 書いてみよう
knsh14
0
2.9k
Let’s Create An Interpreter In Go
knsh14
0
140
Go Code Review Comment を翻訳した話
knsh14
0
7.5k
tvOS Leaderboard
knsh14
0
1.2k
Other Decks in Technology
See All in Technology
Android Audio: Beyond Winning On It
atsushieno
0
110
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
160
機械学習を扱うプラットフォーム開発と運用事例
lycorptech_jp
PRO
0
230
生成AIでセキュリティ運用を効率化する話
sakaitakeshi
0
650
Evolución del razonamiento matemático de GPT-4.1 a GPT-5 - Data Aventura Summit 2025 & VSCode DevDays
lauchacarro
0
180
オブザーバビリティが広げる AIOps の世界 / The World of AIOps Expanded by Observability
aoto
PRO
0
360
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
460
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
8.7k
MCPで変わる Amebaデザインシステム「Spindle」の開発
spindle
PRO
3
3.2k
企業の生成AIガバナンスにおけるエージェントとセキュリティ
lycorptech_jp
PRO
2
160
なぜSaaSがMCPサーバーをサービス提供するのか?
sansantech
PRO
8
2.8k
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
910
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
Designing for humans not robots
tammielis
253
25k
Scaling GitHub
holman
463
140k
How to Ace a Technical Interview
jacobian
279
23k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
Into the Great Unknown - MozCon
thekraken
40
2k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
For a Future-Friendly Web
brad_frost
180
9.9k
Fireside Chat
paigeccino
39
3.6k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Done Done
chrislema
185
16k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
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