架构师训练营 -Week 06 命题作业

发布于: 5 小时前
  • 请简述CAP原理

做一个分布式系统的架构设计,一定会遇到这些场景,如何做到分布式系统高可用性,如何保证各个节点之间的数据一致性,如果各个节点之间是分布在不同的服务器上,节点之间需要网络通信,当网络通信出现问题,系统应该如何保证可以继续正常服务,可以说高可用、数据一致是分布式系统设计的目标,但是分区又是不可避免的事情。

CAP原理指出分布式系统不能同时保持一致性,可用性和分区容错,很多人理解的是不能同时CAP,可以是CA、CP、AP保持两个,但是真的是这样吗?

先来理解一下一致性,在分布式系统中,一致性指的是数据一致性,首先要明白一个事实,做不到在任何一个时间点每个节点的数据是一致的,因为在更新数据的时候严格来说不可能做到同一时间在多个节点的数据是一致的,服务器可能会出现问题,数据网络通信或者存储在磁盘的时候也可能会丢失,也就是说没有数据完全一致性,只能抽象去看数据一致性,假设一些条件成立的情况下,数据达到一致,一致性可以分为强一致性和最终一致性。

强一致性也称为原子一致性、线性一致性,CAP中的C指的正是强一致性,如果某个节点更新了数据,那么其他节点在更新成功后的下一个时间点读取到的是最新的数据,数据达到了一致。

最终一致性,很简单理解,不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化,最终在某个时间点,数据最终达成一致,除了强一致性,其他的一致性都可以看作最终一致性,例如顺序一致性、因果一致性等等。

再来看下可用性,在分布式系统中,可用性非常重要,客户端发出去的请求,系统要能响应,多个节点的情况下,请求被随机分配到正在运行的节点,节点能响应请求,如果某个节点失去信号,请求应该被分配到其他正在正常运行的节点,继续响应请求,保证系统的可用性。

最后是分区容错,分区容错是指区间通信可能失败,通信出现问题无法避免的,设计分布式架构的时候应该考虑在网络通信出现问题的时候如何保证系统的运行,但是网络通信的问题很多,有些问题我们解决不了,但有些场景应该考虑,比如A节点B节点通信失败,那数据一致性如何保证。

CAP原理更多的是分析了分布式系统所具有的特性,及特性之间的关系,强一致性和可用性就有冲突问题,在满足分区容错的情况下,强一致性和可用性无法同时做到,需要针对不同的应用场景选择可用性还是强一致性,所以,我们可以把CAP原理当做分析分布式系统设计的一个依据,分布式系统的特性有很多,设计的时候我们需要考虑的绝不只是CAP这三者。

用户头像

华乐彬

关注

还未添加个人签名 2019.03.13 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 -Week 06 命题作业