如何pick分布式系統(tǒng)協(xié)調(diào)框架?Eureka or Zookeeper?
課工場(chǎng) | 2020-07-10 13:13:12  2364 瀏覽
隨著互聯(lián)網(wǎng)的快速發(fā)展,分布式的思想已經(jīng)廣泛應(yīng)用在各個(gè)行業(yè)中了。分布式是與中心化相對(duì)的概念,中心化的思想是把關(guān)鍵的內(nèi)容集中處理,這樣的好處是提高了效率、更專注專一,壞處是如果中心系統(tǒng)掛了,所有的內(nèi)容都沒有了。
分布式的思想是把整個(gè)模塊分成多個(gè)模塊去處理,每個(gè)人負(fù)責(zé)一部分,這樣的好處是即使某一部分沒有了,其它的內(nèi)容還存在,造成的損失不大,壞處是多模塊協(xié)調(diào)溝通成本高。
比如在企業(yè)管理中不會(huì)把核心模塊只交給某個(gè)人負(fù)責(zé),而是培養(yǎng)多個(gè)人都了解此模塊,這樣即使核心人員離職了,企業(yè)還是可以正常運(yùn)轉(zhuǎn),不會(huì)有多大影響。
而在計(jì)算機(jī)系統(tǒng)的世界中,分布式系統(tǒng)的出現(xiàn)是為了用便宜的、普通的機(jī)器完成單個(gè)計(jì)算機(jī)無法完成的計(jì)算存儲(chǔ)任務(wù),更好的利用資源處理更多的任務(wù)。
早期的時(shí)候一套應(yīng)用程序全部署在一臺(tái)機(jī)器上,但隨著業(yè)務(wù)量的增長、用戶請(qǐng)求的增加,該機(jī)器已經(jīng)不能滿足更多的計(jì)算存儲(chǔ)任務(wù),即使換更好的機(jī)器或者單獨(dú)升級(jí)某個(gè)組件能力(比如加磁盤、加內(nèi)存、換更好的CPU)也不能解決問題,這時(shí)候只能采用SOA或微服務(wù)設(shè)計(jì)、分布式模式進(jìn)行部署了,在系統(tǒng)架構(gòu)上把業(yè)務(wù)進(jìn)行拆分,子業(yè)務(wù)與子業(yè)務(wù)之間通過網(wǎng)絡(luò)進(jìn)行通信,共同協(xié)調(diào)完成任務(wù),在部署模式上把不同的子業(yè)務(wù)部署在不同的機(jī)器上,子業(yè)務(wù)扛不住業(yè)務(wù)壓力時(shí)再加新的機(jī)器支撐。
在業(yè)務(wù)拆分細(xì)?;?、業(yè)務(wù)部署集群化的情況下就會(huì)帶來新的問題,不過戴上CAP的帽子后,問題多多的分布式系統(tǒng)也能變得很可愛~
那么什么是CAP定理呢?CAP是一致性Consistency、可用性Availability、分區(qū)容錯(cuò)性PartitionTolerance,CAP定理是說這三個(gè)目標(biāo)不能同時(shí)滿足。
首先我們來看看分區(qū)容錯(cuò)性,在分布式系統(tǒng)中,大部分系統(tǒng)都分布在子網(wǎng)絡(luò)內(nèi),每個(gè)子網(wǎng)絡(luò)就是一個(gè)區(qū),比如你的服務(wù)一臺(tái)部署在北京,一臺(tái)部署在上海,這就是兩個(gè)區(qū)。而這兩臺(tái)服務(wù)器可能由于網(wǎng)絡(luò)問題而無法通信,這就是分區(qū)容錯(cuò),一般來說,由于客觀原因,分區(qū)容錯(cuò)是不能避免的。
下圖中G1和G2在不同的區(qū),G1向G2發(fā)送消息,但由于鏈路壞了或其它原因,G2可能收不到。

