springcloud四個注冊中心的比較

一廓啊、概述

springcloud是一個非常優(yōu)秀的微服務(wù)框架避消,要管理眾多的服務(wù)给梅,就需要對這些服務(wù)進行治理刁憋,也就是我們說的服務(wù)治理,服務(wù)治理的作用就是在傳統(tǒng)的rpc遠程調(diào)用框架中杂彭,管理每個服務(wù)與每個服務(wù)之間的依賴關(guān)系当叭,可以實現(xiàn)服務(wù)調(diào)用、負載均衡盖灸、服務(wù)容錯蚁鳖、以及服務(wù)的注冊與發(fā)現(xiàn)。
? 如果微服務(wù)之間存在調(diào)用依賴赁炎,就需要得到目標(biāo)服務(wù)的服務(wù)地址醉箕,也就是微服務(wù)治理的服務(wù)發(fā)現(xiàn)。要完成服務(wù)發(fā)現(xiàn)徙垫,就需要將服務(wù)信息存儲到某個載體讥裤,載體本身即是微服務(wù)治理的服務(wù)注冊中心,而存儲到載體的動作即是服務(wù)注冊姻报。
? springcloud支持的注冊中心有Eureka己英、ZookeeperConsul吴旋、Nacos

組件名稱 所屬公司 組件簡介
Eureka Netflix springcloud最早的注冊中心损肛,目前已經(jīng)進入停更進維
Zookeeper Apache zookeeper是一個分布式協(xié)調(diào)工具,可以實現(xiàn)注冊中心功能
Consul Hashicorp Consul 簡化了分布式環(huán)境中的服務(wù)的注冊和發(fā)現(xiàn)流程荣瑟,通過 HTTP 或者 DNS 接口發(fā)現(xiàn)治拿。支持外部 SaaS 提供者等。
Nacos Alibaba Nacos 致力于幫助您發(fā)現(xiàn)笆焰、配置和管理微服務(wù)劫谅。Nacos 提供了一組簡單易用的特性集,幫助您快速實現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置捏检、服務(wù)元數(shù)據(jù)及流量管理荞驴。

1.1 eureka

Spring Cloud Netflix 在設(shè)計 Eureka 時就緊遵AP原則,Eureka Server 也可以運行多個實例來構(gòu)建集群,解決單點問題贯城,但不同于 ZooKeeper 的選舉 leader 的過程熊楼,Eureka Server 采用的是Peer to Peer 對等通信。這是一種去中心化的架構(gòu)冤狡,無 master/slave 之分孙蒙,每一個 Peer 都是對等的。在這種架構(gòu)風(fēng)格中悲雳,節(jié)點通過彼此互相注冊來提高可用性挎峦,每個節(jié)點需要添加一個或多個有效的 serviceUrl 指向其他節(jié)點。每個節(jié)點都可被視為其他節(jié)點的副本合瓢。

在集群環(huán)境中如果某臺 Eureka Server 宕機坦胶,Eureka Client 的請求會自動切換到新的 Eureka Server 節(jié)點上,當(dāng)宕機的服務(wù)器重新恢復(fù)后晴楔,Eureka 會再次將其納入到服務(wù)器集群管理之中顿苇。當(dāng)節(jié)點開始接受客戶端請求時,所有的操作都會在節(jié)點間進行復(fù)制(replicate To Peer)操作税弃,將請求復(fù)制到該 Eureka Server 當(dāng)前所知的其它所有節(jié)點中纪岁。

Eureka的集群中,只要有一臺Eureka還在则果,就能保證注冊服務(wù)可用(保證可用性)幔翰,只不過查到的信息可能不是最新的(不保證強一致性)。除此之外西壮,Eureka還有一種自我保護機制遗增,如果在15分鐘內(nèi)超過85%的節(jié)點都沒有正常的心跳,那么Eureka就認為客戶端與注冊中心出現(xiàn)了網(wǎng)絡(luò)故障款青,此時會出現(xiàn)以下幾種情況:

  • Eureka不再從注冊表中移除因為長時間沒有收到心跳而過期的服務(wù)做修;
  • Eureka仍然能夠接受新服務(wù)注冊和查詢請求,但是不會被同步到其它節(jié)點上(即保證當(dāng)前節(jié)點依然可用)抡草;
  • 當(dāng)網(wǎng)絡(luò)穩(wěn)定時饰及,當(dāng)前實例新注冊的信息會被同步到其它節(jié)點中;

