工作中对Zookeeper都是间接比较浅的使用,性能也没太高的要求所以对它的缺点也没太深的认识,从网上评价看,它还是有不少问题的。
1. 原生客户端坑太多,Curator(Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量)今日的江湖地位一定程度要归功于原生客户端的难用。
2. Zookeeper的社区不太活跃,发版节奏跟etcd和consul没法比。一些Major bug提了也给了fix patch,迟迟没有review(如ZOOKEEPER-2101, 15年的Major bug到现在还是没有resolved)
3. 监控工具不给力,社区除了Zimmerman大神操刀的Exhibitor,以及多年不更新的taokeeper外,没有多少选择;
4. Zookeeper不能保证跨session的强一致性;
5. Scalability很弱,3.5.0之前的版本修改任何配置还得要rolling update;3.5.0之后新增支持动态reconfiguration。
总结,Zookeeper最大的缺陷是:只提供基础的操作,并且客户端、API不好用。
Zookeeper目标实现:provide a simple and high performance kernel for building more complex coordination primitives at the client,也就是说提供更通用,更原子的原材料,而将更多的事留给使用者。
Zookeeper设计本来就是充着做协调服务的然而,协调服务是各异的,基本上没有统一算法框架或者服务架构可言。要说最基础的分布式协调服务的大概只有election,这个Zookeeper提供了,然而也只是Zookeeper的quorum。(HBase的election是HBase另外写的。比较难的写一致性问题 ,Zookeeper也帮你解了,就是zab了。实际上,Zookeeper只给你提供了一堆操作,大部分都是基于znode,还有重要的watch机制。怎么利用它来做协调服务都是要开发者自己实现。类比就是食材给你了,怎么煮你自己来。
因此,很多架构会用到Zookeeper,Hadoop, HBase, Kafka, etc.但看下源码,都会有独立的package关于Zookeeper的,里面就是各开发者的"炮制"配方。
但凡吐槽某个架构下Zookeeper的使用情景效能问题的,只能说明该架构的开发者对待“食材”,“煮”的“不太好吃”。那些都是开发者自己写的,不是Zookeeper的锅。觉得不ok去社区吐槽,贡献代码。Zookeeper其实什么都没做。它只是提供操作而已。

Zookeeper的缺点的更多相关文章

  1. zookeeper的监控

    1.idea插件: zookeeper https://blog.csdn.net/long290046464/article/details/52974061 优点:直接查看,不用来回切换监控 缺点 ...

  2. Ignite、Vertx

    Ignite IpFinder 默认采用multicast的ip发现方式 优点: 集群较小时,配置方便 缺点 集群较大100s-1000s时,广播非常耗时,此时建议使用ZooKeeper发现机制(Zo ...

  3. 常见分布式唯一ID生成策略

    方法一: 用数据库的 auto_increment 来生成 优点: 此方法使用数据库原有的功能,所以相对简单 能够保证唯一性 能够保证递增性 id 之间的步长是固定且可自定义的 缺点: 可用性难以保证 ...

  4. 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)

    在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...

  5. 从头开始搭建一个dubbo+zookeeper平台

    本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后 ...

  6. 高级java必会系列一:zookeeper分布式锁

    方案1: 算法思路:利用名称唯一性,加锁操作时,只需要所有客户端一起创建/test/Lock节点,只有一个创建成功,成功者获得锁.解锁时,只需删除/test/Lock节点,其余客户端再次进入竞争创建节 ...

  7. zookeeper学习(一)安装、配置、运行

    说明:zookeeper完全可以standalone,也可以伪集群形式,当然生产中都是集群形式.另外,也可以在windows下运行. 如果只是研究用,完全可以在windows下使用standalone ...

  8. 服务发现:Zookeeper vs etcd vs Consul

    [编者的话]本文对比了Zookeeper.etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考. 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务 ...

  9. 分布式锁2 Java非常用技术方案探讨之ZooKeeper

    前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.以自己结合实际工作中的一些经验和网上看到的一些资料 ...

随机推荐

  1. Elasticsearch常见用法-入门

    前台启动 默认是只有本地可以访问 ./bin/elasticsearch 远程访问 修改elasticsearch.yml,把network.host(注意配置文件格式不是以 # 开头的要空一格, : ...

  2. 配置 Nginx 反向代理 WebSocket

    用Nginx给网站做反向代理和负载均衡是广泛使用的一种Web服务器部署技术.不仅能够保证后端服务器的隐蔽性,还可以提高网站部署灵活性. 今天我们来讲一下,如何用Nginx给WebSocket服务器实现 ...

  3. InstantiationAwareBeanPostProcessor 分析

    Cglib之Enhancer创建动态代理https://blog.csdn.net/yaomingyang/article/details/82762697 https://blog.csdn.net ...

  4. Java自学-异常处理 Exception

    Java 异常 Exception 异常定义: 导致程序的正常流程被中断的事件,叫做异常 步骤 1 : 文件不存在异常 比如要打开d盘的LOL.exe文件,这个文件是有可能不存在的 Java中通过 n ...

  5. Myeclipse中JSP镶嵌的html报错

    Window > perferences > General > Editors > File Associations > 在File types 中选择 *.jsp ...

  6. 很带劲,Android9.0可以在i.MX8开发板上这样跑

    米尔MYD-JX8MX开发板移植了Android9.0操作系统,现阶段最高版本的Android9.0操作系统将给您的产品在安全与稳定性方面带来更大的提升.可惜了,这里不能上传视频在i.MX8开发板跑A ...

  7. js new Date()不带时分秒时,时间变了 问题解决

    //先把电脑系统时间的 时区 调到别的时间一下如 夏威夷 UTC-10:00//在浏览器的Console里运行如下代码,getMonth是从0开始的,所以要+1 var d=new Date(&quo ...

  8. Vue学习之全局和私有组件小结(七)

    一.组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用相应的组件即可. 二.组件和模块: 1.模块化:是从代码逻 ...

  9. Java 之 日期时间类

    一.Date类 1.概述 java.util.Date 类 表示特定的瞬间,精确到毫秒. 2.构造方法 public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒) p ...

  10. elasticsearch 连接查询 基于es5.1.1

    ElasticSerch 的连接查询有两种方式实现 nested parent和child关联查询 nested 存储结构 nested的方式和其他字段一样,在同一个type里面存储,以数组的方式存储 ...