框架相關(guān)(1)-- 分布式基本理論

微服務(wù)的發(fā)展

微服務(wù)倡導(dǎo)將復(fù)雜的單體應(yīng)用拆分為若干個功能簡單揪垄、松耦合的服務(wù)穷吮,這樣可以降低開發(fā)難度、增強擴展性饥努、便于敏捷開發(fā)捡鱼。當前被越來越多的開發(fā)者推崇,很多互聯(lián)網(wǎng)行業(yè)巨頭酷愧、開源社區(qū)等都開始了微服務(wù)的討論和實踐驾诈。Hailo有160個不同服務(wù)構(gòu)成缠诅,NetFlix有大約600個服務(wù)。國內(nèi)方面乍迄,阿里巴巴滴铅、騰訊、360就乓、京東、58同城等很多互聯(lián)網(wǎng)公司都進行了微服務(wù)化實踐拱烁。當前微服務(wù)的開發(fā)框架也非常多生蚁,比較著名的有Dubbo、SpringCloud戏自、thrift 邦投、grpc等。

微服務(wù)落地存在的問題

雖然微服務(wù)現(xiàn)在如火如荼擅笔,但對其實踐其實仍處于探索階段志衣。很多中小型互聯(lián)網(wǎng)公司,鑒于經(jīng)驗猛们、技術(shù)實力等問題念脯,微服務(wù)落地比較困難。如著名架構(gòu)師Chris Richardson所言弯淘,目前存在的主要困難有如下幾方面:

1)單體應(yīng)用拆分為分布式系統(tǒng)后绿店,進程間的通訊機制和故障處理措施變的更加復(fù)雜。

2)系統(tǒng)微服務(wù)化后庐橙,一個看似簡單的功能假勿,內(nèi)部可能需要調(diào)用多個服務(wù)并操作多個數(shù)據(jù)庫實現(xiàn),服務(wù)調(diào)用的分布式事務(wù)問題變的非常突出态鳖。

3)微服務(wù)數(shù)量眾多转培,其測試、部署浆竭、監(jiān)控等都變的更加困難浸须。

隨著RPC框架的成熟,第一個問題已經(jīng)逐漸得到解決兆蕉。例如dubbo可以支持多種通訊協(xié)議羽戒,springcloud可以非常好的支持restful調(diào)用。對于第三個問題虎韵,隨著docker易稠、devops技術(shù)的發(fā)展以及各公有云paas平臺自動化運維工具的推出,微服務(wù)的測試包蓝、部署與運維會變得越來越容易驶社。

而對于第二個問題企量,現(xiàn)在還沒有通用方案很好的解決微服務(wù)產(chǎn)生的事務(wù)問題。分布式事務(wù)已經(jīng)成為微服務(wù)落地最大的阻礙亡电,也是最具挑戰(zhàn)性的一個技術(shù)難題届巩。微服務(wù)架構(gòu)下,分布式事務(wù)的各種解決方案份乒,并重點為大家解讀阿里巴巴提出的分布式事務(wù)解決方案----GTS恕汇。該方案中提到的GTS是全新一代解決微服務(wù)問題的分布式事務(wù)互聯(lián)網(wǎng)中間件。

分布式基本理論

(1)CAP理論

在分布式系統(tǒng)中:

一致性Consistency:分布式環(huán)境下多個節(jié)點的數(shù)據(jù)是否強一致或辖。在分布式環(huán)境下瘾英,一致性是指數(shù)據(jù)在多個副本之間能否保持一致的特性。在一致性的需求下颂暇,當一個系統(tǒng)在數(shù)據(jù)一致的狀態(tài)下執(zhí)行更新操作后缺谴,應(yīng)該保證系統(tǒng)的數(shù)據(jù)仍然處于一直的狀態(tài)。

