为什么nacos比zookeeper更适合做注册中心

首先,那么为什么说zookeeper不适合做服务注册中心呢?

从CAP角度来看

有个思考,从CAP角度考虑,服务注册中心是CP系统还是AP系统呢?

首先,服务注册中心是为了服务间调用服务的,那么绝对不允许因为服务注册中心出现了问题而导致服务间的调用出问题。

再者, 假如有node1,node2,node3,集群节点。 保存着可用服务列表ip1,ip2,ip3,试想如果此时不一致,比如node1只保存了ip1,ip2,此时服务读取node1的节点,那么会造成什么影响?

调用node1的服务,顶多就是负载均衡时不会有流量打到ip3, 然后等 node1同步回ip3后,又一致了,这对服务其实没什么太大影响。

所以,推出服务注册中心应该是个AP系统。

zookeeper是个CP系统,强一致性。

场景1, 当master挂了,此时,zookeeper集群需要重新选举,而此时服务需要来读取可用服务,是不可用的。 影响到了服务的可用性

当然你可以说服务本地有缓存可用列表。然而下面这种方式就更无法处理了。

场景2, 分区可用。试想,有3个机房,如果其中机房3和机房1,2网络断了, 那么机房3的注册中心就不能注册新的机器了么,这显然也不合理

从健康检查来看

zookeeper是通过TCP的心跳判断服务是否可用

但TCP的活性并不代表服务是可用的,但TCP活性就说明服务是可用的么,答案显然是否定的,如: 连接池已经满了,DB挂了等

那么理想的注册中心是什么样的呢,思考下

1, 起码服务的自动注册,发现。 最好有新的服务注册上去时还能推送到调用端

2, 能对注册上来的机器方便的进行管理,能手工剔除(发送信号让服务优雅下线)、恢复机器

3,服务的健康检查,能真正的检测到服务是否可用

4, 如果再好点,可以看到是否有其他调用服务正在订阅注册上来的服务

5,如果能够带上些除了IP外的其它信息,那就更好了

--------------------------------------------------------------

2019. 1.22

一段时间后,补充点想法

ZooKeeper其实比我想象的还要更多瓶颈,最近有遇到说下

1. ZooKeeper写是不可扩展的,当注册节点一定时,写性能会是瓶颈,发布应用时出现排队现象,表现出来的现象就是,应用的启动变得十分缓慢

2. ZooKeeper不支持跨机房的路由,不像eureka,有zone的概念,优先本地路由,当本机房路由,当本机房出现问题时,可以路由到另一个机房

3. ZooKeeper当节点过多时,如果有服务节点变更,需要同时通知机器,会发生“惊群效应”, 瞬间打满网卡,且容易重复通知

----------------------------

关于 Nacos

https://yq.aliyun.com/articles/604028

本文转载自: https://my.oschina.net/u/867417/blog/1865971

原文地址:https://www.cnblogs.com/youyouxiaosheng-lh/p/11209421.html

时间: 2024-10-29 00:14:37

为什么nacos比zookeeper更适合做注册中心的相关文章

ZooKeeper 并不适合做注册中心

zookeeper 的 CP 模型不适合注册中心 zookeeper 是一个非常优秀的项目,非常成熟,被大量的团队使用,但对于服务发现来讲,zookeeper 真的是一个错误的方案. 在 CAP 模型中,zookeeper 是 CP,意味着面对网络分区时,为了保持一致性,他是不可用的. 因为 zookeeper 是一个分布式协调系统,如果使用最终一致性(AP)的话,将是一个糟糕的设计,他的核心算法是 Zab,所有设计都是为了一致性. 对于协调系统,这是非常正确的,但是对于服务发现,可用性是第一位

zookeeper(4)注册中心

案例 注册中心可以使用Eureka来实现,这个比较简单,可以看之前的例子spring-cloud. 那么使用zookeeper如何来实现注册中心呢? 基于spring cloud我们也可以非常简单的实现. 1.利用之前搭建的zookeeper集群,zookeeper集群 2.新建maven工程 1.POM文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://

B树、B-树、B+树、B*树介绍,和B+树更适合做文件索引的原因