因此渠牲,Eureka可以很好的應(yīng)對因網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點失去聯(lián)系的情況旋炒,而不會像zookeeper那樣使得整個注冊服務(wù)癱瘓

Eureka保證高可用(A)和最終一致性:

  • 服務(wù)注冊相對要快,因為不需要等注冊信息replicate到其他節(jié)點签杈,也不保證注冊信息是否replicate成功
  • 當(dāng)數(shù)據(jù)出現(xiàn)不一致時,雖然A, B上的注冊信息不完全相同,但每個Eureka節(jié)點依然能夠正常對外提供服務(wù)答姥,這會出現(xiàn)查詢服務(wù)信息時如果請求A查不到铣除,但請求B就能查到。如此保證了可用性但犧牲了一致性鹦付。

1.2 zookeeper

與 Eureka 有所不同尚粘,Apache Zookeeper 在設(shè)計時就緊遵CP原則,即任何時候?qū)?Zookeeper 的訪問請求能得到一致的數(shù)據(jù)結(jié)果敲长,同時系統(tǒng)對網(wǎng)絡(luò)分割具備容錯性郎嫁,但是 Zookeeper 不能保證每次服務(wù)請求都是可達的。從 Zookeeper 的實際應(yīng)用情況來看祈噪,在使用 Zookeeper 獲取服務(wù)列表時泽铛,如果此時的 Zookeeper 集群中的 Leader 宕機了,該集群就要進行 Leader 的選舉辑鲤,又或者 Zookeeper 集群中半數(shù)以上服務(wù)器節(jié)點不可用(例如有三個節(jié)點盔腔,如果節(jié)點一檢測到節(jié)點三掛了 ,節(jié)點二也檢測到節(jié)點三掛了月褥,那這個節(jié)點才算是真的掛了)弛随,那么將無法處理該請求。所以說宁赤,Zookeeper 不能保證服務(wù)可用性舀透。

1.3 consul

Consul 是 HashiCorp 公司推出的開源工具,用于實現(xiàn)分布式系統(tǒng)的服務(wù)發(fā)現(xiàn)與配置决左。Consul 使用 Go 語言編寫愕够,因此具有天然可移植性(支持Linux、windows和Mac OS X)哆窿。Consul 內(nèi)置了服務(wù)注冊與發(fā)現(xiàn)框架链烈、分布一致性協(xié)議實現(xiàn)、健康檢查挚躯、Key/Value 存儲强衡、多數(shù)據(jù)中心方案,不再需要依賴其他工具(比如 ZooKeeper 等)码荔,使用起來也較為簡單漩勤。
Consul 遵循CAP原理中的CP原則,保證了強一致性和分區(qū)容錯性缩搅,且使用的是Raft算法越败,比zookeeper使用的Paxos算法更加簡單。雖然保證了強一致性硼瓣,但是可用性就相應(yīng)下降了究飞,例如服務(wù)注冊的時間會稍長一些置谦,因為 Consul 的 raft 協(xié)議要求必須過半數(shù)的節(jié)點都寫入成功才認為注冊成功 ;在leader掛掉了之后亿傅,重新選舉出leader之前會導(dǎo)致Consul 服務(wù)不可用媒峡。

Consul強一致性(C)帶來的是:

  • 服務(wù)注冊相比Eureka會稍慢一些。因為Consul的raft協(xié)議要求必須過半數(shù)的節(jié)點都寫入成功才認為注冊成功

  • Leader掛掉時葵擎,重新選舉期間整個consul不可用谅阿。保證了強一致性但犧牲了可用性。