對于一個將數(shù)據(jù)副本分布在不同分布式節(jié)點上的系統(tǒng)來說耳鸯,如果對第一個節(jié)點的數(shù)據(jù)進 行了更新操作并且更新成功后湿蛔,卻沒有使得第二個節(jié)點上的數(shù)據(jù)得到相應(yīng)的更新,于是在對第二個節(jié)點的數(shù)據(jù)進行讀取操作時县爬,獲取的依然是老數(shù)據(jù)(或稱為臟數(shù) 據(jù))阳啥,這就是典型的分布式數(shù)據(jù)不一致的情況。在分布式系統(tǒng)中财喳,如果能夠做到針對一個數(shù)據(jù)項的更新操作執(zhí)行成功后苫纤,所有的用戶都可以讀取到其最新的值,那么 這樣的系統(tǒng)就被認為具有強一致性纲缓。

意思是卷拘,寫操作之后的讀操作,必須返回該值祝高。舉例來說栗弟,某條記錄是 v0,用戶向 G1 發(fā)起一個寫操作工闺,將其改為 v1乍赫。

接下來,用戶的讀操作就會得到 v1陆蟆。這就叫一致性雷厂。

問題是,用戶有可能向 G2 發(fā)起讀操作叠殷,由于 G2 的值沒有發(fā)生變化改鲫,因此返回的是 v0。G1 和 G2 讀操作的結(jié)果不一致,這就不滿足一致性了像棘。

為了讓 G2 也能變?yōu)?v1稽亏,就要在 G1 寫操作的時候,讓 G1 向 G2 發(fā)送一條消息缕题,要求 G2 也改成 v1截歉。

這樣的話,用戶向 G2 發(fā)起讀操作烟零,也能得到 v1瘪松。

分布式一致性的提出

在分布式系統(tǒng)中要解決的一個重要問題就是數(shù)據(jù)的復(fù)制。在我們的日常開發(fā)經(jīng)驗中锨阿,相 信很多開發(fā)人員都遇到過這樣的問題:假設(shè)客戶端C1將系統(tǒng)中的一個值K由V1更新為V2凉逛,但客戶端C2無法立即讀取到K的最新值,需要在一段時間之后才能 讀取到群井。這很正常,因為數(shù)據(jù)庫復(fù)制之間存在延時书斜。

分布式系統(tǒng)對于數(shù)據(jù)的復(fù)制需求一般都來自于以下兩個原因:

1,為了增加系統(tǒng)的可用性酵使,以防止單點故障引起的系統(tǒng)不可用

2荐吉,提高系統(tǒng)的整體性能,通過負載均衡技術(shù)口渔,能夠讓分布在不同地方的數(shù)據(jù)副本都能夠為用戶提供服務(wù)

數(shù)據(jù)復(fù)制在可用性和性能方面給分布式系統(tǒng)帶來的巨大好處是不言而喻的样屠,然而數(shù)據(jù)復(fù)制所帶來的一致性挑戰(zhàn),也是每一個系統(tǒng)研發(fā)人員不得不面對的缺脉。

所謂分布一致性問題痪欲,是指在分布式環(huán)境中引入數(shù)據(jù)復(fù)制機制之后,不同數(shù)據(jù)節(jié)點之間 可能出現(xiàn)的攻礼,并無法依靠計算機應(yīng)用程序自身解決的數(shù)據(jù)不一致的情況业踢。簡單講,數(shù)據(jù)一致性就是指在對一個副本數(shù)據(jù)進行更新的時候礁扮,必須確保也能夠更新其他的 副本知举,否則不同副本之間的數(shù)據(jù)將不一致。

那么如何解決這個問題太伊?一種思路是"既然是由于延時動作引起的問題雇锡,那我可以將寫入的動作阻塞,直到數(shù)據(jù)復(fù)制完成后僚焦,才完成寫入動作"锰提。 沒錯,這似乎能解決問題,而且有一些系統(tǒng)的架構(gòu)也確實直接使用了這個思路欲账。但這個思路在解決一致性問題的同時屡江,又帶來了新的問題:寫入的性能。如果你的應(yīng) 用場景有非常多的寫請求赛不,那么使用這個思路之后惩嘉,后續(xù)的寫請求都將會阻塞在前一個請求的寫操作上,導(dǎo)致系統(tǒng)整體性能急劇下降踢故。

