首先再說為什么之前...
我們先來了解下ZooKeeper是什么...
ZooKeeper是Apache基金會下的一個開源的
高可用的分布式應(yīng)用協(xié)調(diào)服務(wù)
許多公司都把它用于服務(wù)發(fā)現(xiàn)....
但在云環(huán)境中,面對設(shè)備及網(wǎng)絡(luò)故障時的恢復(fù)能力是需要重點考慮的問題赞辩。因此恩袱,將應(yīng)用部署在云上快鱼,就必須要預(yù)見到硬件故障读第、網(wǎng)絡(luò)延遲以及網(wǎng)絡(luò)分區(qū)等問題曙博,進而構(gòu)建出恢復(fù)能力強的系統(tǒng)。那為什么說把ZooKeeper用于服務(wù)發(fā)現(xiàn)是個錯誤的做法呢...理由如下
在ZooKeeper中卦方,網(wǎng)絡(luò)分區(qū)中的客戶端節(jié)點無法到達Quorum時羊瘩,就會與ZooKeeper失去聯(lián)系泰佳,從而也就無法使用其服務(wù)發(fā)現(xiàn)機制盼砍。因此尘吗,在用于服務(wù)發(fā)現(xiàn)時,ZooKeeper無法很好地處理網(wǎng)絡(luò)分區(qū)問題浇坐。作為一個協(xié)調(diào)服務(wù)睬捶,這沒問題。但對于服務(wù)發(fā)現(xiàn)來說近刘,信息中可能包含錯誤要好于沒有信息擒贸。雖然可以通過客戶端緩存和其它技術(shù)彌補這種缺陷,像Pinterest和Airbnb等公司所做的那樣觉渴,但這并不能從根本上解決問題介劫,如果Quorum完全不可用,或者集群分區(qū)和客戶端都恰好連接到了不屬于這個Quorum但仍然健康的節(jié)點案淋,那么客戶端狀態(tài)仍將丟失座韵。
更重要地,上述做法的本質(zhì)是試圖用緩存提高一個一致性系統(tǒng)的可用性踢京,即在一個CP系統(tǒng)之上構(gòu)建AP系統(tǒng)誉碴,這根本就是錯誤的方法。服務(wù)發(fā)現(xiàn)系統(tǒng)從設(shè)計之初就應(yīng)該針對可用性而設(shè)計瓣距。
拋開CAP理論不說黔帕,ZooKeeper的設(shè)置和維護非常困難,以致Knewton多次因為錯誤的使用出現(xiàn)問題蹈丸。一些看似很簡單的事情成黄,實際操作起來也非常容易出錯,如在客戶端重建Watcher逻杖,處理Session和異常慨默。另外,ZooKeeper本身確實也存在一些問題弧腥,如ZOOKEEPER-1159厦取、ZOOKEEPER-1576。
由于這些問題的存在管搪,他們切換到了Eureka虾攻。這是一個由Netflix開發(fā)的、開源的服務(wù)發(fā)現(xiàn)解決方案更鲁,具有可用性高霎箍、恢復(fù)能力強的特點。相比之下...它有如下優(yōu)點....
如果一個服務(wù)器出現(xiàn)問題澡为,Eureka不需要任何類型的選舉漂坏,客戶端會自動切換并連接到一個新的Eureka服務(wù)器。當(dāng)它恢復(fù)時,可以自動加入Eureka節(jié)點集群顶别。而且谷徙,按照設(shè)計,它可以在零停機的情況下處理更廣泛的網(wǎng)絡(luò)分區(qū)問題驯绎。在出現(xiàn)網(wǎng)絡(luò)分區(qū)的情況下完慧,Eureka將繼續(xù)接受新的注冊并發(fā)布。這可以確保新增服務(wù)仍然可以供分區(qū)同側(cè)的任意客戶端使用剩失。
Eureka有一個服務(wù)心跳的概念屈尼,可以阻止過期數(shù)據(jù):如果一個服務(wù)長時間沒有發(fā)送心跳,那么Eureka將從服務(wù)注冊中將其刪除拴孤。但在出現(xiàn)網(wǎng)絡(luò)分區(qū)脾歧、Eureka在短時間內(nèi)丟失過多客戶端時,它會停用這一機制演熟,進入“自我保護模式”涨椒。網(wǎng)絡(luò)恢復(fù)后,它又會自動退出該模式绽媒。這樣蚕冬,雖然它保留的數(shù)據(jù)中可能存在錯誤,卻不會丟失任何有效數(shù)據(jù)是辕。
Eureka在客戶端會有緩存囤热。即使所有Eureka服務(wù)器不可用,服務(wù)注冊信息也不會丟失获三。緩存在這里是恰當(dāng)?shù)呐园驗樗辉谒蠩ureka服務(wù)器都沒響應(yīng)的情況下才會用到。 Eureka就是為服務(wù)發(fā)現(xiàn)而構(gòu)建的疙教。它提供了一個客戶端庫棺聊,該庫提供了服務(wù)心跳、服務(wù)健康檢查贞谓、自動發(fā)布及緩存刷新等功能限佩。使用ZooKeeper,這些功能都需要自己實現(xiàn)裸弦。
管理簡單祟同,很容易添加和刪除節(jié)點。它還提供了一個清晰簡潔的網(wǎng)頁理疙,上面列出了所有的服務(wù)及其健康狀況晕城。
Eureka還提供了RESTAPI,使用戶可以將其集成到其它可能的用途和查詢機制窖贤。
總之砖顷,云平臺并不總是可靠...
服務(wù)發(fā)現(xiàn)需要具備盡可能高的可用性和恢復(fù)能力...
而Eureka恰恰是針對這種情況而設(shè)計的...