一蟆沫、Eureka不建議使用
在選型微服務(wù)注冊(cè)中心時(shí),一定要長遠(yuǎn)考慮饭庞,SpringCloud提供了Eureka作為服務(wù)注冊(cè)中心舟山,我們可以開箱即用,但是累盗,對(duì)于服務(wù)注冊(cè)中心隨著業(yè)務(wù)需求的不斷變化若债,對(duì)服務(wù)注冊(cè)中心提出了更高要求,Eureka就不太適合了蠢琳,看到“Eureka 2.0 開源工作宣告停止,繼續(xù)使用風(fēng)險(xiǎn)自負(fù)”蓝牲。
這意味著如果開發(fā)者繼續(xù)使用作為 2.x 分支上現(xiàn)有工作 repo 一部分發(fā)布的代碼庫和工件搞旭,則將自負(fù)風(fēng)險(xiǎn),對(duì)此镇眷,專家建議開發(fā)者盡快將相關(guān)業(yè)務(wù)遷移到
Consul/ZooKeeper/Etcd
等工具上翎嫡。
二、Consul與Zookeeper的區(qū)別
Consul是一個(gè)在國外流行的服務(wù)發(fā)現(xiàn)和配置共享的服務(wù)軟件具伍。本文翻譯自Consul的官方文檔圈驼,文中重點(diǎn)講述:在與主流同類軟件ZooKeeper、Doozerd
以及Etcd
比較時(shí)萤厅,Consul的優(yōu)勢(shì)所在靴迫。
ZooKeeper、Doozerd名挥、Etcd
在架構(gòu)上都非常相似主守,它們都有服務(wù)節(jié)點(diǎn)(server node
),而這些服務(wù)節(jié)點(diǎn)的操作都要求達(dá)到節(jié)點(diǎn)的仲裁數(shù)(通常蹋艺,節(jié)點(diǎn)的仲裁數(shù)遵循的是簡單多數(shù)原則)黄刚。此外,它們都是強(qiáng)一致性的涛救,并且提供各種原語。通過應(yīng)用程序內(nèi)部的客戶端lib庫检吆,這些原語可以用來構(gòu)建復(fù)雜的分布式系統(tǒng)蹭沛。
Consul
在一個(gè)單一的數(shù)據(jù)中心內(nèi)部使用服務(wù)節(jié)點(diǎn)。在每個(gè)數(shù)據(jù)中心中摊灭,為了Consule
能夠運(yùn)行帚呼,并且保持強(qiáng)一致性,Consul服務(wù)端需要仲裁眷蜈。然而沈自,Consul
原生支持多數(shù)據(jù)中心,就像一個(gè)豐富gossip
系統(tǒng)連接服務(wù)器節(jié)點(diǎn)和客戶端一樣枯途。
當(dāng)提供K/V存儲(chǔ)的時(shí)候柔袁,這些系統(tǒng)具有大致相同的語義异逐,讀取是強(qiáng)一致性的,并且在面對(duì)網(wǎng)絡(luò)分區(qū)的時(shí)候腥例,為了保持一致性酝润,讀取的可用性是可以犧牲的。然而构回,當(dāng)系統(tǒng)應(yīng)用于復(fù)雜情況時(shí),這種差異會(huì)變得更加明顯脐供。
這些系統(tǒng)提供的語義對(duì)開發(fā)人員構(gòu)建服務(wù)發(fā)現(xiàn)系統(tǒng)很有吸引力借跪,但更重要的是,強(qiáng)調(diào)開發(fā)人員要構(gòu)建這些特性歇由。ZooKeeper
只提供一個(gè)原始的K/V值存儲(chǔ)果港,并要求開發(fā)人員構(gòu)建他們自己的系統(tǒng)來提供服務(wù)發(fā)現(xiàn)功能。相反的是赦肃,Consul
提供了一個(gè)堅(jiān)固的框架公浪,這不僅僅是為了提供服務(wù)發(fā)現(xiàn)功能,也是為了減少推測(cè)工作和開發(fā)工作量厅各≡て猓客戶端只需簡單地完成服務(wù)注冊(cè)工作,然后使用一個(gè)DNS
接口或者HTTP
接口就可以執(zhí)行工作了憔古,而其他系統(tǒng)則需要你定制自己的解決方案淋袖。
一個(gè)令人信服的服務(wù)發(fā)現(xiàn)框架必須包含健康檢測(cè)功能即碗,并且考慮失敗的可能性。要是節(jié)點(diǎn)失敗或者服務(wù)故障了剥懒,即使開發(fā)人員知道節(jié)點(diǎn)A提供Foo服務(wù)也是沒用的初橘。Navie系統(tǒng)利用的是心跳充岛、周期性更新和TTLs批狱,這些系統(tǒng)不僅需要工作量與節(jié)點(diǎn)數(shù)量成線性關(guān)系,并且對(duì)服務(wù)器的固定數(shù)量提出了要求炒俱。此外爪膊,故障檢測(cè)窗口的存活時(shí)間至少要和TTL一樣長推盛。
ZooKeeper
提供了臨時(shí)節(jié)點(diǎn),這些臨時(shí)節(jié)點(diǎn)就是K/V條目榔昔,當(dāng)客戶端斷開連接時(shí)瘪菌,這些條目會(huì)被刪除。雖然這些臨時(shí)節(jié)點(diǎn)比一個(gè)心跳系統(tǒng)更高級(jí)诵肛,但仍存在固有的擴(kuò)展性問題默穴,并且會(huì)增加客戶端的復(fù)雜性。與ZooKeeper
服務(wù)器端連接時(shí)薛训,客戶端必須保持活躍仑氛,并且去做持續(xù)性連接。此外,ZooKeeper
還需要胖客戶端嚎莉,而胖客戶端是很難編寫沛豌,并且胖客戶端會(huì)經(jīng)常導(dǎo)致調(diào)試質(zhì)詢赃额。
Consul
使用一個(gè)完全不同的架構(gòu)進(jìn)行健康檢測(cè)跳芳。Consul
客戶端可以運(yùn)行在集群中的每一個(gè)節(jié)點(diǎn)上竹勉,而不是擁有服務(wù)器節(jié)點(diǎn),這些Consul
客戶端屬于一個(gè)gossip pool
次乓,gossip pool
提供了一些功能,包括分布式健康檢測(cè)票腰。gossip
協(xié)議提供了一個(gè)高效的故障檢測(cè)工具杏慰,這個(gè)故障檢測(cè)工具可以應(yīng)用到任意規(guī)模的集群,而不僅僅是作用于特定的服務(wù)器組缘滥。同時(shí)完域,這個(gè)故障檢測(cè)工具也支持在本地進(jìn)行多種健康檢測(cè)。與此相反凹耙,ZooKeeper的臨時(shí)節(jié)點(diǎn)只是一個(gè)非常原始的活躍度檢測(cè)肠仪。因?yàn)橛辛?code>Consul,客戶端可以檢測(cè)web服務(wù)器是否正在返回200狀態(tài)碼意述,內(nèi)存利用率是否達(dá)到臨界點(diǎn)吮蛹,是否有足夠的數(shù)據(jù)存儲(chǔ)盤等潮针。此外,ZooKeeper
會(huì)暴露系統(tǒng)的復(fù)雜性給客戶端每篷,為了避免ZooKeeper
出現(xiàn)的這種情況,Consul
只提供一個(gè)簡單HTTP接口子库。
Consul
為服務(wù)發(fā)現(xiàn)仑嗅、健康檢測(cè)、K/V存儲(chǔ)和多數(shù)據(jù)中心提供了一流的支持无畔。為了支持任意存儲(chǔ)浑彰,而不僅僅是簡單的K/V存儲(chǔ),其他系統(tǒng)都要求工具和lib庫要率先建立颜价。然而诉濒,通過使用客戶端節(jié)點(diǎn),Consul
提供了一個(gè)簡單的API专挪,這個(gè)API的開發(fā)只需要瘦客戶端就可以了片排, 而且寨腔,通過使用配置文件和DNS接口,開發(fā)人員可以建立完整的服務(wù)發(fā)現(xiàn)解決方案率寡,最終迫卢,達(dá)到避免開發(fā)API的目的。