话说分布式中的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就不同了,他是基于平等模型来实现的,没有主次之分。客户端访问时任意节点,都会给出响应,如果当前节点出现问题,这个请求也会转移给其他节点。
但是这种模式就没办法执行数据一致性了,一般都是通过其他方式去解决数据一致性的问题。