總得來說文黎,我們無法找到一種能夠滿足分布式系統(tǒng)所有系統(tǒng)屬性的分布式一致性解決方案。因此殿较,如何既保證數(shù)據(jù)的一致性耸峭,同時又不影響系統(tǒng)運行的性能,是每一個分布式系統(tǒng)都需要重點考慮和權(quán)衡的淋纲。于是劳闹,一致性級別由此誕生:

數(shù)據(jù)的一致性模型可以分成以下 3 類:

強一致性:數(shù)據(jù)更新成功后,任意時刻所有副本中的數(shù)據(jù)都是一致的洽瞬,一般采用同步的方式實現(xiàn)本涕。

弱一致性:數(shù)據(jù)更新成功后,系統(tǒng)不承諾立即可以讀到最新寫入的值伙窃,也不承諾具體多久之后可以讀到菩颖。

最終一致性:弱一致性的一種形式,數(shù)據(jù)更新成功后为障,系統(tǒng)不承諾立即可以返回最新寫入的值晦闰,但是保證最終會返回上一次更新操作的值。這里之所以將最終一致性單獨提出來鳍怨,是因為它是弱一致性中非常推崇的一種一致性模型呻右,也是業(yè)界在大型分布式系統(tǒng)的數(shù)據(jù)一致性上比較推崇的模型。

可用性Availability:可用性是指系統(tǒng)提供的服務(wù)必須一直處于可用的狀態(tài)鞋喇,對于用戶的每一個操作請求總是能夠在有限的時間內(nèi)返回結(jié)果窿冯。這里的重點是"有限時間內(nèi)"和"返回結(jié)果"。

"有限時間內(nèi)"是指确徙,對于用戶的一個操作請求醒串,系統(tǒng)必須能夠在指定的時間內(nèi)返回對應(yīng)的處理結(jié)果,如果超過了這個時間范圍鄙皇,那么系統(tǒng)就被認為是不可用的芜赌。另外,"有限的時間內(nèi)"是指系統(tǒng)設(shè)計之初就設(shè)計好的運行指標伴逸,通常不同系統(tǒng)之間有很大的不同缠沈,無論如何,對于用戶請求,系統(tǒng)必須存在一個合理的響應(yīng)時間洲愤,否則用戶便會對系統(tǒng)感到失望颓芭。

"返回結(jié)果"是可用性的另一個非常重要的指標,它要求系統(tǒng)在完成對用戶請求的處理后柬赐,返回一個正常的響應(yīng)結(jié)果亡问。正常的響應(yīng)結(jié)果通常能夠明確地反映出隊請求的處理結(jié)果,即成功或失敗肛宋,而不是一個讓用戶感到困惑的返回結(jié)果州藕。

用戶可以選擇向 G1 或 G2 發(fā)起讀操作。不管是哪臺服務(wù)器酝陈,只要收到請求床玻,就必須告訴用戶,到底是 v0 還是 v1沉帮,否則就不滿足可用性锈死。

分區(qū)容錯性Partition Tolerance:分區(qū)容錯性約束了一個分布式系統(tǒng)具有如下特性:分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障的時候,仍然需要能夠保證對外提供滿足一致性和可用性的服務(wù)穆壕,除非是整個網(wǎng)絡(luò)環(huán)境都發(fā)生了故障待牵。

網(wǎng)絡(luò)分區(qū)是指在分布式系統(tǒng)中,不同的節(jié)點分布在不同的子網(wǎng)絡(luò)(機房或異地網(wǎng)絡(luò)) 中粱檀,由于一些特殊的原因?qū)е逻@些子網(wǎng)絡(luò)出現(xiàn)網(wǎng)絡(luò)不連通的狀況,但各個子網(wǎng)絡(luò)的內(nèi)部網(wǎng)絡(luò)是正常的漫玄,從而導(dǎo)致整個系統(tǒng)的網(wǎng)絡(luò)環(huán)境被切分成了若干個孤立的區(qū)域茄蚯。 需要注意的是,組成一個分布式系統(tǒng)的每個節(jié)點的加入與退出都可以看作是一個特殊的網(wǎng)絡(luò)分區(qū)睦优。

大多數(shù)分布式系統(tǒng)都分布在多個子網(wǎng)絡(luò)渗常。每個子網(wǎng)絡(luò)就叫做一個區(qū)(partition)。分區(qū)容錯的意思是汗盘,區(qū)間通信可能失敗皱碘。比如,一臺服務(wù)器放在中國隐孽,另一臺服務(wù)器放在美國癌椿,這就是兩個區(qū),它們之間可能無法通信菱阵。

上圖中踢俄,G1 和 G2 是兩臺跨區(qū)的服務(wù)器。G1 向 G2 發(fā)送一條消息晴及,G2 可能無法收到都办。系統(tǒng)設(shè)計的時候,必須考慮到這種情況。

一般來說琳钉,分區(qū)容錯無法避免势木,因此可以認為 CAP 的 P 總是成立。CAP 定理告訴我們歌懒,剩下的 C 和 A 無法同時做到啦桌。

3個要素最多只能同時滿足兩個,不可兼得歼培。其中震蒋,分區(qū)容忍性又是不可或缺的。

Consistency 和 Availability 的矛盾

一致性和可用性躲庄,為什么不可能同時成立查剖?答案很簡單,因為可能通信失斣刖健(即出現(xiàn)分區(qū)容錯)笋庄。

如果保證 G2 的一致性,那么 G1 必須在寫操作時倔监,鎖定 G2 的讀操作和寫操作直砂。只有數(shù)據(jù)同步后,才能重新開放讀寫浩习。鎖定期間静暂,G2 不能讀寫,沒有可用性不谱秽。

如果保證 G2 的可用性洽蛀,那么勢必不能鎖定 G2,所以一致性不成立疟赊。

綜上所述郊供,G2 無法同時做到一致性和可用性。系統(tǒng)設(shè)計時只能選擇一個目標近哟。如果追求一致性驮审,那么無法保證所有節(jié)點的可用性;如果追求所有節(jié)點的可用性吉执,那就沒法做到一致性疯淫。

讀者問,在什么場合戳玫,可用性高于一致性峡竣?

舉例來說,發(fā)布一張網(wǎng)頁到 CDN量九,多個服務(wù)器有這張網(wǎng)頁的副本适掰。后來發(fā)現(xiàn)一個錯誤颂碧,需要更新網(wǎng)頁,這時只能每個服務(wù)器都更新一遍类浪。

一般來說载城,網(wǎng)頁的更新不是特別強調(diào)一致性喉磁。短時期內(nèi)锭亏,一些用戶拿到老版本,另一些用戶拿到新版本漱挎,問題不會特別大力细。當然睬澡,所有人最終都會看到新版本。所以眠蚂,這個場合就是可用性高于一致性煞聪。

用一張表格說明一下:?

(2)BASE 理論

BASE理論是對CAP中一致性和可用性權(quán)衡的結(jié)果,其來源于對大規(guī)氖呕郏互聯(lián)網(wǎng)系統(tǒng)分布式實踐的總結(jié)昔脯, 是基于CAP定理逐步演化而來的。BASE理論的核心思想是:即使無法做到強一致性笛臣,但每個應(yīng)用都可以根據(jù)自身業(yè)務(wù)特點云稚,采用適當?shù)姆绞絹硎瓜到y(tǒng)達到最終一致性。接下來看一下BASE中的三要素:

基本可用(BasicallyAvailable):指分布式系統(tǒng)在出現(xiàn)故障時沈堡,允許損失部分的可用性來保證核心可用静陈,注意,這絕不等價于系統(tǒng)不可用诞丽。比如:

