第六周作业
简述 CAP 原理
C,代表Consistency,一致性,是指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。
A ,代表 Availability,可用性,是指系统提供的服务一直处于可用状态,对于用户的请求可即时响应。
P,代表 Partition Tolerance,分区容错性,是指在分布式系统遇到网络分区的情况下,仍然可以响应用户的请求。
这是分布式系统的最主要的三个特征。所谓的CAP理论,就是在分布式的环境下,这三个特征是不能被同时满足的,只能满足其中的两项。正如本文的配图一样,接下来,看一个例子来进一步解释下,怎么理解CAP,以及CAP 为什么不能同时满足。
网络中有两台服务器 Server1 和 Server2,分别部署了数据库 DB1 和 DB2,这两台机器组成一个服务集群,DB1 和 DB2 两个数据库中的数据要保持一致,共同为用户提供服务。用户 User1 可以向 Server1 发起查询数据的请求,用户 User2 可以向服务器 Server2 发起查询数据的请求,它们共同组成了一个分布式系统。
对这个系统来说,分别满足 C、A 和 P 指的是:
在满足一致性 C 的情况下,Server1 和 Server2 中的数据库始终保持一致,即 DB1 和 DB2 内容要始终保持相同;
在满足可用性 A 的情况下,用户无论访问 Server1 还是 Server2,都会得到即时响应;
在满足分区容错性 P 的情况下,Server1 和 Server2 之间即使出现网络故障也不会影响 Server1 和 Server2 分别处理用户的请求。
当用户发起请求时,收到请求的服务器会及时响应,并将用户更新的数据同步到另一台服务器,保证数据一致性。
在分布式系统中,网络分区不可避免,因此分区容错性 P 必须满足。那满足分区容错性 P 的情况下,一致性 C 和可用性 A 是否可以同时满足呢?
假设,Server1 和 Server2 之间网络出现故障,User1 向 Server1 发送请求,将数据库 DB1 中的数据 a 由 1 修改为 2,而 Server2 由于与 Server1 无法连接导致数据无法同步,所以 DB2 中 a 依旧是 1。这时,User2 向 Server2 发送读取数据 a 的请求时,Server2 无法给用户返回最新数据,那么该如何处理呢?
第一种处理方式是,保证一致性 C,牺牲可用性 A:Server2 选择让 User2 的请求阻塞,一直等到网络恢复正常,Server1 被修改的数据同步更新到 Server2 之后,即 DB2 中数据 a 修改成最新值 2 后,再给用户 User2 响应。
第二种处理方式是,保证可用性 A,牺牲一致性 C:Server2 选择将旧的数据 a=1 返回给用户,等到网络恢复,再进行数据同步。
总结:除了以上这两种方案,没有其他方案可以选择。可以看出:在满足分区容错性 P 的前提下,一致性 C 和可用性 A 只能选择一个,无法同时满足。
评论 (1 条评论)