然后我們?cè)賮砜纯匆恢滦裕恢滦缘囊馑季褪菙?shù)據(jù)必須一致。比如你位于北京區(qū)域,然后在淘寶下單買了一個(gè)商品,這時(shí)候在北京區(qū)域的訂單系統(tǒng)服務(wù)器上有了你的訂單記錄,但是在上海區(qū)域的服務(wù)器系統(tǒng)沒有獲取這個(gè)信息,所以就會(huì)存在你在北京時(shí)能看到自己的訂單記錄,但到了上海后沒有訂單記錄的情況(基于CDN內(nèi)容分發(fā)網(wǎng)絡(luò)原則,網(wǎng)絡(luò)請(qǐng)求往最近的服務(wù)器區(qū)域發(fā)送)。如下圖所示,客戶端往服務(wù)器G1寫了一條數(shù)據(jù)V0,G1必須要往G2服務(wù)器再寫入V0這條數(shù)據(jù),這樣當(dāng)客戶端向G2服務(wù)器請(qǐng)求數(shù)據(jù)時(shí)才能獲取V0這條數(shù)據(jù)的同步,如果G1沒有向G2同步寫數(shù)據(jù),就會(huì)出現(xiàn)客戶端向G2請(qǐng)求時(shí)數(shù)據(jù)不一致。


最后我們來看看可用性,可用性就是服務(wù)任何時(shí)候都可以用,只要客戶端發(fā)起請(qǐng)求,服務(wù)器端就必須響應(yīng)。
那么一致性和可用性為什么不能并存呢?比如為了保障G2的一致性,那么G1在寫操作的時(shí)候,就必須鎖定G2的讀操作和寫操作,只有數(shù)據(jù)同步后才能開放G2的讀寫,在鎖定的時(shí)候,G2就必然不可用;而如果保障G2的可用性,那么G1在寫操作的時(shí)候,G2就不能被鎖定,數(shù)據(jù)就會(huì)不一致。因此CA只能擇一,魚和熊掌畢竟也不能兼得
選魚方案之Zookeeper--要CP不要A
在某些業(yè)務(wù),比如交易場(chǎng)景中,因?yàn)樯婕暗搅私疱X,所以必須要數(shù)據(jù)一致,有任何差錯(cuò),老板就會(huì)拿刀架你脖子上了。
Zookeeper就是保障了數(shù)據(jù)一致性的方案。在Zookeeper中使用專有的ZAB原子廣播協(xié)議來保障數(shù)據(jù)的一致性,在該協(xié)議中會(huì)包含三個(gè)角色Leader領(lǐng)導(dǎo)者、Follower跟隨者、Observer觀察者,Leader是唯一處理寫請(qǐng)求的人;Follower是接收客戶端的請(qǐng)求,處理讀請(qǐng)求但不處理寫請(qǐng)求,并且可以參加或投票Leader的選舉(當(dāng)Leader掛了的時(shí)候);Observer是不能參加也不能投票的Follower。
當(dāng)客戶端向服務(wù)器發(fā)送請(qǐng)求,要寫入數(shù)據(jù)時(shí),服務(wù)器會(huì)根據(jù)自己的角色和該請(qǐng)求的類型進(jìn)行判斷,如果自己是leader那么就處理該請(qǐng)求;如果自己是Follower,那么服務(wù)器會(huì)根據(jù)請(qǐng)求類型進(jìn)行決策,如果是寫請(qǐng)求,就轉(zhuǎn)發(fā)給Leader,Leader會(huì)給所有的Follower都發(fā)一個(gè)提議,讓大家來投票,如果超過一半的服務(wù)器都同意這個(gè)提議,那么Leader才會(huì)進(jìn)行操作,從而保障了數(shù)據(jù)的一致性。
比如在我們剛剛的訂單場(chǎng)景中,當(dāng)用戶在客戶端發(fā)起一個(gè)商品購買請(qǐng)求給到訂單系統(tǒng)服務(wù)器時(shí),服務(wù)器集群中的Leader判斷這是一個(gè)寫請(qǐng)求,需要往數(shù)據(jù)庫里插入一條某某用戶已購買某某商品的記錄,它會(huì)把這個(gè)記錄直接放在自己的服務(wù)器的數(shù)據(jù)庫里,并同步給其它的服務(wù)器也需要寫入該記錄。
如果客戶端的請(qǐng)求發(fā)送給了Follower的服務(wù)器,那么它會(huì)轉(zhuǎn)發(fā)給Leader,Leader就給所有的服務(wù)器都發(fā)通知,問他們是否可以寫入此條記錄,如果超過一半的人都表示可以操作,那么Leader、對(duì)應(yīng)的服務(wù)器就會(huì)把數(shù)據(jù)寫入在服務(wù)器里。

