我们根据Eureka的架构图,讲了一下Eureka注册中心的一个原理,我们再来看一下,分析两大主流框架,
Eureka和Zookeeper的区别,我们主要讲解一下,Eureka与Zookeeper的一个区别,我们是基于什么方式来讲解
他们之间的区别呢,是基于分布式的一个CAP的定理,因为现在注册中心两大主流框架,一个是Eureka,一个是Zookeeper了,
Zookeeper我们一般在什么时候会用它呢,就是用Dubbo作服务注册和发现的时候,那我们Dubbo是要依赖于Zookeeper去建立
服务的注册,我们先来搞定第一个问题,什么是CAP定理,这个CAP定理在我们分布式开发当中,是比较重要的,所以这块大家好好
研究研究,CAP原则就称为CAP定理,指的是在一个分布式系统当中,作为数据一致性,还有服务可用性,还有分区容错性,三者不可
兼得,也就是我们分布式系统当中,一个是要保证数据一致性,一个是要考虑到系统的可用性,还有存储的分区容错性,那么在
这三个选项当中,在CAP定理当中,这三个选项是不可能同时都具备的,在某种情况下,只能三选二,只可能有两项是可以兼得的,
你必须要抛掉一项,这个CAP定理呢,是在2000年PODC会议上提出的,该猜想是在提出两年后被证明是成立的,所以就成为我们
熟悉的CAP定理,那我们CAP分别指的一致性,数据一致性,服务可用性,分区容错性,到底指的是什么,我这里给大家做了一个表格,
在这里给大家看一下,第一个C是数据一致性,什么叫数据一致性呢,也叫做数据原子性,指的是什么呢,系统在执行某项操作后,
仍然处于一致的状态,在分布式系统中,更新操作执行成功后,所有的用户都应该读到最新的值,这样的系统被认为具有强一致性的,
等同于所有的节点访问同一份最新的数据副本,其实作为一个分布式系统,如果我们想某个服务更新了,我们就应该让其他的服务,
都会再次读取这条数据,就应该拿到最新的,如果能够实现这一点,说明你当前的系统是实现了强一致性的,也就是具备了
数据一致性的特点,这个还是很好理解的,然后我们再来看A,服务可用性,服务可用性指的是什么呢,就是每一个操作,
总是能够在一定时间内返回结果,这里需要注意的是,一定时间内,返回结果,一定时间内指的是,在可以容忍的范围内返回
结果,结果可以是成功或者失败,就是说我们当前的这个系统,不管你请求哪个服务,最终在一定范围内,一定时间内,
是可容忍的范围内,返回一个结果,只要你有请求,必定会有响应,那么这个响应可以不成功,可以是失败,如果你的系统具备了
这样一个特点,就不会出现用户点完某个按钮以后,我们的系统没有任何响应,出现这个现象的,出现这个现象说明你的系统是
没有高可用的,所以A服务可用性指的是系统,只要有请求了,必定会返回一个结果,必然会有响应,我们再来看分区容错性,
分区容错性指的是什么意思呢,在网络分区的情况下,被分割的节点仍然可以正常的对外提供服务,分布式集群,数据被分布
存储到不同的服务器上,无论什么情况下都会正常的访问,这个分区容错性指的是我们的系统,在做分布式集群的时候,无论
是什么情况下,服务都能正常访问,并不会因为你跨网络了,而导致这个数据不能访问了,所以这是指的分区容错性,那么这三者
如果我们在系统中都能实现,那就是非常完美的一个系统了,但是很遗憾的是,在CAP原则当中,他认为这三个表现,
这三个特点,在系统当中是不可能永久出现的,后来两年后被证明确实是这样的,这三个特征我们系统都具备,我们只能三选二,
只要有两个就可以自动放弃掉
任何分布式系统只能同时满足两点,没法兼容三者,我们来看,如果我们的系统兼容CA,你就得放弃P,CA是什么,是服务一致性
和服务高可用,那你就得放弃P,P指的是容错分区,如果我们系统保留CA,放弃P,会怎样呢,如果想避免分区容错性的发生,一种
做法是将所有的数据,与事务相关的都放在一台机器上,虽然不能百分百保证系统不会出错,但不会碰到由分区带来的负面效果,
当然这个选择会严重影响系统的扩展性,这是什么意思呢,就是我们以后在做数据存储的时候呢,数据存储并不是采取分区存放了,
像分布式了,数据库不做集群了,这样我们把所有的库都放到一个库上,到这个时候你会发现,当然你这么做的好处就是,你这个系统
并不会带来由分区带来的负面效果,因为我们没有做分区,但是他有一个问题,严重影响系统的,你的系统越来越多,越来越复杂,
如果还是以这种来访问的话,严重影响你系统扩展的一个点,所以我们如果只保留CA,放弃P,如果保留CP,放弃A呢,也就是我保留数据
一致性,分区容错,而放弃可用性,出现一个什么问题呢,相对于放弃分区容错性来说,其反面就是放弃可用性,一旦遇到分区容错性,
容错故障,那么受到影响的服务会等待一段时间,因此在等待时间内,系统无法对外提供服务,分区容错,你可以理解为一个相对立的,
一旦你做分区容错了,那么一旦分区容错出现问题了,一旦遇到分区容错故障,你系统肯定无法想象,等于没有了可用性,所以如果你要
选择CP组合,肯定是需要放弃,就不具备可用性了,AP是指什么,还是可用性和分区容错性,放弃数据一致性,如果是AP组合放弃C会怎样呢,
咱们来看一下,这里所说的放弃一致性,并不是放弃数据的一致性,而是放弃数据的强一致性,不是让所有的数据真的不具备一致性了,
只是强一致性不具备了,而保留了数据的最终的一致性,以网络购物为例,对只剩下一件库存的商品,如果同时接收了两个订单,那么较晚的
商品会被告知已经没有,什么意思呢,如果你放弃了数据一致性,以网络购物为例,我只剩一件商品了,那么两个人同时去购买这一件商品,
这个时候你会接收到两个订单,那么这个时候你会在较晚的一段时间内,才同时我们的用户我们的商品已经卖没了,然后谁先来的谁先为主,
因为我先做不具备数据一致性了,我并不能知道商品到底,所以你要用AP组合,就得放弃C,这个就是CAP定理的一个基本原则,那么这个ACP
定理啊,一定要好好了解,也算是给大家做一个介绍吧,其实也并不是很复杂,也是理论上的一些知识,只要把笔记上的知识吃透了,那就可以了,
其实CAP在我们分布式开发当中是非常有指导性作用的,特别是做数据存储的,基本上CAP定理还是比较强的,所以建议这一部分花点时间,
把这个CAP定理好好研究,然后我们现在了解CAP定理了,我们基于CAP的定理来看,我们两大主流的注册中心,一个是Eureka,一个
是Zookeeper,有什么样的一个区别