2019独角兽企业重金招聘Python工程师标准>>>

ZooKeeper是Apache基金会下的一个开源的、高可用的分布式应用协调服务。许多公司都把它用于服务发现。但在云环境中,面对设备及网络故障时的恢复能力是需要重点考虑的问题。因此,将应用部署在云上,就必须要预见到硬件故障、网络延迟以及网络分区等问题,进而构建出恢复能力强的系统。Peter Kelley是个性化教育初创公司Knewton的一名软件工程师。他认为,从根本上讲,把ZooKeeper用于服务发现是个错误的做法,理由如下:

在ZooKeeper中,网络分区中的客户端节点无法到达Quorum时,就会与ZooKeeper失去联系,从而也就无法使用其服务发现机制。因此,在用于服务发现时,ZooKeeper无法很好地处理网络分区问题。作为一个协调服务,这没问题。但对于服务发现来说,信息中可能包含错误要好于没有信息。虽然可以通过客户端缓存和其它技术弥补这种缺陷,像Pinterest和Airbnb等公司所做的那样,但这并不能从根本上解决问题,如果Quorum完全不可用,或者集群分区和客户端都恰好连接到了不属于这个Quorum但仍然健康的节点,那么客户端状态仍将丢失。

更重要地,上述做法的本质是试图用缓存提高一个一致性系统的可用性,即在一个CP系统之上构建AP系统,这根本就是错误的方法。服务发现系统从设计之初就应该针对可用性而设计。

抛开CAP理论不说,ZooKeeper的设置和维护非常困难,以致Knewton多次因为错误的使用出现问题。一些看似很简单的事情,实际操作起来也非常容易出错,如在客户端重建Watcher,处理Session和异常。另外,ZooKeeper本身确实也存在一些问题,如ZOOKEEPER-1159、ZOOKEEPER-1576。

由于这些问题的存在,他们切换到了Eureka。这是一个由Netflix开发的、开源的服务发现解决方案,具有可用性高、恢复能力强的特点。相比之下,它有如下优点:

如果一个服务器出现问题,Eureka不需要任何类型的选举,客户端会自动切换并连接到一个新的Eureka服务器。当它恢复时,可以自动加入Eureka节点集群。而且,按照设计,它可以在零停机的情况下处理更广泛的网络分区问题。在出现网络分区的情况下,Eureka将继续接受新的注册并发布。这可以确保新增服务仍然可以供分区同侧的任意客户端使用。

Eureka有一个服务心跳的概念,可以阻止过期数据:如果一个服务长时间没有发送心跳,那么Eureka将从服务注册中将其删除。但在出现网络分区、Eureka在短时间内丢失过多客户端时,它会停用这一机制,进入“自我保护模式”。网络恢复后,它又会自动退出该模式。这样,虽然它保留的数据中可能存在错误,却不会丢失任何有效数据。

Eureka在客户端会有缓存。即使所有Eureka服务器不可用,服务注册信息也不会丢失。缓存在这里是恰当的,因为它只在所有的Eureka服务器都没响应的情况下才会用到。

Eureka就是为服务发现而构建的。它提供了一个客户端库,该库提供了服务心跳、服务健康检查、自动发布及缓存刷新等功能。使用ZooKeeper,这些功能都需要自己实现。

管理简单,很容易添加和删除节点。它还提供了一个清晰简洁的网页,上面列出了所有的服务及其健康状况。

Eureka还提供了REST API,使用户可以将其集成到其它可能的用途和查询机制。

总之,云平台并不总是可靠,服务发现需要具备尽可能高的可用性和恢复能力,而Eureka恰恰是针对这种情况而设计的。

转载于:https://my.oschina.net/JasonZhang/blog/523052

