前言
注冊中心的由來
微服務架構(gòu)是存在著很多跨服務調(diào)用,每個服務都存在著多個節(jié)點,如果有多個提供者和消費者,當提供者增加/減少或者消費者增加/減少,雙方都需要感知發(fā)現(xiàn)。所以誕生了注冊中心這個中間件。
市面上有很多注冊中心,如 Zookeeper、NameServer、Eureka、Nacos,下面我來講一下它們的特點、應用和區(qū)別。
Zookeeper
Zookeeper的存儲結(jié)構(gòu)是樹形結(jié)構(gòu),它有四種節(jié)點,分別是:
- 持久節(jié)點:除非自己刪除,否則一直存在。
- 持久順序節(jié)點:加了編號,按添加時間排序。
- 臨時節(jié)點:Zookeeper會維護一個跟客戶端的session,通過心跳存續(xù),如果客戶端失去心跳,一段時間后節(jié)點的session到期,就會刪除節(jié)點。
- 臨時順序節(jié)點。
特點
- Watch監(jiān)聽器:當客戶端向某個節(jié)點添加監(jiān)聽,當節(jié)點發(fā)生變化,Zookeeper會實時通知客戶端。
- 節(jié)點的名字唯一,不允許重復創(chuàng)建。
強一致性
Zookeeper多節(jié)點部署,只要集群中存在超過一半的節(jié)點能夠正常工作,那么整個集群就能夠正常對外服務。
Zookeeper圍繞著ZAB協(xié)議保障數(shù)據(jù)的一致性。
ZAB協(xié)議里規(guī)定,Zookeeper集群中只有一個主節(jié)點,其余都是從節(jié)點。
所有的寫請求都必須先走主節(jié)點,主節(jié)點寫入后,同步給從節(jié)點,超過半數(shù)的節(jié)點返回成功,則返回客戶端成功,沒有超過一半,則返回客戶端失敗。
為了提升讀的性能,讀請求不要求必須請求主節(jié)點,從節(jié)點也可以讀。
如果主節(jié)點掛了,那么會進行主節(jié)點選舉,ZAB協(xié)議為了保障一致性,選舉期間服務是不可用的,犧牲了一些可用性(CP)。
當主節(jié)點掛了,就會開始選舉,持有消息最新的節(jié)點有資格參加競選,當最終投票超過半數(shù)就會被選為主節(jié)點,并通知其他節(jié)點。
應用
利用上述這些特點,Zookeeper有用廣泛的應用。
Dubbo中的注冊中心
當Dubbo provider啟動時,會在Zookeeper上的 /dubbo/{serviceName}/providers
節(jié)點上添加一個臨時節(jié)點。
當consumer啟動時,會在Zookeeper上的 /dubbo/{serviceName}/consumers
節(jié)點下添加一個臨時節(jié)點,同時添加watcher監(jiān)聽providers節(jié)點。
當新增provider節(jié)點,consumer通過watcher機制能夠馬上會收到并本地緩存。
當provider掛了,心跳斷開連接時,等臨時節(jié)點的會話到期會觸發(fā)節(jié)點刪除,consumer會收到并本地緩存。
通過watcher機制,當consumer發(fā)生了變化,provider能夠及時感應到。文章來源:http://www.zghlxwxcb.cn/news/detail-740780.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-740780.html
到了這里,關于注冊中心ZK、nameServer、eureka、Nacos介紹與對比的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!