且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

聊一下分布式中的CAP定理

更新时间:2022-08-14 08:17:49

话说分布式中的CAP定理,其实指的是在一个分布式系统中,一定会存在三个必要原则,那就是:

数据一致性:Consistency
服务可用性:Availability
分区容错性:Partition tolerance

但是这三者通常是不能兼得,目前的技术而言也是只去兼顾其中两种而已。


起源


CAP原则(定理)是由Eric Brewer在2000年PODC会议上提出。该猜想在提出两年后被证明成立,成为目前我们熟知的CAP定理。


解释


其实从字面意思就能看得出来,这三个原则是非常贴近我们实际情况的,也是我们在设计分布式时通常要考虑的问题,但是我们在这还是稍微再说一下。


数据一致性:Consistency


数据一致性,就是分布式系统在执行某项原子性操作后仍然处于一致的状态。

在分布式系统中,无论做了哪些操作后,客户端在任何一个分布式节点获取到的值均应相同,这个情况在分布式中被称为数据的一致性原则。

其优点就是不会存在数据不一致的风险,缺点也有,因为每次要将新修改的操作同步至各个节点,所以其效率会降低。但是在安全的角度出发,人们还是会去遵循数据一致性,相关效率的降低反而能够忍受。


服务可用性:Availability


服务可用性是指,每一个请求总是能够在一定的时间内返回结果,也就是说每个请求都要有响应,无论是失败还是成功。


分区容错性:Partition tolerance


分区容错性,指在系统无论发生信息丢失或者失败的情况下,仍然可以正常运作,并且对外提供响应的服务。


应用


目前没有办法全部实现,只能实现其中两点,要不就是实现AP,要不就是实现CP,我们平时使用的技术中:ZooKeeper和Euraka就是不同的方式。


ZooKeeper : CP


ZooKeeper本就是基于主从模型来实现的,在一定时间点内,只有一个主服务对外进行提供接口服务,其他如果出现问题,也会立时产生一个新的来继续服务。


Euraka :AP


Euraka就不同了,他是基于平等模型来实现的,没有主次之分。客户端访问时任意节点,都会给出响应,如果当前节点出现问题,这个请求也会转移给其他节点。

但是这种模式就没办法执行数据一致性了,一般都是通过其他方式去解决数据一致性的问题。