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问题的经验,先保证可用性。

原文地址:https://www.cnblogs.com/Jordandan/p/12198004.html