(6)彈力設(shè)計(jì)篇之“補(bǔ)償事務(wù)”

強(qiáng)一致性的最佳保證最好是在底層完成自娩。或是像Stateful 的 Sticky Session 那樣在一臺(tái)機(jī)器上完成。大多數(shù)業(yè)務(wù)最終一致性就好腐螟。

一窑业、ACID 和 BASE區(qū)別

ACID 保證了數(shù)據(jù)庫的一致性(銀行轉(zhuǎn)賬)

分布式系統(tǒng)钦幔,尤其微服務(wù),這樣的方式是很難高性能常柄。因?yàn)镃AP 理論和提高性能鲤氢,出現(xiàn)了 ACID 的一個(gè)變種 BASE。

Basic Availability基本可用西潘。暫時(shí)不可用的狀態(tài)卷玉,后面會(huì)快速恢復(fù)。

Soft-state軟狀態(tài)喷市∠嘀郑“有狀態(tài)”和“無狀態(tài)”的服務(wù)的一種中間狀態(tài)。為了提高性能品姓,讓服務(wù)暫時(shí)保存一些狀態(tài)或數(shù)據(jù)寝并,這些狀態(tài)和數(shù)據(jù)不是強(qiáng)一致性的

Eventual Consistency最終一致性腹备,短暫的時(shí)間段內(nèi)不一致衬潦,最終整個(gè)系統(tǒng)看到的數(shù)據(jù)是一致的。

二馏谨、網(wǎng)上賣書的場(chǎng)景:

ACID:買同一本書的過程中别渔,每個(gè)用戶的購買請(qǐng)求都需要把庫存鎖住,等減完庫存后惧互,把鎖釋放出來哎媚,后續(xù)的人才能進(jìn)行購買。同一時(shí)間不可能有多個(gè)用戶下單喊儡,有排隊(duì)的情況拨与,不可能做出性能比較高的系統(tǒng)來。

BASE:可以同時(shí)下單艾猜,不需要去真正地分配庫存买喧,異步且批量地處理訂單。下單沒有真正去減庫存匆赃,有可能會(huì)有超賣的情況淤毛。異步地處理訂單時(shí),發(fā)現(xiàn)庫存沒有了算柳,于是才會(huì)告訴用戶你沒有購買成功低淡。

BASE 這種玩法,其實(shí)就是亞馬遜的玩法,因?yàn)橐鶕?jù)用戶的地址去不同的倉庫查看庫存蔗蹋,這個(gè)操作非常耗時(shí)何荚,所以,不想做成異步的都不行猪杭。

系統(tǒng)收到你的訂單了餐塘,然后一會(huì)兒你會(huì)收到你的訂單被確認(rèn)的郵件,這時(shí)候才是真正地分配了庫存皂吮。某些時(shí)候戒傻,你先收到了下單的郵件,過一會(huì)又收到了沒有庫存的致歉的郵件蜂筹。

三稠鼻、業(yè)務(wù)補(bǔ)償

業(yè)務(wù)補(bǔ)償:首先做成冪等性的,一個(gè)事務(wù)失敗了或是超時(shí)了狂票,不斷地重試,努力地達(dá)到最終我們想要的狀態(tài)熙暴。如果達(dá)到闺属,狀態(tài)恢復(fù)到之前。如果有變化的請(qǐng)求周霉,啟動(dòng)整個(gè)事務(wù)的業(yè)務(wù)更新機(jī)制掂器。

比如:要找很多方協(xié)調(diào)很多事,每一件事都要成功俱箱,否則整件事就做不到国瓮。

可以并行地做這些事,而如果某個(gè)事有變化狞谱,其它的事都會(huì)跟著出現(xiàn)一些變化乃摹。

1.業(yè)務(wù)補(bǔ)償機(jī)制需要做到下面這幾點(diǎn):

(1)起始狀態(tài)定義:要達(dá)到什么樣的狀態(tài)(比如:請(qǐng)假、機(jī)票跟衅、酒店這三個(gè)都必須成功孵睬,租車是可選的),如果條件不滿足伶跷,要回退到哪一個(gè)狀態(tài)掰读。是整個(gè)業(yè)務(wù)的

(2)狀態(tài)擬合:當(dāng)整條業(yè)務(wù)跑起來的時(shí)候,我們可以串行或并行地做這些事叭莫。對(duì)于旅游訂票是可以并行的蹈集,但是對(duì)于網(wǎng)購流程(下單、支付雇初、送貨)是不能并行的拢肆。總之,我們的系統(tǒng)需要努力地通過一系列的操作達(dá)到一個(gè)我們想要的狀態(tài)善榛。如果達(dá)不到辩蛋,就需要通過補(bǔ)償機(jī)制回滾到之前的狀態(tài)。

(3)修改事務(wù):對(duì)于已經(jīng)完成的事務(wù)進(jìn)行整體修改移盆。