1.4 Nacos

Nacos是阿里開源的酬滤,Nacos 支持基于 DNS 和基于 RPC 的服務(wù)發(fā)現(xiàn)签餐。Nacos除了服務(wù)的注冊發(fā)現(xiàn)之外,還支持動態(tài)配置服務(wù)盯串。動態(tài)配置服務(wù)可以讓您以中心化氯檐、外部化和動態(tài)化的方式管理所有環(huán)境的應(yīng)用配置和服務(wù)配置。動態(tài)配置消除了配置變更時重新部署應(yīng)用和服務(wù)的需要嘴脾,讓配置管理變得更加高效和敏捷男摧。配置中心化管理讓實現(xiàn)無狀態(tài)服務(wù)變得更簡單,讓服務(wù)按需彈性擴展變得更容易译打。 一句話概括就是Nacos = 注冊中心 + 配置中心耗拓。

二、功能異同

這四個組件雖然都實現(xiàn)了注冊中心的功能奏司,但是他們的功能和實現(xiàn)方式都有不同的地方乔询,也各有各的優(yōu)點,單從注冊中心方面來比價四個注冊中心(如果不了解CAP定理可先閱讀下一章節(jié)):

2.1 基本實現(xiàn)不同

組件名稱 實現(xiàn)語言 CAP 健康檢查
Eureka Java AP 可配
Zookeeper Java CP 支持
Consul Golang CP 支持
Nacos Java AP 支持

eureka就是個servlet程序,跑在servlet容器中; Consul則是go編寫而成韵洋。

2.2 功能支持度不同

Nacos Eureka Consul CoreDNS Zookeeper
一致性協(xié)議 CP+AP AP CP CP
健康檢查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
負載均衡策略 權(quán)重/metadata/Selector Ribbon Fabio RoundRobin
雪崩保護
自動注銷實例 支持 支持 不支持 不支持 支持
訪問協(xié)議 HTTP/DNS HTTP HTTP/DNS DNS TCP
監(jiān)聽支持 支持 支持 支持 不支持 支持
多數(shù)據(jù)中心 支持 支持 支持 不支持 不支持
跨注冊中心同步 支持 不支持 支持 不支持 不支持
SpringCloud集成 支持 支持 支持 不支持 不支持
Dubbo集成 支持 不支持 不支持 不支持 支持
K8S集成 支持 不支持 支持 支持 不支持

三竿刁、CAP定理

cap定理

CAP原則又稱CAP定理,指的是在一個分布式系統(tǒng)中搪缨,一致性(Consistency)食拜、可用性(Availability)、分區(qū)容錯性(Partition tolerance)副编。CAP 原則指的是负甸,這三個要素最多只能同時實現(xiàn)兩點,不可能三者兼顧痹届。參考 阮一峰博客呻待。

  • Consistency 一致性:所有數(shù)據(jù)備份,在同一時刻是否同樣的值队腐。(等同于所有節(jié)點訪問同一份最新的數(shù)據(jù)副本)
  • Availability 可用性:在集群中一部分節(jié)點故障后蚕捉,集群整體是否還能響應(yīng)客戶端的讀寫請求。(對數(shù)據(jù)更新具備高可用性)
  • Partition Tolerance 容錯性:以實際效果而言柴淘,分區(qū)相當(dāng)于對通信的時限要求迫淹。系統(tǒng)如果不能在時限內(nèi)達成數(shù)據(jù)一致性秘通,就意味著發(fā)生了分區(qū)的情況,必須就當(dāng)前操作在C和A之間做出選擇千绪。

