原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。
一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
换一种方式理解就是:事务按照预期生效,数据的状态是预期的状态。
隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾
c:在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
a:保证每个请求不管成功或者失败都有响应。
p:系统中任意信息的丢失或失败不会影响系统的继续运作。
在分布式架构中必须有p
当向注册中心查询服务列表时,我们可以容忍注册中心返回的数据是几分钟以前的注册信息,但是不能接受直接down不可用,也就是说服务注册功能对一致性的要求大于可用性。但是zk可能会出现这样一种情况,当master节点因为网络故障失去联系时,别的节点会重新进行选举一个新的leader,可能会出现脑裂现象,我们采用的方法是一般集群搭建的个数为单数,或者延长重新连接的超时等待时间,但是在选举的过程中,时间一般30-120s,整个期间,zk集群都是不可用的,这会导致在选举的期间,整个zk集群瘫痪。
Eureka在设计时优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉几乎不会影响正常节点的工作,剩余的节点依旧可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或者如果发现连接失败,则会自动切换至其他节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的。除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:
1.Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
2.Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
3.当网络稳定时,当前实例新的注册信息会被同步到其它节点中
因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。
区别:zk是订阅推送 zk down短时间内也可以正常服务
? Eureka是主动拉取
? Eureka没有向dubbo一样使用数据一致性算法。
原文:https://www.cnblogs.com/zhangmeng0726/p/14623336.html