如何保障跨系統(tǒng)數(shù)據(jù)的最終一致性

場(chǎng)景

不知道大家看到數(shù)據(jù)一致性梅惯,第一時(shí)間想到的是什么? 我第一時(shí)間想到的是緩存和數(shù)據(jù)庫的一致性,或者是一個(gè)數(shù)據(jù)庫內(nèi)的多個(gè)表的數(shù)據(jù)一致性。

關(guān)于緩存和數(shù)據(jù)庫的一致性大家肯定都已經(jīng)很熟悉了卖擅,無非是先改數(shù)據(jù)庫還是先改緩存,分別會(huì)對(duì)應(yīng)什么樣的問題墨技,我這里便不再一一贅述了惩阶。

同一個(gè)數(shù)據(jù)庫內(nèi)多個(gè)表的一致性也好解決,一般用事務(wù)足以扣汪。

那么這里請(qǐng)大家想一下断楷,一個(gè)調(diào)用鏈路下來,一共十幾個(gè)甚至幾十個(gè)系統(tǒng)崭别,如何保證他們各自系統(tǒng)的數(shù)據(jù)一致性冬筒。如何保證整個(gè)鏈路的連續(xù)性呢。

我舉一個(gè)具體的場(chǎng)景茅主,用戶使用優(yōu)惠券選擇商品下單舞痰。這里面的資金流包括券資產(chǎn)的核銷、用戶實(shí)際的資金從第三方支付渠道比如支付寶诀姚、微信或者銀行卡支付劃撥到平臺(tái)匀奏;用戶確認(rèn)收貨后,資金根據(jù)商品的性質(zhì)劃分到商家学搜、平臺(tái)、推廣傭金等等论衍、用戶方賬單和商家方賬單的更新、對(duì)應(yīng)物理資金的流轉(zhuǎn),每一步都不能錯(cuò)冠场,即使一分錢對(duì)不上就是資損秆麸、就是事故。

解決方案

數(shù)據(jù)量大了之后蜒蕾,難免會(huì)因?yàn)榫W(wǎng)絡(luò)抖動(dòng)稠炬、數(shù)據(jù)庫抖動(dòng)、云服務(wù)商抖動(dòng)等原因咪啡,導(dǎo)致出現(xiàn)一些異常數(shù)據(jù)首启。這種情況既然無法避免,就要想辦法能及時(shí)快速的排查出來撤摸,確保整個(gè)調(diào)用鏈路的最終一致性毅桃。想達(dá)到這樣的效果褒纲,要怎么做呢?要防止這些小概率事件钥飞,只能多做冗余保護(hù)措施莺掠。

image.png

一般分為實(shí)時(shí)核對(duì)和離線核對(duì)兩種思路。

實(shí)時(shí)核對(duì)

目前最常用的數(shù)據(jù)庫當(dāng)屬M(fèi)ySQL读宙,我們便以MySQL為例彻秆。通過監(jiān)聽MySQL產(chǎn)生的binlog,解析出特定類型的DML語句作為觸發(fā)點(diǎn)來進(jìn)行某些操作结闸。比如可以將 DML語句中牽扯到的字段作為參數(shù)來發(fā)送MQ唇兑、調(diào)用RPC由接收方負(fù)責(zé)具體的業(yè)務(wù)核對(duì)邏輯“蚬溃或者將表的關(guān)聯(lián)規(guī)則和具體核對(duì)業(yè)務(wù)規(guī)則都寫在負(fù)責(zé)實(shí)時(shí)核對(duì)的平臺(tái)幔亥,解析出來后由平臺(tái)進(jìn)行統(tǒng)一的核對(duì)操作。 這里推薦一下 Aviator 腳本語言察纯,業(yè)務(wù)用起來很方便帕棉。

離線核對(duì)

為了保證數(shù)據(jù)的準(zhǔn)確性,還可以每日將數(shù)據(jù)庫中的數(shù)據(jù)同步到HBase等離線表中饼记,根據(jù)業(yè)務(wù)需要同步全量或者增量香伴,然后通過寫Hive SQL將多個(gè)離線表Join在一起,核對(duì)數(shù)據(jù)有無缺失具则、不一致即纲。

總結(jié)

凡事必有代價(jià),技術(shù)方案總有取舍博肋,一般來說在比較重要尤其涉及到錢的部分低斋,會(huì)通過實(shí)時(shí)核對(duì)和離線核對(duì)兩種方案來保證數(shù)據(jù)的一致性,這背后的代價(jià)就是成本匪凡,包括離線表的儲(chǔ)存使用成本膊畴、核對(duì)規(guī)則的編寫成本、數(shù)據(jù)的同步成本等病游。 第一次創(chuàng)作唇跨,文筆略微有點(diǎn)生疏,請(qǐng)大家多多指教衬衬,一起討論有沒有更好的方式买猖。

我是星辰與日暮之間,希望在掘金和大家一起進(jìn)步成長滋尉。

本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布玉控!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市狮惜,隨后出現(xiàn)的幾起案子奸远,更是在濱河造成了極大的恐慌既棺,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懒叛,死亡現(xiàn)場(chǎng)離奇詭異丸冕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)薛窥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門胖烛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诅迷,你說我怎么就攤上這事佩番。” “怎么了罢杉?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵趟畏,是天一觀的道長。 經(jīng)常有香客問我滩租,道長赋秀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任律想,我火速辦了婚禮猎莲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘技即。我一直安慰自己著洼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布而叼。 她就那樣靜靜地躺著身笤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葵陵。 梳的紋絲不亂的頭發(fā)上液荸,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音埃难,去河邊找鬼。 笑死涤久,一個(gè)胖子當(dāng)著我的面吹牛涡尘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播响迂,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼考抄,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蔗彤?” 一聲冷哼從身側(cè)響起川梅,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤疯兼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后贫途,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吧彪,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年丢早,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姨裸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怨酝,死狀恐怖傀缩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情农猬,我是刑警寧澤赡艰,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站斤葱,受9級(jí)特大地震影響慷垮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苦掘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一换帜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹤啡,春花似錦惯驼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抖部,卻和暖如春说贝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慎颗。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工乡恕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俯萎。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓傲宜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親夫啊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子函卒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容