架构实战营 模块七作业
業務特點
虛擬商城跟實體交易最大的差別是虛擬商城可以即時
拿到商品,而且不可退貨
。
業務功能
儲值點卷
購買商品
關鍵業務約束
購買商品必須使用點卷支付
相同的英雄和皮膚只能購買一次
道具類商品可重複購買
異地多活設計分析
點卷餘額
數據修改量: 大,因為餘額會因儲值而增加、購買商品而減少。
一致性: 強一致性,因為用戶儲值、購買商品後,都會即時查看餘額是否正確。
唯一性: 不涉及,因為餘額是會變動的。
可丟失性: 否,因為用戶看到餘額不正確會向客服抱怨,進而影響商譽。
可恢復性: 否,如果點卷儲值紀錄和商品交易紀錄有缺失,就沒有辦法推算正確的餘額。
同步技巧: 使用數據庫同步,以保證強一致性。
點卷儲值紀錄
數據修改量: 無,因為紀錄產生後就不修改。
一致性: 最終一致性,因為是交易後不一定會查看的資料,用戶不需要即時查看。
唯一性: 全局唯一,因為每筆交易只能有一筆對應的紀錄,如有多筆,會造成對帳問題。
可丟失性: 否,因為當第三方扣款成功、但點卷餘額沒增加時,用戶會來查看儲值紀錄。
可恢復性: 如果有儲值紀錄有寫日誌,則有機會透過人工回覆,如果沒有寫日誌就沒辦法回復了。
同步技巧: 消息對列同步,因為它有全局唯一的特性,而且不需要實時。
商品交易紀錄
數據修改量: 無,因為紀錄產生後就不修改。
一致性: 最終一致性,因為是交易後不一定會查看的資料,用戶不需要即時查看。
唯一性: 全局唯一,因為每筆交易只能有一筆對應的紀錄,如有多筆,會造成商品多給問題。
可丟失性: 否,因為當商品交易成功、但商品沒有進到用戶帳戶時,用戶會來查看交易紀錄。
可恢復性: 如果有儲值紀錄有寫日誌,則有機會透過人工回覆,如果沒有寫日誌就沒辦法回復了。
同步技巧: 消息對列同步,因為它有全局唯一的特性,而且不需要實時。
英雄 & 皮膚
數據修改量: 無,因為只能購買一次,只有新增、不修改。
一致性: 強一致性,因為不能重複購買。
唯一性: 是,因為不能重複購買。
可丟失性: 否,因為用戶已經花錢購買。
可恢復性: 否,只能退點卷請用戶重買。
同步技巧: 數據庫同步,以保證強一致性。
道具
數據修改量: 大,因為道具可以重複購買,也可以被使用掉。
一致性: 強一致性,因為當道具不夠時就不能被使用。
唯一性: 不涉及,因為道具數量是變動的。
可丟失性: 否,因為用戶已經花錢購買。
可恢復性: 否,只能退點卷請用戶重買。
同步技巧: 數據庫同步,以保證強一致性。
架構示意圖
雖然在分析階段,交易紀錄選用消息對列同步,但因為其他項目的解決方案都是選用數據庫同步,而且交易紀錄實際上也可以用數據庫同步實現,為了降低系統複雜度,最後改選用數據庫主主同步。
版权声明: 本文为 InfoQ 作者【孫影】的原创文章。
原文链接:【http://xie.infoq.cn/article/2f5e328c49a0b1f1fc881ba8e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论