數據一致性-對帳

引子架構

媽媽要個人時候已經40歲了。她必定是下了很大的決定才決定終究仍是想要個女孩,但願這個女孩能夠解救她的孤獨。上高三的時候,有次又是由於哥哥的事情,媽媽把我從學校接回家。一個勁兒的問我怎麼辦好。在我能和她一塊兒思考前的50多年裏,她該是多麼無助。因此當我不斷看本身的掌紋,上面的起起伏伏。在想這一切解釋不通的苦難何時過去。在想是否是在天堂的媽媽安排了這一切,由於理解她的痛苦是個人使命。我錯了,她不是在天堂安排了這一切,是在我很小的時候。我爲理解她而生,這是個人命運。命運並非很深奧的東西,只是一個發展脈絡。比如作金融領域,和清算、結算、對帳打交道就是命運。對帳原本用在金融領域,逐漸擴大到數據一致性領域。比如彈性工程,原本是航天領域的術語。逐漸演變爲構造高可用工程的方法,方法的核心是經過提出邊界場景(失敗、風險、意外事件)問題,而後從檢測、補救、預防幾個維度去思考答案,最終反哺到系統設計開發與流程改善上,倒逼架構和流程SOP改進,再結合預案演練達到扼殺故障和縮短故障時間的目的。

概念異步

一致性分爲強一致性和弱一致性。
強一致性的協議和手段主要有:二階段提交(2PC)、三階段提交(3PC)、TCC(Try-Confirm-Cancel)補償型。這裏面常常有人把兩階段提交和TCC補償型混淆。二階段提交實際上業務邏輯是在提交以前作的,兩階段只是事務控制的兩個階段。而TCC是將業務邏輯分爲try、confirm和cancel三個階段。舉個例子:好比一我的要預售蘋果,有兩種銷售策略。一種讓用戶先付錢,根據用戶需求量準備足夠的蘋果。另外一種是讓用戶先付錢同時聲明到時候先到先得,沒搶到的就退款。第一種就是二階段提交,第二種就是TCC。弱一致性在分佈式系統中經常使用的是一種特例:最終一致性。在工做中,最終一致性一般經過補單和對帳來解決。補單主要指在運行時同時檢查返回值,若是返回值爲失敗,會從新處理(補單處理)。
對帳主要分爲兩個階段:數據覈對和差錯處理。數據覈對就是對帳中的軋帳。注意「軋」這裏念「ga」二聲。差錯處理就是對帳中的平帳。

 

 

 

應用分佈式

以秒殺場景爲例說明一下對帳的經常使用流程。

對帳依據和標準設計

對帳問題最早解決的問題是對帳依據和標準。好比秒殺場景,對帳依據就是訂單號,整個鏈路採用惟一內部訂單號。對帳標準能夠設定爲對用戶的承諾。就是說:一次秒殺活動結束,若是給用戶的結果是成功,那麼實際上超賣了,那就本身補貨解決。若是給用戶結果是失敗了,實際上有不少沒賣出去,那就是沒賣出去放着。總之,我承諾給用戶的結果必定要履行。若是數據覈對時,各個環節結果不一致,最終結果向用戶的承諾對齊。

對帳梳理blog

能夠從明細和總數兩個方面來作對帳。在秒殺場景中,明細是一條條請求訂單。總數是成功和失敗了多少個請求,買出多少庫存。明細對帳主要用於定位問題。總數對帳是兜底策略,用來解決「怎麼證實本身是對的」的問題。

對帳時機事件

分爲在線對帳和離線對帳。在線對帳又分爲實時對帳和準實時對帳。實時對帳就是好比秒殺成功了,那下游的每一步都須要是成功的,其餘狀況如超時等則採用重試來進行強一致性保證。準實時對帳一般用異步來實現。在秒殺的場景,若是訂單返回失敗,能夠異步發起一個任務進行退款,若是退款不成功則能夠用屢次重試進行補單。 離線對帳就是平時所說的定時任務。這個對帳方法就比較多了,自由發揮空間比較大。特別是在軋帳場景中,由於不實際修改數據,風險低,不少新技術試用能夠選擇在此模塊進行。
相關文章
相關標籤/搜索