Slide 8
Slide 8 text
ロック機構がない場合の「イベント追い越し・不整合」
前提:
楽観的ロック(バージョンチェック)がな
い素朴な実装
シナリオ:
User A
が先に処理を開始。
User B
が少し遅れて処理を開始。
発生する問題: "
イベントの追い越し"
ネットワーク遅延や処理時間のゆらぎに
より、後から来た User B
のイベントが先
に保存されてしまう。
結果: チャットの会話順序がおかしくなる。
「定員オーバー」などのビジネスルール
(不変条件)が破られる。
最悪なのは「エラーにならずに静かにデータが
壊れる」こと。
User A
User A
User B
User B
Stateless
UseCase (A)
Stateless
UseCase (A)
Stateless
UseCase (B)
Stateless
UseCase (B)
EventStore
(DynamoDB)
EventStore
(DynamoDB)
Current State: 10 messages
1 Post Message(11)
2 Load Snapshot + Events User A sees "10 messages"
3 Post Message(12)
4 Load Snapshot + Events
User B also sees "10 messages"
5
Domain Execute
(Create Event 11)
6
Domain Execute
(Create Event 12)
遅延やタイミングのズレにより
B
の書き込みが先⾏!
7 Save Event (Message 12)
8 Save Event (Message 11)
Data Corruption / Inconsistency
History: [..., Msg10, Msg12, Msg11]
時系列が逆転してしまう!
(
もしくは同じVersion ID
で上書き発⽣)