查看原文
其他

分布式系统架构常识:CAP理论。

2017-12-20 javastack Java技术栈

什么是CAP理论?

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后麻省理工学院的Seth Gilbert和NancyLynch从理论上证明了CAP,之后CAP理论正式成为分布式计算领域的公认定理。

CAP理论是由下面三个概念组成的,且在分布式系统中三者不能兼得,只能同时满足两种条件。

一致性(C)

All nodes see the same data at the same time

所有数据库集群节点在同一时间点看到的数据完全一致,即所有节点能实时保持数据同步。

可用性(A)

Reads and writes always succeed

读写操作永远是成功的。即服务一直是可用的,即使集群一部分节点故障,集群整体还能正常响应客户端的读写请求。

分区容错性(P)

The system continues to operate despite arbitrary message loss or failure of part of the system

尽管系统中有任意的信息丢失或故障,系统仍在继续运行。以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

CAP权衡使用

1、保留CA,放弃P

如果想避免分区容错性问题的发生,一种做法是将所有的数据(与事务相关的)都放在一台机器上。虽然无法100%保证系统不会出错,但不会碰到由分区带来的负面效果。当然这个选择会严重的影响系统的扩展性。

作为一个分布式系统,放弃P,即相当于放弃了分布式,一旦并发性很高,单机服务根本不能承受压力。

像很多银行服务,确确实实就是舍弃了P,只用单台小型机+ORACLE保证服务可用性。

2、保留CP,放弃A

相对于放弃“分区容错性“来说,其反面就是放弃可用性。一旦遇到分区容错故障,那么受到影响的服务需要等待一定的时间,因此在等待期间系统无法对外提供服务。

作为分布式系统,有分区服务发生问题很有可能,如果因为某些服务不能用,导致整个服务都不能用,这个根本不是好的分布式系统。

3、保留AP,舍弃C

这里所说的放弃一致性,并不是完全放弃数据一致性,而是放弃数据的强一致性。即放弃了同一时刻的数据一致性,而保留数据的最终一致性。

以网络购物为例,对只剩下一件库存的商品,如果同时接受到了两份订单,那么较晚的订单将被告知商品告罄。

通常情况下,很多分布式服务系统都是采用该方案,保证可用性性,分布式服务,因为某些分区服务发生问题,先容忍,最终通过一些折中的方法达到最终数据一致性。

近期精选


史上最全Spring Boot全套视频教程

进阶Java架构师必看的15本书

推荐一个在线创作流程图、思维导图软件—ProcessOn

分布式架构设计免费福利

Dubbo分布式系列高级视频教程。

Hadoop全套视频教程

阿里高级Java面试题(首发,70道,带详细答案)



  Java技术栈  
微信公众号:「Javastack

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。
 ▼长按二维码关注我们↓↓↓


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存