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.9k
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.5k
Go1.10 strings.Builder の紹介
knsh14
2
1.4k
Go でインタプリタを 書いてみよう
knsh14
0
3k
Let’s Create An Interpreter In Go
knsh14
0
150
Go Code Review Comment を翻訳した話
knsh14
0
7.6k
tvOS Leaderboard
knsh14
0
1.2k
Other Decks in Technology
See All in Technology
ECS障害を例に学ぶ、インシデント対応に備えたAIエージェントの育て方 / How to develop AI agents for incident response with ECS outage
iselegant
4
460
Amazon Bedrock Knowledge Basesチャンキング解説!
aoinoguchi
0
170
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
780
データの整合性を保ちたいだけなんだ
shoheimitani
8
3.2k
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
480
AIが実装する時代、人間は仕様と検証を設計する
gotalab555
1
640
AWS DevOps Agent x ECS on Fargate検証 / AWS DevOps Agent x ECS on Fargate
kinunori
2
250
Agile Leadership Summit Keynote 2026
m_seki
1
680
Tebiki Engineering Team Deck
tebiki
0
24k
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
1.1k
Ruby版 JSXのRuxが気になる
sansantech
PRO
0
170
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
610
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
130
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
67
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
72
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
830
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Building AI with AI
inesmontani
PRO
1
710
Designing Powerful Visuals for Engaging Learning
tmiket
0
240
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
180
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
57
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