当前位置: 首页 > 编程笔记 >

Zookeeper和Eureka哪个更好?

伯彦君
2023-03-14
本文向大家介绍Zookeeper和Eureka哪个更好?,包括了Zookeeper和Eureka哪个更好?的使用技巧和注意事项,需要的朋友参考一下

Zookeeper和Eureka哪个更好?

1、CAP理论

一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求

C:数据一致性:保证所有数据都要同步

A:可用性:要保证任何时候请求数据都能够正常响应

P:分区容错性:当网络通信发生故障时,集群仍然可用,不会因为某个节点挂了或者存在问题,而影响整个系统的正常运作

对于分布式系统来说,出现网络分区是不可避免的,因此分区容错性是必须要具备的,也就是说,CAP三者,P是必须的

2、Zookeeper保证CP原则

当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求高于一致性。但是zookeeper会出现一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30~120s,且选举期间整个zookeeper集群都是不可用的,这就导致在选举期间服务瘫痪。在云部署的环境下,因网络问题使得zookeeper集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的

3、Eureka保证AP原则

Eureka优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或是如果发现连接失败,则会自动切换至其他节点,只要有一台Eureka还在,就能保证注册服务可用(保证高可用),只不过查询的信息可能不是最新的(不保证强一致性)。除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

1.Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务

2.Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点上(即保证当前节点仍然可用)

3.当网络稳定时,当前实例新的注册信息会被同步到其他节点中

因此,Eureka可以很好的应对网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。如果你想了解更多相关内容请查看下面相关链接

 类似资料:
  • 问题内容: 我知道它们本质上是同一件事,但是就样式而言,哪个是创建空列表或字典的更好(更Pythonic的)? 问题答案: 在速度方面,空列表/字典没有竞争: 对于非空: 另外,使用方括号表示法还可以使您使用列表和字典理解,这可能就足够了。

  • 问题内容: 使用哪种更好或更方便: 要么 问题答案: 您是否完全需要类型属性?如果您使用的是HTML5,则不会。否则,是的。HTML 4.01和XHTML 1.0 根据需要指定属性,而HTML5具有可选属性,默认为。HTML5现在得到了广泛的实现,因此,如果您使用HTML5doctype,则是有效且不错的选择。 至于type属性中应该包含的内容,2006年注册的MIME类型旨在替代所有主要浏览器(

  • 本文向大家介绍ZooKeeper 特点有哪些?相关面试题,主要包含被问及ZooKeeper 特点有哪些?时的应答技巧和注意事项,需要的朋友参考一下 顺序一致性: 从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。 原子性: 所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。

  • Zookeeper实现了一个核心的操作集合,使得对于许多分布式应用非常常见的任务得以实现。你知道多少个应用是需要一个master,或者需要追踪哪个进程是可相应的?然而,Zookeeper不会为你实现那些任务。它不会选举一个领导者,也不会追踪那些活着的进程。相反,它提供了许多工具来实现这些任务。开发者自己觉得他们要实现的是哪种协同任务。

  • 对于大型项目,ui-router是首选。但它给出的主要优点是嵌套视图。但这也可以通过ng-view实现。那么该选哪一个呢?

  • 在测试了大约100亿次之后,如果比AMD64的快0.1纳秒,那么似乎更快,但我不太明白。下面代码中的地址本身不是一个直接值吗? 计量代码为: