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恰恰是针对这种情况而设计的。
http://www.infoq.com/cn/news/2014/12/zookeeper-service-finding/
相关推荐
在本文中,我们将深入探讨如何使用Zookeeper作为服务注册与发现机制,在SpringBoot环境中构建一个微服务示例。首先,让我们了解SpringBoot和Zookeeper的基本概念。 SpringBoot是由Pivotal团队开发的一个Java框架,...
Zookeeper作为一个分布式协调服务,是Apache Hadoop项目的一部分,它为分布式应用提供了高效且可靠的命名服务、配置管理、集群同步等关键功能。Zookeeper在线注册服务查看工具则为开发者提供了一个便捷的途径来观察...
* 服务发现:ZooKeeper可以用于云原生架构中的服务发现,帮助客户端发现服务提供者 * 配置管理:ZooKeeper可以用于云原生架构中的配置管理,存储和管理云原生应用程序的配置信息 * 分布式同步:ZooKeeper可以用于云...
总的来说,Zookeeper结合Curator的`ServiceDiscovery`机制,为分布式系统中的服务提供了一种可靠、灵活的注册与发现方案。开发者可以通过上述接口轻松地实现服务的生命周期管理和查找,确保服务之间的通信稳定可靠。...
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...
若仅需在单机上运行Zookeeper用于开发测试,则可简化配置流程,仅需关注`zoo.cfg`文件的基础配置项,无需设置集群相关的配置信息。 ##### 2.4 启动Zookeeper 完成以上配置后,可通过以下命令启动Zookeeper: ```...
在服务端,通过`@Service`注解标记服务类,`@Reference`注解用于消费其他服务。接着,配置Zookeeper的相关信息,如连接地址等,使服务能在Zookeeper上注册和发现。服务消费者同样需要配置Zookeeper,以便查找和调用...
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...
- 运行 JAR 包,命令通常为:`java -jar zookeeper-dev-ZooInspector.jar`,这将启动 ZooInspector 应用程序。 - 需要确保 ZooKeeper 服务器正在运行,并提供正确的连接字符串(如 `localhost:2181`)以连接到 ...
在微服务架构中,Zookeeper广泛应用于服务发现、配置管理、命名服务等多个场景。本篇文章将深入探讨Zookeeper在服务注册与订阅中的核心概念和实现机制。 一、Zookeeper服务注册 1. Zookeeper节点模型:Zookeeper的...
Zookeeper 是一个分布式协调服务,常用于管理分布式应用中的配置信息、命名服务、分布式同步、组服务等。本文将详细介绍Zookeeper的三种部署方式:单机模式、伪集群模式和集群模式。 1. **Zookeeper 的单机模式搭建...
总结来说,Zookeeper通过其强大的一致性保证和事件通知机制,为服务发现提供了可靠的基础设施。理解和掌握Zookeeper的原理和操作,对于构建健壮的分布式系统具有重要意义。在3.5.2-alpha版本中,开发者可以享受到更...
在Windows环境下,为了方便管理和启动ZooKeeper,我们可以将其安装为Windows服务。 安装ZooKeeper为Windows服务的过程主要涉及到两个关键工具:`prunmgr.exe`和`prunsrv.exe`。这两个工具是Apache Commons Daemon的...
在SpringBoot和SpringFramework的环境中,我们可以方便地集成ZooKeeper,利用其提供的API来实现服务注册与发现、配置管理等功能。SpringBoot的自动配置特性可以简化ZooKeeper客户端的设置,只需在项目中引入相应的...
2. **服务发现**:服务消费者在需要调用远程服务时,会向Zookeeper查询服务提供者的地址,获取到这些信息后,消费者就能直接与服务提供者建立通信。 3. **动态配置**:Zookeeper可以用来存储和分发系统配置,如果...
Zookeeper是Apache软件基金会的一个开源项目,主要用于分布式协调服务,它是集群管理的基石,被广泛应用于大数据、云计算等领域。Zookeeper 3.4.12是该系统的一个稳定版本,提供了解压即用的便利性。 一、Zookeeper...
Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...
1.1 ZooKeeper的角色:ZooKeeper作为一个分布式一致性服务,它提供命名服务、配置管理、集群同步、选举等功能,常用于分布式数据库、分布式计算、服务发现等多个领域。 1.2 数据模型:ZooKeeper的数据结构类似于...
Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着分布式应用程序的运行状态,提供诸如命名服务、配置管理、分布式同步、组服务等分布式基础服务。Zookeeper的设计目标...
例如,在Hadoop、Kafka、HBase等大数据框架中,Zookeeper作为关键组件,提供元数据管理、服务发现和一致性维护等功能。 在使用Zookeeper时,需要注意监控Zookeeper的服务状态,定期备份数据,以及定期升级以获取...