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.6k
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.2k
Go1.10 strings.Builder の紹介
knsh14
2
1.3k
Go でインタプリタを 書いてみよう
knsh14
0
2.8k
Let’s Create An Interpreter In Go
knsh14
0
120
Go Code Review Comment を翻訳した話
knsh14
0
7.3k
tvOS Leaderboard
knsh14
0
1.2k
Other Decks in Technology
See All in Technology
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
750
Amazon CloudWatch Network Monitor のススメ
yuki_ink
1
200
ドメイン名の終活について - JPAAWG 7th -
mikit
33
20k
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
7
800
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
AIチャットボット開発への生成AI活用
ryomrt
0
170
Why does continuous profiling matter to developers? #appdevelopercon
salaboy
0
190
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
580
AGIについてChatGPTに聞いてみた
blueb
0
130
個人でもIAM Identity Centerを使おう!(アクセス管理編)
ryder472
3
200
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.6k
Amazon Personalizeのレコメンドシステム構築、実際何するの?〜大体10分で具体的なイメージをつかむ〜
kniino
1
100
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
693
190k
A Tale of Four Properties
chriscoyier
156
23k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
Embracing the Ebb and Flow
colly
84
4.5k
The World Runs on Bad Software
bkeepers
PRO
65
11k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
The Cost Of JavaScript in 2023
addyosmani
45
6.7k
GitHub's CSS Performance
jonrohan
1030
460k
How GitHub (no longer) Works
holman
310
140k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
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