- 分布式系統(tǒng)架構(gòu):技術(shù)棧詳解與快速進階
- 張程
- 833字
- 2020-08-13 13:45:30
1.4.3 數(shù)據(jù)一致性
由于數(shù)據(jù)架構(gòu)需要提供多節(jié)點部署,不同節(jié)點之間通信存在數(shù)據(jù)差異,在很多場景下往往會產(chǎn)生臟數(shù)據(jù)、異常數(shù)據(jù),讓業(yè)務不能正常運轉(zhuǎn)。數(shù)據(jù)一致性指關(guān)聯(lián)數(shù)據(jù)之間的邏輯關(guān)系是否正確和完整。那么在分布式情況下如何讓不同模塊之間的數(shù)據(jù)保證完整性、一致性?
可以從系統(tǒng)構(gòu)建層面考慮,采用分布式事務處理,犧牲一部分性能去保證數(shù)據(jù)一致性。
【示例】 電商系統(tǒng)
在購物平臺看中一款商品,然后加入購物車,下單成功后生成訂單,支付成功后扣除賬戶余額,然后通知倉庫發(fā)貨,生成物流軌跡。如果商品庫存、訂單、支付、倉庫等應用模塊獨立部署,各模塊之間通過遠程調(diào)用,則正常流程是所有應用模塊調(diào)用都正常返回。若出現(xiàn)異常,需要考慮以下場景。
1)商品庫存數(shù)量已扣除,訂單正常下單成功,由于網(wǎng)絡異常等原因,提示用戶“下單失敗”,用戶刷新頁面后,顯示一個“未支付訂單”;
2)訂單正常下單成功,用戶支付成功后,由于網(wǎng)絡異常等原因,提示用戶“支付失敗”,用于刷新頁面后,顯示“已支付成功”;
3)用戶支付成功后,通知倉庫發(fā)貨,由于網(wǎng)絡異常等原因,倉庫系統(tǒng)未發(fā)貨,無軌跡;
4)用戶支付成功后,通知倉庫發(fā)貨,倉庫可能沒有貨品,但商品數(shù)量已扣減,用戶余額已扣除等。
系統(tǒng)拆分成多個應用模塊后,往往會存在數(shù)據(jù)不一致性等問題,不同模塊之間通過遠程調(diào)用存在多種不確定因素,如調(diào)用過程中順序不同,網(wǎng)絡、寬帶、超時等一系列問題,增加了系統(tǒng)復雜性。
假如把商品庫存、訂單、支付、倉庫多個應用模塊并行調(diào)用,也就是同時調(diào)用這些模塊進行業(yè)務處理,由于同時調(diào)用不同模塊存在延遲、網(wǎng)絡異常等情況,需要設定合理的超時機制。并行執(zhí)行過程中任意模塊執(zhí)行失敗或者超時時,模塊執(zhí)行狀態(tài)差異需要通過消息發(fā)布/訂閱等模式,通知以上全部模塊進行失敗處理,相關(guān)模塊收到消息后,進行冪等處理,進而執(zhí)行失敗處理。
注意
保證消息發(fā)布/訂閱的可用性、可靠性,讓業(yè)務模塊都能正常接收消息。任意模塊執(zhí)行失敗或者超時等情況出現(xiàn)時,由于涉及模塊眾多,業(yè)務復雜,應通知相關(guān)模塊進行失敗處理。
- 網(wǎng)絡化聯(lián)合仿真的時間同步
- Web前端開發(fā)簡明教程(HTML+CSS+JavaScript+jQuery)
- TMS320C55x DSP原理及應用(第3版)
- 網(wǎng)絡工程設計與系統(tǒng)集成(第2版)
- 新型網(wǎng)絡體系結(jié)構(gòu)
- ARM嵌入式體系結(jié)構(gòu)與接口技術(shù)(Cortex-A8版)
- 計算思維的結(jié)構(gòu)
- TMS 320 F28x源碼解讀
- 大學計算機基礎(第6版)
- GPU高性能運算之CUDA
- 計算機體系結(jié)構(gòu)基礎(第3版)
- 大模型時代的基礎架構(gòu):大模型算力中心建設指南
- 嵌入式系統(tǒng)開發(fā)基礎與實踐教程
- 兼容ARM9的軟核處理器設計:基于FPGA
- 計算機組成原理(基于x86-64架構(gòu))