为什么不要把ZooKeeper用于服务发现相关推荐

  1. RPC Demo(二) 基于 Zookeeper 的服务发现

    RPC Demo(二) 基于 Zookeeper 的服务发现 简介     基于上篇的:RPC Demo(一) Netty RPC Demo 实现     第二部分来实现使用Zookeeper作为服务 ...

  2. 说得太好了!阿里巴巴为什么不用 ZooKeeper 做服务发现?

    作者:坤宇 yq.aliyun.com/articles/601745?scm=20140722.184.2.173 站在未来的路口,回望历史的迷途,常常会很有意思,因为我们会不经意地兴起疯狂的念头, ...

  3. 好文荐读 | 阿里巴巴为什么不用 ZooKeeper 做服务发现?

    服务发现领域一篇比较有名的文章,之前已经转载过国外写的那篇 为什么不应该使用ZooKeeper做服务发现 文章来源:https://developer.aliyun.com/article/60174 ...

  4. 深度 | 阿里为什么不用 ZooKeeper 做服务发现?

    来源 | https://urlify.cn/fIjYVb 站在未来的路口,回望历史的迷途,常常会很有意思,因为我们会不经意地兴起疯狂的念头,例如如果当年某事提前发生了,而另外一件事又没有发生会怎样? ...

  5. 为什么不用 ZooKeeper 做服务发现?

    站在未来的路口,回望历史的迷途,常常会很有意思,因为我们会不经意地兴起疯狂的念头,例如如果当年某事提前发生了,而另外一件事又没有发生会怎样?一如当年的奥匈帝国皇位继承人斐迪南大公夫妇如果没有被塞尔维亚 ...

  6. ​​阿里为什么不用 Zookeeper 做服务发现?

    热文推荐: 尘埃落定!清华才子王垠加入华为职级22,前阿里P10赵海平加入字节跳动,职级或为4+ 百度网盘"破解版",Pandownload开发者被抓 本文来源:yq.aliyun ...

  7. 为什么不应该使用ZooKeeper做服务发现

    本文作者通过ZooKeeper与Eureka作为 Service发现服务(注:WebServices 体系中的UDDI就是个发现服务)的优劣对比,分享了Knewton在云计算平台部署服务的经验.本文虽 ...

  8. android 点对点 通信,将 WLAN 直连(点对点)用于服务发现

    本课程的第一课"使用网络服务发现"向您介绍了如何发现连接到本地网络的服务.然而,使用 WLAN 点对点 (P2P) 服务发现可让您在未连接到网络的情况下直接发现附近设备的服务.您还 ...

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

    服务发现:Zookeeper vs etcd vs Consul 摘自:http://dockone.io/article/667 [编者的话]本文对比了Zookeeper.etcd和Consul三种 ...

  10. zookeeper服务发现实战及原理--spring-cloud-zookeeper源码分析

    1.为什么要服务发现? 服务实例的网络位置都是动态分配的.由于扩展.失败和升级,服务实例会经常动态改变,因此,客户端代码需要使用更加复杂的服务发现机制. 2.常见的服务发现开源组件 etcd-用于共享 ...

最新文章

  1. JMX之模型MBean
  2. nebula的nGQL语句可以为属性添加类似list的数字类型吗
  3. 在64位的linux中运行32位的应用程序
  4. 取代ZooKeeper!高并发下的分布式一致性开源组件StateSynchronizer
  5. JS的深浅复制,原来如此!
  6. 希尔排序的详细过程_算法系列: 10大常见排序算法(4)希尔排序
  7. 驱动AI产业“第二增长曲线”,清华系RealAI发布首个企业级隐私保护机器学习平台与升级版AI模型杀毒软件
  8. linux语音识别_linux语音识别 arm_linux 语音识别引擎 - 云+社区 - 腾讯云
  9. 学习java_java学习册之立FLAG
  10. swift UI专项训练19 TextView 多行文本
  11. Altium Designer(3)-绘制PCB封装库
  12. 西安互联网公司和生活成本
  13. html中的邮件标签
  14. SharePoint Designer 2013 连接 Office 365 必需安装2个SP
  15. 一文读懂Layer 2:Layer 2指基于底层区块链...
  16. mysql自增不连续的问题 ALTER TABLE `表名` AUTO_INCREMENT =1;
  17. 北漂四年,25K,程序员,我依然单身!
  18. matlab 心形曲线
  19. 为视频增加中文字幕---Amazon Transcribe
  20. JMeter配置元件

热门文章

  1. 经典:一文详解socket
  2. numpy教程:ndarray属性、内建函数及其运算、迭代
  3. linux下查看pck设备,Linux中查看硬件信息超强命令sar
  4. systemctl命令_开发者必备Linux命令
  5. 华为融合位置服务器,融合服务器
  6. 战舰少女服务器不显示,战舰少女进不去 闪退及连接不上解决方法
  7. git 合并其他分支代码到自己的分支
  8. Flutter学习 — 从新页面返回数据给上一个页面
  9. 第四步_安装gcc交叉编译工具
  10. Linux驱动实现GPIO模拟I2C读写操作