一、Eureka不建議使用
在選型微服務(wù)注冊中心時,一定要長遠考慮,SpringCloud提供了Eureka作為服務(wù)注冊中心,我們可以開箱即用,但是,對于服務(wù)注冊中心隨著業(yè)務(wù)需求的不斷變化,對服務(wù)注冊中心提出了更高要求,Eureka就不太適合了,看到“Eureka 2.0 開源工作宣告停止,繼續(xù)使用風(fēng)險自負”。
這意味著如果開發(fā)者繼續(xù)使用作為 2.x 分支上現(xiàn)有工作 repo 一部分發(fā)布的代碼庫和工件,則將自負風(fēng)險,對此,專家建議開發(fā)者盡快將相關(guān)業(yè)務(wù)遷移到 Consul/ZooKeeper/Etcd 等工具上。
二、Consul與Zookeeper的區(qū)別
【編者的話】Consul是一個在國外流行的服務(wù)發(fā)現(xiàn)和配置共享的服務(wù)軟件。本文翻譯自Consul的官方文檔,文中重點講述:在與主流同類軟件ZooKeeper、Doozerd以及Etcd比較時,Consul的優(yōu)勢所在。
ZooKeeper、Doozerd、Etcd在架構(gòu)上都非常相似,它們都有服務(wù)節(jié)點(server node),而這些服務(wù)節(jié)點的操作都要求達到節(jié)點的仲裁數(shù)(通常,節(jié)點的仲裁數(shù)遵循的是簡單多數(shù)原則)。此外,它們都是強一致性的,并且提供各種原語。通過應(yīng)用程序內(nèi)部的客戶端lib庫,這些原語可以用來構(gòu)建復(fù)雜的分布式系統(tǒng)。
Consul在一個單一的數(shù)據(jù)中心內(nèi)部使用服務(wù)節(jié)點。在每個數(shù)據(jù)中心中,為了Consule能夠運行,并且保持強一致性,Consul服務(wù)端需要仲裁。然而,Consul原生支持多數(shù)據(jù)中心,就像一個豐富gossip系統(tǒng)連接服務(wù)器節(jié)點和客戶端一樣。
當(dāng)提供K/V存儲的時候,這些系統(tǒng)具有大致相同的語義,讀取是強一致性的,并且在面對網(wǎng)絡(luò)分區(qū)的時候,為了保持一致性,讀取的可用性是可以犧牲的。然而,當(dāng)系統(tǒng)應(yīng)用于復(fù)雜情況時,這種差異會變得更加明顯。
這些系統(tǒng)提供的語義對開發(fā)人員構(gòu)建服務(wù)發(fā)現(xiàn)系統(tǒng)很有吸引力,但更重要的是,強調(diào)開發(fā)人員要構(gòu)建這些特性。ZooKeeper只提供一個原始的K/V值存儲,并要求開發(fā)人員構(gòu)建他們自己的系統(tǒng)來提供服務(wù)發(fā)現(xiàn)功能。相反的是,Consul提供了一個堅固的框架,這不僅僅是為了提供服務(wù)發(fā)現(xiàn)功能,也是為了減少推測工作和開發(fā)工作量??蛻舳酥恍韬唵蔚赝瓿煞?wù)注冊工作,然后使用一個DNS接口或者HTTP接口就可以執(zhí)行工作了,而其他系統(tǒng)則需要你定制自己的解決方案。
一個令人信服的服務(wù)發(fā)現(xiàn)框架必須包含健康檢測功能,并且考慮失敗的可能性。要是節(jié)點失敗或者服務(wù)故障了,即使開發(fā)人員知道節(jié)點A提供Foo服務(wù)也是沒用的。Navie系統(tǒng)利用的是心跳、周期性更新和TTLs,這些系統(tǒng)不僅需要工作量與節(jié)點數(shù)量成線性關(guān)系,并且對服務(wù)器的固定數(shù)量提出了要求。此外,故障檢測窗口的存活時間至少要和TTL一樣長。
ZooKeeper提供了臨時節(jié)點,這些臨時節(jié)點就是K/V條目,當(dāng)客戶端斷開連接時,這些條目會被刪除。雖然這些臨時節(jié)點比一個心跳系統(tǒng)更高級,但仍存在固有的擴展性問題,并且會增加客戶端的復(fù)雜性。與ZooKeeper服務(wù)器端連接時,客戶端必須保持活躍,并且去做持續(xù)性連接。此外,ZooKeeper還需要胖客戶端,而胖客戶端是很難編寫,并且胖客戶端會經(jīng)常導(dǎo)致調(diào)試質(zhì)詢。
Consul使用一個完全不同的架構(gòu)進行健康檢測。Consul客戶端可以運行在集群中的每一個節(jié)點上,而不是擁有服務(wù)器節(jié)點,這些Consul客戶端屬于一個gossip pool,gossip pool提供了一些功能,包括分布式健康檢測。gossip協(xié)議提供了一個高效的故障檢測工具,這個故障檢測工具可以應(yīng)用到任意規(guī)模的集群,而不僅僅是作用于特定的服務(wù)器組。同時,這個故障檢測工具也支持在本地進行多種健康檢測。與此相反,ZooKeeper的臨時節(jié)點只是一個非常原始的活躍度檢測。因為有了Consul,客戶端可以檢測web服務(wù)器是否正在返回200狀態(tài)碼,內(nèi)存利用率是否達到臨界點,是否有足夠的數(shù)據(jù)存儲盤等。此外,ZooKeeper會暴露系統(tǒng)的復(fù)雜性給客戶端,為了避免ZooKeeper出現(xiàn)的這種情況,Consul只提供一個簡單HTTP接口。
Consul為服務(wù)發(fā)現(xiàn)、健康檢測、K/V存儲和多數(shù)據(jù)中心提供了一流的支持。為了支持任意存儲,而不僅僅是簡單的K/V存儲,其他系統(tǒng)都要求工具和lib庫要率先建立。然而,通過使用客戶端節(jié)點,Consul提供了一個簡單的API,這個API的開發(fā)只需要瘦客戶端就可以了, 而且,通過使用配置文件和DNS接口,開發(fā)人員可以建立完整的服務(wù)發(fā)現(xiàn)解決方案,最終,達到避免開發(fā)API的目的。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。