Zookeeper和Eureka哪个更好?

 更新时间:2019年02月11日 09:15:40   作者:邋遢的流浪剑客  
今天小编就为大家分享一篇关于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那样使整个注册服务瘫痪

总结

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

相关文章

  • idea打不开双击IDEA图标没反应的快速解决方案

    idea打不开双击IDEA图标没反应的快速解决方案

    这篇文章主要介绍了idea打不开双击IDEA图标没反应的快速解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 详解Java Bellman-Ford算法原理及实现

    详解Java Bellman-Ford算法原理及实现

    Bellman-Ford算法与Dijkstra算法类似,都是以松弛操作作为基础,Bellman-Ford算法是对所有边都进行松弛操作,本文将详解Bellman-Ford算法原理及实现,感兴趣的可以了解一下
    2022-07-07
  • Java 8 动态类型语言Lambda表达式实现原理解析

    Java 8 动态类型语言Lambda表达式实现原理解析

    Java 8支持动态语言,看到了很酷的Lambda表达式,对一直以静态类型语言自居的Java,让人看到了Java虚拟机可以支持动态语言的目标。接下来通过本文给大家介绍Java 8 动态类型语言Lambda表达式实现原理分析,需要的朋友可以参考下
    2017-02-02
  • springboot自定义拦截器简单使用及举例

    springboot自定义拦截器简单使用及举例

    Spring Boot拦截器是AOP的一种实现,专门拦截对控制层的请求,主要应用于判断用户权限,拦截webSocket请求,下面这篇文章主要给大家介绍了关于springboot自定义拦截器简单使用及举例的相关资料,需要的朋友可以参考下
    2023-01-01
  • Java中线程上下文类加载器超详细讲解使用

    Java中线程上下文类加载器超详细讲解使用

    这篇文章主要介绍了Java中线程上下文类加载器,类加载器负责读取Java字节代码,并转换成java.lang.Class类的一个实例的代码模块。本文主要和大家聊聊JVM类加载器ClassLoader的使用,需要的可以了解一下
    2022-12-12
  • Mybatis表的关联查询详情

    Mybatis表的关联查询详情

    这篇文章主要介绍了Mybatis表的关联查询详情,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 比较java中Future与FutureTask之间的关系

    比较java中Future与FutureTask之间的关系

    在本篇文章里我们给大家分享了java中Future与FutureTask之间的关系的内容,有需要的朋友们可以跟着学习下。
    2018-10-10
  • Java中Redis的布隆过滤器详解

    Java中Redis的布隆过滤器详解

    这篇文章主要介绍了Java中Redis的布隆过滤器详解,我们经常会把一部分数据放在Redis等缓存,比如产品详情,这样有查询请求进来,我们可以根据产品Id直接去缓存中取数据,而不用读取数据库,这是提升性能最简单,最普遍,也是最有效的做法,需要的朋友可以参考下
    2023-09-09
  • JDK线程池和Spring线程池的使用实例解析

    JDK线程池和Spring线程池的使用实例解析

    这篇文章主要介绍了JDK线程池和Spring线程池的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java 驼峰命名法详解(必看篇)

    Java 驼峰命名法详解(必看篇)

    下面小编就为大家带来一篇Java 驼峰命名法详解(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论