? ? ? ? ? ?** 響應(yīng)時間上的損失鲸拥。正常情況下,一個在線搜索引擎需要在0.5秒之內(nèi)返回給用戶相應(yīng)的查詢結(jié)果率拒,但由于出現(xiàn)故障崩泡,查詢結(jié)果的響應(yīng)時間增加了1~2秒

? ? ? ? ? ** 系統(tǒng)功能上的損失:正常情況下禁荒,在一個電子商務(wù)網(wǎng)站上進行購物的時候猬膨,消費者幾乎能夠順利完成每一筆訂單,但是在一些節(jié)日大促購物高峰的時候呛伴,由于消費者的購物行為激增勃痴,為了保護購物系統(tǒng)的穩(wěn)定性,部分消費者可能會被引導(dǎo)到一個降級頁面

軟狀態(tài)(SoftState):指允許分布式系統(tǒng)存在中間狀態(tài)热康,該中間狀態(tài)不會影響到系統(tǒng)的整體可用性沛申,即允許系統(tǒng)在不同節(jié)點的數(shù)據(jù)副本之間進行數(shù)據(jù)同步的過程存在延時。

最終一致性(EventualConsistency):指分布式系統(tǒng)中的所有副本數(shù)據(jù)經(jīng)過一定時間后姐军,最終能夠達到一致的狀態(tài)铁材,因此尖淘,最終一致性的本質(zhì)是需要系統(tǒng)保證最終數(shù)據(jù)能夠達到一致,而不需要實時保證系統(tǒng)數(shù)據(jù)的強一致性著觉。

總的來說村生,BASE理論面向的是大型高可用可擴展的分布式系統(tǒng),和傳統(tǒng)的事物ACID特性是相反的饼丘,它完全不同于ACID的強一致性模型趁桃,而是通過犧牲強一致性來獲得可用性,并允許數(shù)據(jù)在一段時間內(nèi)是不一致的肄鸽,但最終達到一致狀態(tài)卫病。但同時,在實際的分布式場景中典徘,不同業(yè)務(wù)單元和組件對數(shù)據(jù)一致性的要求是不同的蟀苛,因此在具體的分布式系統(tǒng)架構(gòu)設(shè)計過程中,ACID特性和BASE理論往往又會結(jié)合在一起烂斋。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屹逛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子汛骂,更是在濱河造成了極大的恐慌罕模,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帘瞭,死亡現(xiàn)場離奇詭異淑掌,居然都是意外死亡,警方通過查閱死者的電腦和手機蝶念,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門抛腕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人媒殉,你說我怎么就攤上這事担敌。” “怎么了廷蓉?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵全封,是天一觀的道長。 經(jīng)常有香客問我桃犬,道長刹悴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任攒暇,我火速辦了婚禮土匀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘形用。我一直安慰自己就轧,他們只是感情好证杭,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著妒御,像睡著了一般躯砰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上携丁,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天琢歇,我揣著相機與錄音,去河邊找鬼梦鉴。 笑死李茫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的肥橙。 我是一名探鬼主播魄宏,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼存筏!你這毒婦竟也來了宠互?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤椭坚,失蹤者是張志新(化名)和其女友劉穎予跌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體善茎,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡券册,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了垂涯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烁焙。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖耕赘,靈堂內(nèi)的尸體忽然破棺而出骄蝇,到底是詐尸還是另有隱情,我是刑警寧澤操骡,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布九火,位于F島的核電站,受9級特大地震影響当娱,放射性物質(zhì)發(fā)生泄漏吃既。R本人自食惡果不足惜考榨,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一跨细、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧河质,春花似錦冀惭、人聲如沸震叙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媒楼。三九已至,卻和暖如春戚丸,著一層夾襖步出監(jiān)牢的瞬間划址,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工限府, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夺颤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓胁勺,卻偏偏與公主長得像世澜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子署穗,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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