今天看数据库,书中提到:由于索引是采用 B 树结构存储的,所以对应的索引项并不会被删除,经过一段时间的增删改操作后,数据库中就会出现大量的存储碎片, 这和磁盘碎片.内存碎片产生原理是类似的,这些存储碎片不仅占用了存储空间,而且降低了数据库运行的速度.如果发现索引中存在过多的存储碎片的话就要进行 “碎片整理”了,最方便的“碎片整理” 手段就是重建索引, 重建索引会将先前创建的索引删除然后重新创建索引,主流数据库管理系统都提供了重建索引的功能,比如 REINDEX.REBUILD 等,如果使用的数据

为何传统家电企业更适合做空气净化器?

前些日子,有关于"健康生活"的理念忽如一夜春风,几乎在一夜之间刮遍了大江南北,在这种全民皆健康生活潮流的影响下,空气净化.环境污染治理等词语便成为大众耳熟能详的新名词.一些有市场远见的厂商,更是趁着这股东风纷纷推出各种空气净化设备,以身体力行方式践行这个全新的理念.这些前后参与的厂商有来自其他领域的新锐厂商如互联网企公司,也有在制造行业沉淀了悠久历史的传统家电企业. 虽然其他领域的公司和传统家电企业在市场机会方面都是平等的,但就目前的综合情况来看,传统家电企业依靠自身的技术积累.品牌沉

Zookeeper、Consul 实现注册中心

1.Zookeeper 分布式协调工具,可以实现注册中心 所有实现方式基本一致,只需要先开启zookeeper的服务端,然后再打开客户端jar包即可. Zookeeper一开始连接失败,后面又可以了,可能时我多启动了几次吧,我先用zkcli.cmd测试了一下,然后再打开这个工具用127.0.0.1连接的,后面测试localhost也可以了 2.Consul也一样,打开cmd窗口,到指定目录,然后输入一串命令即可. 两者都是通过@EnableDiscoveryClient注解实现注册: Zooke

为什么RPP比lua更适合做脚本语言?

1.RPP以静态类型为主,最终的效率肯定比动态类型的lua要高,并且不会引起GC停顿.(目前与luaJIT性能接近) 2.RPP没有GC(自动垃圾回收),与C/C++互相调用简单直接,而且他们共享进程内存空间,RPP变量和C++变量生命周期相同,不会出现像lua一样的这里变量已经GC了那边还在使用. 3.RPP目前兼容50%的C++语法,70%的C语法,因此它天生就更亲近C++系的语法,所以C++程序员几乎无需学习即可使用. 4.RPP支持指针和内联汇编,底层操作更方便. 当然lua已经发展了许

十二星座哪个更适合做程序员?

原文链接 程序猿是一种常年处在被黑-自黑状态中的生物,他们的大部分时候都贡献给了他们热爱的代码事业,虽然大家都是程序员,但即使是同一种语言,每个程序员各自写起代码来还是有很多的不一样的,这或许和他们的星座和性格有很大的关系~ 处女座向来是被大家黑的比较惨的星座,但是如果是写代码,"完(jiao)美(zhen)"的处女座却变成了无数大公司欢迎的CTO种子级别选手!真是十年被黑一朝翻身! 说到白羊座,怎么可能看到一整段白羊座程序员写的完整代码!他们的电脑里大概存了三万多个文档,都是极其美妙

(九)分布式服务----Zookeeper注册中心

==>>点击查看本系列文章目录 首先看一下几种注册中心: 最老的就是Zookeeper了, 比较新的有Eureka,Consul 都可以做注册中心.可以自行搜索对比三者的优缺点. Zookeeper 最开始就是hadoop大家族中的一员,用于做协调的框架,后来已经是apache的子项目了. 几年前大数据很火的时候,只要学hadoop必学zookeeper,当然还有其他成员. 大数据简单说就是分布式,比如分布式文件存储hdfs,分布式数据库hbase,分布式协调zookeeper,还有kafka

13. Dubbo原理解析-注册中心之Zookeeper协议注册中心

下面我们来看下开源dubbo推荐的业界成熟的zookeeper做为注册中心, zookeeper是hadoop的一个子项目是分布式系统的可靠协调者,他提供了配置维护,名字服务,分布式同步等服务.对于zookeeper的原理本文档不分析,后面有时间在做专题. zookeeper注册中心 Zookeeper对数据存储类似linux的目录结构,下面给出官方文档对dubbo注册数据的存储示例 假设读者对zookeeper有所了解,能够搭建zookeeper服务,其实不了解也没关系,谷歌百度下分分钟搞起.