CAP原則的精髓就是要么AP充易,要么CP梗脾,要么AC荸型,但是不存在CAP。如果在某個分布式系統(tǒng)中數(shù)據(jù)無副本炸茧, 那么系統(tǒng)必然滿足強一致性條件瑞妇, 因為只有獨一數(shù)據(jù),不會出現(xiàn)數(shù)據(jù)不一致的情況梭冠,此時C和P兩要素具備辕狰,但是如果系統(tǒng)發(fā)生了網(wǎng)絡(luò)分區(qū)狀況或者宕機,必然導(dǎo)致某些數(shù)據(jù)不可以訪問控漠,此時可用性條件就不能被滿足蔓倍,即在此情況下獲得了CP系統(tǒng),但是CAP不可同時滿足盐捷。

因此在進行分布式架構(gòu)設(shè)計時偶翅,必須做出取舍。當(dāng)前一般是通過分布式緩存中各節(jié)點的最終一致性來提高系統(tǒng)的性能碉渡,通過使用多節(jié)點之間的數(shù)據(jù)異步復(fù)制技術(shù)來實現(xiàn)集群化的數(shù)據(jù)一致性聚谁。通常使用類似 memcached 之類的 NOSQL 作為實現(xiàn)手段。雖然 memcached 也可以是分布式集群環(huán)境的滞诺,但是對于一份數(shù)據(jù)來說形导,它總是存儲在某一臺 memcached 服務(wù)器上。如果發(fā)生網(wǎng)絡(luò)故障或是服務(wù)器死機习霹,則存儲在這臺服務(wù)器上的所有數(shù)據(jù)都將不可訪問朵耕。由于數(shù)據(jù)是存儲在內(nèi)存中的,重啟服務(wù)器淋叶,將導(dǎo)致數(shù)據(jù)全部丟失阎曹。當(dāng)然也可以自己實現(xiàn)一套機制,用來在分布式 memcached 之間進行數(shù)據(jù)的同步和持久化爸吮,但是實現(xiàn)難度是非常大的

CAP定理關(guān)注的粒度是數(shù)據(jù)芬膝,而不是整體的架構(gòu)。

例如形娇,根據(jù)CAP定理將NoSql數(shù)據(jù)分成了滿足CA原則锰霜、滿足CP原則和滿足AP原則的三大類:

  • CA-單點集群,滿足一致性可用性的系統(tǒng)桐早,擴展能力不強
  • CP-滿足一致性和容錯性系統(tǒng)癣缅,性能不高
  • AP-滿足可用性厨剪、容錯性的系統(tǒng),對一致性要求低一些友存。

四祷膳、參考文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市膨俐,隨后出現(xiàn)的幾起案子勇皇,更是在濱河造成了極大的恐慌,老刑警劉巖焚刺,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敛摘,死亡現(xiàn)場離奇詭異,居然都是意外死亡乳愉,警方通過查閱死者的電腦和手機兄淫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔓姚,“玉大人捕虽,你說我怎么就攤上這事÷咐郑” “怎么了薯鳍?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挨措。 經(jīng)常有香客問我挖滤,道長,這世上最難降的妖魔是什么浅役? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任斩松,我火速辦了婚禮,結(jié)果婚禮上觉既,老公的妹妹穿的比我還像新娘惧盹。我一直安慰自己,他們只是感情好瞪讼,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布钧椰。 她就那樣靜靜地躺著,像睡著了一般符欠。 火紅的嫁衣襯著肌膚如雪嫡霞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天希柿,我揣著相機與錄音诊沪,去河邊找鬼养筒。 笑死,一個胖子當(dāng)著我的面吹牛端姚,可吹牛的內(nèi)容都是我干的晕粪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼渐裸,長吁一口氣:“原來是場噩夢啊……” “哼巫湘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起橄仆,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤剩膘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盆顾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡畏梆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年您宪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奠涌。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡宪巨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溜畅,到底是詐尸還是另有隱情捏卓,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布慈格,位于F島的核電站怠晴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浴捆。R本人自食惡果不足惜蒜田,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望选泻。 院中可真熱鬧冲粤,春花似錦、人聲如沸页眯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窝撵。三九已至傀顾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忿族,已是汗流浹背锣笨。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工蝌矛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人错英。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓入撒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親椭岩。 傳聞我的和親對象是個殘疾皇子茅逮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349