純技術(shù)的世界里也有這樣的事悼院。比如,線上運(yùn)維系統(tǒng)進(jìn)行水平擴(kuò)展咒循,先找到相應(yīng)的機(jī)器据途,然后初始化環(huán)境,再部署上應(yīng)用叙甸,再做相應(yīng)的健康檢查颖医,最后接入流量。這一系列的動(dòng)作都要完全成功裆蒸,所以熔萧,我們的部署系統(tǒng)就需要管理好整個(gè)過程和相關(guān)的運(yùn)行狀態(tài)。

2.業(yè)務(wù)補(bǔ)償?shù)脑O(shè)計(jì)重點(diǎn)

(1)支持冪等性僚祷,在上游有重試機(jī)制佛致,因?yàn)橐岩粋€(gè)業(yè)務(wù)流程執(zhí)行完成,

(2)工作流引擎(高可用和穩(wěn)定的)辙谜,維護(hù)和監(jiān)控整個(gè)過程的狀態(tài)俺榆,不要把這些狀態(tài)放到不同的組件中。把需求告訴它装哆,幫我們搞定所有的事罐脊。如果有問題,也會(huì)回滾和補(bǔ)償?shù)摹?/p>

(3)設(shè)計(jì)業(yè)務(wù)正向流程的時(shí)候蜕琴,也要設(shè)計(jì)業(yè)務(wù)的反向補(bǔ)償流程.補(bǔ)償?shù)臉I(yè)務(wù)邏輯和流程不一定非得是嚴(yán)格反向操作萍桌。有時(shí)候可以并行,有時(shí)候凌简,可能會(huì)更簡單梗夸。

(4)業(yè)務(wù)補(bǔ)償?shù)臉I(yè)務(wù)邏輯是強(qiáng)業(yè)務(wù)相關(guān)的,很難通用的号醉。

(5)下層的業(yè)務(wù)方最好提供短期的資源預(yù)留機(jī)制反症。就像電商中的把貨品的庫存預(yù)先占住等待用戶在 15 分鐘內(nèi)支付。如果沒有收到用戶的支付畔派,則釋放庫存铅碍。然后回滾到之前的下單操作,等待用戶重新下單线椰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胞谈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烦绳,老刑警劉巖卿捎,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異径密,居然都是意外死亡午阵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門享扔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來底桂,“玉大人,你說我怎么就攤上這事惧眠∽雅常” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵氛魁,是天一觀的道長暮顺。 經(jīng)常有香客問我,道長秀存,這世上最難降的妖魔是什么拖云? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮应又,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乏苦。我一直安慰自己株扛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布汇荐。 她就那樣靜靜地躺著洞就,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掀淘。 梳的紋絲不亂的頭發(fā)上旬蟋,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音革娄,去河邊找鬼。 笑死拦惋,一個(gè)胖子當(dāng)著我的面吹牛匆浙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厕妖,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼软能!你這毒婦竟也來了查排?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锭环,沒想到半個(gè)月后泊藕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玫锋,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悦屏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叫搁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裸卫,死狀恐怖茧泪,靈堂內(nèi)的尸體忽然破棺而出幽勒,到底是詐尸還是另有隱情嗜侮,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布击吱,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜落午,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一党瓮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦割坠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間次兆,已是汗流浹背芥炭。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工彪薛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留善延,地道東北人侨歉。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像肤京,于是被迫代替她去往敵國和親颊艳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子棋枕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • 本文歡迎轉(zhuǎn)載窥浪,轉(zhuǎn)載請(qǐng)注明原文鏈接,并附作者個(gè)人信息李艷鵬骨稿。 1 背景 一致性是一個(gè)抽象的姜钳、具有多重含義的計(jì)算機(jī)術(shù)語...
    581f548ef0ec閱讀 43,545評(píng)論 28 295
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,947評(píng)論 2 89
  • Java繼承關(guān)系初始化順序 父類的靜態(tài)變量-->父類的靜態(tài)代碼塊-->子類的靜態(tài)變量-->子類的靜態(tài)代碼快-->父...
    第六象限閱讀 2,159評(píng)論 0 9
  • 一個(gè)人如果吃飽了坦冠,那別人無論怎么天花亂墜地推薦飯店,都不會(huì)有食欲哥桥。 一個(gè)人如果認(rèn)識(shí)到外面的飯店多不衛(wèi)生辙浑,那無論廣告...
    陳景熙閱讀 278評(píng)論 0 1
  • 關(guān)于話題大多數(shù)人每天看上去很忙,實(shí)際上卻沒有多少價(jià)值產(chǎn)出拟糕,這其中的原因無非就分為這幾種判呕,沒努力,沒用心已卸,沒有用...
    流年一場(chǎng)失了夢(mèng)閱讀 339評(píng)論 0 0