關于分布式系統(tǒng)的數(shù)據(jù)一致性問題(三)
在我的博文里面 關于分布式系統(tǒng)的數(shù)據(jù)一致性問題(二) 里面主要介紹了數(shù)據(jù)分布的情況下保證一致性的情況,在第二篇文章里面,我這里提出了三個問題
- 訂單系統(tǒng)調用支付系統(tǒng)支付訂單,支付成功,但是返回給訂單系統(tǒng)數(shù)據(jù)超時,訂單還是I(初始狀態(tài)),但是此時會員帳戶余額100,會員肯定會馬上找京東罵京東,為啥不給老子發(fā)貨,我都付錢了
- 訂單系統(tǒng)調用支付系統(tǒng)成功,狀態(tài)也已經(jīng)更新成功,但是通知倉庫發(fā)貨失敗,這個時候訂單是P(已支付)狀態(tài),此時會員帳戶余額是100,但是倉庫不會發(fā)貨。會員也要罵京東。
- 訂單系統(tǒng)調用支付系統(tǒng)成功,狀態(tài)也已經(jīng)更新成功,然后通知倉庫發(fā)貨,倉庫告訴訂單系統(tǒng),沒有貨了。這個時候數(shù)據(jù)狀態(tài)和第二種情況一樣。
重點分析解決了第一個的問題以及相應的方案,發(fā)現(xiàn)在數(shù)據(jù)分布的環(huán)境下,很難絕對的保證數(shù)據(jù)一致性(任何一段區(qū)間),但是有辦法通過一種補償機制,最終保證數(shù)據(jù)的一致性。
在下面在分析一下第二個問題
- 訂單系統(tǒng)調用支付系統(tǒng)成功,狀態(tài)也已經(jīng)更新成功,但是通知倉庫發(fā)貨失敗,這個時候訂單是P(已支付)狀態(tài),此時會員帳戶余額是100,但是倉庫不會發(fā)貨。會員也要罵京東。
通過在上一篇文章里面分析過,這個相對來說是比較簡單的,我可以采取重試機制,如果發(fā)現(xiàn)通知倉庫發(fā)貨失敗,就一致重試,
這里面有兩種方式:
1 異步方式:通過類似MQ(消息通知)的機制,這個是異步的通知
2 同步調用:類似于遠程過程調用
對于同步的調用的方式,比較簡單,我們能夠及時獲取結果,對于異步的通知,就必須采用請求,應答的方式進行,這一點在(關于分布式系統(tǒng)的數(shù)據(jù)一致性問題(一))里面有介紹。這里面就不再闡述。
來看看第三個問題
- 訂單系統(tǒng)調用支付系統(tǒng)成功,狀態(tài)也已經(jīng)更新成功,然后通知倉庫發(fā)貨,倉庫告訴訂單系統(tǒng),沒有貨了。這個時候數(shù)據(jù)狀態(tài)和第二種情況一樣。
我覺得這是一個很有意思的問題,我們還是考慮幾種解決的方案
1 在會員下單的時刻,就告訴倉庫,我要你把貨物留下來,
2 在會員支付訂單時候,在支付之前檢查倉庫有沒有貨,如果沒有貨,就告知會員木有貨物了
3 如果會員支付成功,這個時候沒有貨了,就會退款給用戶或者等待有貨的時候在發(fā)貨
正常情況,京東的倉庫一般都是有貨的,所以影響到的會員很少,但是在秒殺和營銷的時候,這個時候就不一定了,我們考慮假設倉庫有10臺iphone
如果采用第一種方案,
1 在會員下單的時候,相當于庫存就-1,那么用戶惡意拍下來,沒有去支付,就影響到了其他用戶的購買。京東可以設置一個訂單超時時間,如果這段時間內沒有支付,就自動取消訂單
2 在會員支付之前,檢查倉庫有貨,這種方案了,對于用戶體驗不好,但是對于京東比較好,至少我東西都賣出去了。那些沒有及時付款的用戶,只能投訴了京東無故取消訂單
3 第三種方案,這個方案體驗更不好,而且用戶感覺受到京東欺詐,但是對于京東來說,比第二種方案更有益,畢竟我還可以多賣出一點東西。
個人覺得,京東應該會采用第二種或者第三種方式來處理這類情況,我在微博上搜索了 “京東 無故取消訂單”,發(fā)現(xiàn)果真和我預料的處理方式。不過至于這里的無故取消是不是技術上的原因我不知道,如果真的是技術上的原因,我覺得京東可以采用不同的處理方案。對于秒殺和促銷商品,可以考慮第一種方案,大多數(shù)人都會直接付款,畢竟便宜啊,如果用戶搶不到便宜的東西,抱怨當然很大了。這樣可以照顧大多數(shù)用戶的體驗。對于一般的訂單,可以采用第二種或者第三種方式,這種情況下,發(fā)生付款之后倉庫沒有貨的情況會比較少,并且就算發(fā)生了,用戶也會覺得無所謂,大不了退錢嗎,這樣就可以實現(xiàn)自己的利益最大化而最低程度的減少用戶體驗。

而鐵道部在這個問題上,采用的是第一種方案,為什么和京東不一樣,就是因為用戶體驗,如果用戶把票都買了,你告訴我木有票了,旅客會殺人的。哈哈,不過鐵道部不擔心票賣不出去,第一種方案對他影響沒有什么。
說了這么多,就是說 分布式環(huán)境下(數(shù)據(jù)分布)要任何時刻保證數(shù)據(jù)一致性是不可能的,只能采取妥協(xié)的方案來保證數(shù)據(jù)最終一致性。這個也就是著名的CAP定理。
14年互聯(lián)網(wǎng)技術、產品、運營經(jīng)驗,前支付寶技術專家,互金創(chuàng)業(yè)公司CTO,大令保事業(yè)部總經(jīng)理。
在互金領域有比較強的產品以及運營經(jīng)驗,尤其擅長用戶增長、轉化、運營上的經(jīng)驗,兼具技術、產品、運營思維。
目前是云貓增長實驗室 創(chuàng)始人
團隊成員來自阿里等國內知名互聯(lián)網(wǎng)公司,曾在互聯(lián)網(wǎng)金融、互聯(lián)網(wǎng)保險、企業(yè)級SaaS等項目中負責用戶增長,團隊管理的工作,擁有豐富的一線流量增長經(jīng)驗與實操手段。
歡迎關注我們,用技術驅動增長
浙公網(wǎng)安備 33010602011771號