zookeeper和Eureka的区别
RDBMS==>(MySql,Oracle,SqlServer等关系型数据库)遵循的原则是:ACID原则
A:Atomicity 原子性
C:Consistency 一致性
I:Isolation 独立性
D:Durability 持久性
NoSql==> (redis,Mogodb等非关系型数据库)遵循的原则是:CAP原则
C:Consistency 强一致性
A: Availability 可用性
P:Partition Tolerance分区容错性
分布式领域有一个很著名的CAP定理:
C:Consistency 数据一致性
A:Availability 服务可用性
P:Partition Tolerance 分区容错性(服务对网络分区故障的容错性)
任何分布式系统只能保证两个
CAP理论也就是说在分布式存储系统中,最多只能实现以上两点。
而由于当前网络延迟故障会导致丢包等问题,所以我们分区容错性是必须实现的。也就是NoSqL数据库P肯定要有,我们只能在一致性和可用性中进行选择,没有Nosql数据库能同时保证三点。(==>AP 或者 CP)
我觉得A:Availability 也很重要 要我选择 我会选择AP优先于CP 但是也要看具体的需求场景
回到问题
ureka和Zookeeper就是CAP定理中的实现,Eureka(保证AP),Zookeeper(保证CP)。
ureka的各个节点都是对等的,失去其中任何一个 不影响服务的AP
Zookeeper是主从关系master-slave的,当主节点挂掉,需要选出来新的主节点。需要耗费时间,这期间A:Availability是不能保证的(这里有一个重要点 Zookeeper 的选举机制)
总结:
Zookeeper的设计理念就是分布式协调服务,保证数据(配置数据,状态数据)在多个服务系统之间保证一致性,这也不难看出Zookeeper是属于CP特性(Zookeeper的核心算法是Zab,保证分布式系统下,数据如何在多个服务之间保证数据同步)。Eureka是吸取Zookeeper问题的经验,先保证可用性。