为什么阿里的dubbo注册中心要放弃zookeeper, 而用Nacos?
首先,那么為什么說(shuō)zookeeper不適合做服務(wù)注冊(cè)中心呢?
從CAP角度來(lái)看
有個(gè)思考,從CAP角度考慮,服務(wù)注冊(cè)中心是CP系統(tǒng)還是AP系統(tǒng)呢?
首先,服務(wù)注冊(cè)中心是為了服務(wù)間調(diào)用服務(wù)的,那么絕對(duì)不允許因?yàn)榉?wù)注冊(cè)中心出現(xiàn)了問(wèn)題而導(dǎo)致服務(wù)間的調(diào)用出問(wèn)題。
再者, 假如有node1,node2,node3,集群節(jié)點(diǎn)。 保存著可用服務(wù)列表ip1,ip2,ip3,試想如果此時(shí)不一致,比如node1只保存了ip1,ip2,此時(shí)服務(wù)讀取node1的節(jié)點(diǎn),那么會(huì)造成什么影響?
調(diào)用node1的服務(wù),頂多就是負(fù)載均衡時(shí)不會(huì)有流量打到ip3, 然后等 node1同步回ip3后,又一致了,這對(duì)服務(wù)其實(shí)沒(méi)什么太大影響。
所以,推出服務(wù)注冊(cè)中心應(yīng)該是個(gè)AP系統(tǒng)。
zookeeper是個(gè)CP系統(tǒng),強(qiáng)一致性。
場(chǎng)景1, 當(dāng)master掛了,此時(shí),zookeeper集群需要重新選舉,而此時(shí)服務(wù)需要來(lái)讀取可用服務(wù),是不可用的。 影響到了服務(wù)的可用性
當(dāng)然你可以說(shuō)服務(wù)本地有緩存可用列表。然而下面這種方式就更無(wú)法處理了。
場(chǎng)景2, 分區(qū)可用。試想,有3個(gè)機(jī)房,如果其中機(jī)房3和機(jī)房1,2網(wǎng)絡(luò)斷了, 那么機(jī)房3的注冊(cè)中心就不能注冊(cè)新的機(jī)器了么,這顯然也不合理
從健康檢查來(lái)看
zookeeper是通過(guò)TCP的心跳判斷服務(wù)是否可用
但TCP的活性并不代表服務(wù)是可用的,但TCP活性就說(shuō)明服務(wù)是可用的么,答案顯然是否定的,如: 連接池已經(jīng)滿了,DB掛了等
那么理想的注冊(cè)中心是什么樣的呢,思考下
1, 起碼服務(wù)的自動(dòng)注冊(cè),發(fā)現(xiàn)。 最好有新的服務(wù)注冊(cè)上去時(shí)還能推送到調(diào)用端
2, 能對(duì)注冊(cè)上來(lái)的機(jī)器方便的進(jìn)行管理,能手工剔除(發(fā)送信號(hào)讓服務(wù)優(yōu)雅下線)、恢復(fù)機(jī)器
3,服務(wù)的健康檢查,能真正的檢測(cè)到服務(wù)是否可用
4, 如果再好點(diǎn),可以看到是否有其他調(diào)用服務(wù)正在訂閱注冊(cè)上來(lái)的服務(wù)
5,如果能夠帶上些除了IP外的其它信息,那就更好了
關(guān)于 Nacos
https://yq.aliyun.com/articles/604028
歡迎關(guān)注下我的公眾號(hào), JVM和微服務(wù)方面
總結(jié)
以上是生活随笔為你收集整理的为什么阿里的dubbo注册中心要放弃zookeeper, 而用Nacos?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .NET 原生驾驭 AI 新基建实战系列
- 下一篇: codeup之解密