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那样使整个注册服务瘫痪

总结

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

(0)

相关推荐

  • zookeeper监听器原理的详解

    1)监听原理详解: 1)首先要有一个main()线程 2)在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener). 3)通过connect线程将注册的监听事件发送给Zookeeper. 4)在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中. 5)Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程. 6)listener线程内部调用了process()方法. 2)常

  • 从dubbo zookeeper注册地址提取出zookeeper地址的方法

    用途 项目中使用了 dubbo,注册中心使用的 zookeeper,使用 zookeeper 实现了一个简单的分布式锁(依赖 curator),因为配置文件存在 dubbo.registry 配置,为了直接使用这个地址来创建分布式锁,写了一个简单的方法来提取 zookeeper 地址. 效果 dubbo.registry 有多种配置方式,支持所有情况,下面是常见的例子和提取结果: zookeeper://localhost:2181 zookeeper://localhost:2181?clie

  • zookeeper服务优化的一些建议

    1.快照文件和事务日志文件分别挂在不同磁盘.zoo.cfg文件中,dataDir是存放快照数据的,dataLogDir是存放事务日志的.zookeeper更新操作过程:先写事务日志,再写内存,周期性落到磁盘(刷新内存到快照文件).事务日志的对写请求的性能影响很大,保证dataLogDir所在磁盘性能良好.没有竞争者. 2. 默认jvm没有配置Xmx.Xms等信息,可以在conf目录下创建java.env文件(内存堆空间一定要小于机器内存,避免使用swap) export JVMFLAGS="-X

  • 使用JMX监控Zookeeper状态Java API

    一.背景 上一篇通过Java自带的JConsole来获取zookeeper状态.主要有几个不方便的地方,zk集群一般会部署3或者5台,在多个JConsole窗口中切换比较麻烦,各个zk服务及历史数据之间,不能直观比较.一般会做一个WEB管理页面来展示集群状态,设置报警阀值来做报警. 二.JVM平台提供Mbeans 在Java5.0以上版本,有一组API可以让Java应用程序和允许的工具监视和管理Java虚拟机(JVM)和虚拟机所在的本机操作系统.该组API在 java.lang.manageme

  • Zookeeper连接超时问题与拒绝连接的解决方案

    今天在工作中突然遇到这个问题,开始郁闷得不行,查阅了很多资料才解决.话不多少先上图 ①解决连接超时问题 1:在Linux下输入命令ifconfig -a   看看是否ip地址输入错误 2:关闭Linux防火墙,输入  chkconfig iptables off 命令 ②解决拒绝连接问题 报错图忘截了,不好意思,还是直接说解决方案吧! 将前面的127.0.0.1删掉,输入:wq 命令保存就行了,原因是与输入的地址发生冲入,所以拒绝连接. 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的

  • 使用Zookeeper分布式部署PHP应用程序

    Zookper是一种分布式的,开源的,应用于分布式应用的协作服务.它提供了一些简单的操作,使得分布式应用可以基于这些接口实现诸如同步.配置维护和分集群或者命名的服务.Zookper很容易编程接入,它使用了一个和文件树结构相似的数据模型. 虽然ZooKeeper是一个Java应用程序,但C也可以使用.这里就有个PHP的扩展,你可以从PECL中下载,或从GitHub中直接获取PHP-ZooKeeper. 要使用该扩展你首先要安装ZooKeeper.可以从官方网站下载. $ tar zxfv zook

  • zookeeper节点类型详解

    1)Znode有两种类型: 短暂(ephemeral):客户端和服务器端断开连接后,创建的节点自己删除 持久(persistent):客户端和服务器端断开连接后,创建的节点不删除 2)Znode有四种形式的目录节点(默认是persistent ) (1)持久化目录节点(PERSISTENT) 客户端与zookeeper断开连接后,该节点依旧存在 (2)持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL) 客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper

  • windows下zookeeper配置java环境变量的方法

    先找到文件 zookeeper的bin目录下编辑zkEnv.cmd 修改如下图 如果你的系统有多个JAVA_HOME类型的系统变量  则需要在该文件中指定用哪一个,并且还要修改windows的jdk环境变量 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持.如果你想了解更多相关内容请查看下面相关链接

  • zookeeper概述图文详解

    1.1 概述 分布式系统:分布式系统指由很多台计算机组成的一个整体!这个整体一致对外,并且处理同一请求!系统对内透明,对外不透明!内部的每台计算机,都可以相互通信,例如使用RPC/REST或者是WebService!客户端向一个分布式系统发送的一次请求到接受到响应,有可能会经历多台计算机! Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目,多用作为集群提供服务的中间件! Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责

  • linux上安装zookeeper 启动和关闭的教程

    1.zookeeper运行需要java环境所以必须先装JDK 2.下载,解压 #wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz #tar -zxvf zookeeper-3.4.12.tar.gz 3.文件自己选择安装目录,接着进入conf,复制zoo_sample.cfg改名为zoo.cfg # cp  zoo_sample.cfg zoo.cfg 4.编辑zoo

随机推荐