選熊掌方案之Eureka--要AP不要C
在某些業(yè)務(wù),比如電商場(chǎng)景中,對(duì)于服務(wù)的可用性要求非常高,雙十一的時(shí)候打不開商品的頁面簡直是會(huì)要了女人的命啊,當(dāng)然打開了就會(huì)要了男人的命,哈哈哈,開個(gè)小玩笑。
所以在電商場(chǎng)景中服務(wù)的可用性是非常重要的,Eureka就是保障了服務(wù)可用性的方案。在Eureka集群中,服務(wù)器與服務(wù)器是通過Replicate來同步數(shù)據(jù)的,不區(qū)分master節(jié)點(diǎn)、slave節(jié)點(diǎn),每個(gè)應(yīng)用都指向其它應(yīng)用,當(dāng)某個(gè)服務(wù)器宕機(jī)時(shí),該應(yīng)用就切換到新的服務(wù)器節(jié)點(diǎn)執(zhí)行任務(wù),待宕機(jī)服務(wù)器恢復(fù)正常后,再將服務(wù)切回來。
如下圖所示,還是以訂單場(chǎng)景來講解,在北京、上海、西安機(jī)房的服務(wù)器里都部署了訂單服務(wù)的應(yīng)用程序,但是可能西安機(jī)房斷電了出了故障,從而導(dǎo)致西安的用戶使用訂單服務(wù)時(shí)就不能正常的使用了,但是因?yàn)檎麄€(gè)大系統(tǒng)采用的是跨地區(qū)的高可用的集群部署模式,因此當(dāng)西安的服務(wù)不可用時(shí),用戶的請(qǐng)求就會(huì)走到上海,由上海的機(jī)房來提供服務(wù),同時(shí)把數(shù)據(jù)同步給到北京的服務(wù)器,但這時(shí)候就會(huì)出現(xiàn)一個(gè)問題:西安機(jī)房的服務(wù)器由于斷電了沒能提供服務(wù),因此斷電這段時(shí)間內(nèi)的服務(wù)數(shù)據(jù)時(shí)沒有的,就出現(xiàn)了北京上海西安的數(shù)據(jù)不一致的情況。在業(yè)務(wù)場(chǎng)景中通常采用人工校對(duì)、客服等的方式可以解決。


Zookeeper我所欲也,Eureka亦我所欲也,二者不可得兼??捎眯晕宜?,一致性亦我所欲也,然二者不可得兼,同學(xué)們根據(jù)自己的業(yè)務(wù)場(chǎng)景選擇合適的分布式協(xié)調(diào)框架即可~~



標(biāo)簽:
欧美性大战XXXXX久久久√,国产无遮挡裸体免费视频网站 ,久99久女女精品免费观看69堂,五月综合激情婷婷六月,国自产精品手机在线观看视频,欧美色爱综合网,国产精品三级国产AV,免费黄色高清无码,**a免费视频毛片,亚洲AV永久无码精品无码四虎
亚洲一区无码中文字幕| 国产黄a三级三级三级| 国产亚洲精品aa在线观看| 国产精品无码a∨精品影院| 狠狠躁夜夜躁青青草原| 日韩欧美**字幕| 久久久国产精品萌白酱免费| 欧美综合在线激情专区| 成人午夜精品无码区久久| 天天摸天天操天天爽| 国产无遮挡裸体免费视频网站 | 中文字幕无线乱码人妻| 久久精品亚洲日本篠田| 久久亚洲AV成人无码国产电影| 国产dvd毛片在线视频| 国产成人精品日本亚洲专区| 久久久91精品国产一区二区| 亚洲АV电影天堂网无码| 久久国产馆中文字幕在| 人妻中文无码久热丝袜四虎| 亚洲欧洲av一区二区久久| 亚洲毛片ΑV无线播放一区| 久久国产欧美日韩精品图片| 亚洲第一区视频| 亚洲成av人片在线观看不卡| 99re这里只有精品视频在线观看| 人妻无码一区二区19P| 国产午夜人做人免费视频中文| 亚洲欧美国产成人久久| 国产精品露脸国语对白| 97欧美精品系列一区二区| 国产美女久久精品香蕉| 午夜人性色福利无码视频在线观看 | 国产精品久久久久尤物| 国产精品三级无码专区 | HEYZO专区无码综合| 无码国产精品一区二区免费式芒果| 一级毛片直播亚洲| 视频二区 中文字幕 欧美| 丰满少妇人妻无码区| 久久综合精品国产二区无码不卡|