分布式架构设计原则:分布式架构的基本理论CAP、BASE以及应用

一、从集中式到分布式

1、集中式

集中式是指有一台或者多台计算机组成的中心节点,数据集中存储于这个中心节点中,并且整个系统的所有业务单元都集中部署在这个中心节点上,系统的所有功能均由集中处理。

2、分布式

分布式系统是一个硬件或者软件分布在不同的网络计算机上,彼此之间仅仅通过消费传递进行通信和协调的系统。


分布式系统特征:

  • 1、分布性
  • 2、对等性
  • 3、并发性
  • 4、缺乏全球时钟(由于分布式系统由一些列的空间上任意分布的多个进程组成,具有分布性,很难定义两个事件究竟是谁先谁后)
  • 5、故障总是会发生

二、CAP理论和BASE理论

  • 分布式事物:指事物参与者、支持事物的服务器、资源服务器以及事物管理器分别于分布式系统的不同节点之上。通常一个分布式事物中会涉及对多个数据源或者业务系统的操作。
  • 本地事物可以采用ACID模型保证数据的严格一致性。但在分布式系统中,实现事物的严格一致性会和服务的可用性产生冲突,这是有分布式系统的特征决定的。因此,在可用性和一致性之间永远无法存在一个两全其美的方案,于是如何构建一个兼顾可用性和一致性的分布式系统成为一个难题,因此出现了诸如CAP和BASE这样的分布式经典理论。

1、CAP理论

  • CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer's theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。对于设计分布式系统的架构师来说,CAP 是必须掌握的理论。

在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。

(1)一致性

一致性指数据在多个副本之间是否能够保持一致性的特性。在一致性的需求下,当一个系统在数据一致的状态下执行了更新操作后,应该保证系统的数据任然处于一致的状态。布鲁尔提到对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。

  • 在分布式系统中如果能够针对一个数据项的更新操作执行成功后,所有用户都可以读取到其最新的值,那么这样的系统就被认为具有强一致性。

(2)可用性

可用性指系统提供的服务必须一致处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内(指用户的一个操作,系统必须能够在指定的时间内返回对应的处理结果,如果超过了这个时间,系统就认为不可用)****返回结果(返回结果是可用性的另一个重要指标,要求系统在完成对用户请求处理后,返回一个正常的响应结果,失败或者成功,而不是一个困惑的结果)

(3)分区容错性

  • 网络分区指在分布式系统中,不同节点分布在不同的子网络(机房或者异地网络等)中,由于一些特殊的原因导致这些网络之间出现网络不连通的状态,但是各个子网络的内部网络是正常的,从而导致整个系统的网络呼喊经被切分为若干个孤立的区域。

分区容错性约束了一个分布式系统需要具有如下特征:分布式系统在遇到任何网络分区故障的时候,仍热能够保证对外提供满足一致性或可用性的服务,除非整合网络环境发生了故障。

(4)总结

  • 在分布式环境中,我们会发现必须选择 P(分区容忍)要素,因为网络本身无法做到 100% 可靠,有可能出故障,所以分区是一个必然的现象。也就是说分区容错性是分布式系统的一个最基本要求。
  • 在CAP理论中,不能同时满足一致性、分区容忍性、可用性,而分区容忍性优势分布式系统的基本要求,因此在架构设计的时候只能在CA或者CP中取舍,也就是只能在一致性或者可用性之间取舍。

(5)CAP理论中几个重要的细节

  • CAP 关注的粒度是数据,而不是整个系统。C 与 A 之间的取舍可以在同一系统内以非常细小的粒度反复发生,而每一次的决策可能因为具体的操作,乃至因为牵涉到特定的数据或用户而有所不同。但在实际设计过程中,每个系统不可能只处理一种数据,而是包含多种类型的数据,有的数据必须选择 CP,有的数据必须选择 AP。而如果我们做设计时,从整个系统的角度去选择 CP 还是 AP,就会发现顾此失彼,无论怎么做都是有问题的。(以一个最简单的用户管理系统为例,用户管理系统包含用户账号数据(用户 ID、密码)、用户信息数据(昵称、兴趣、爱好、性别、自我介绍等)。通常情况下,用户账号数据会选择 CP,而用户信息数据会选择 AP,如果限定整个系统为 CP,则不符合用户信息数据的应用场景;如果限定整个系统为 AP,则又不符合用户账号数据的应用场景。)
  • CAP 是忽略网络延迟的。意味着,CAP 理论中的 C 在实践中是不可能完美实现的,在数据复制的过程中,节点 A 和节点 B 的数据并不一致。
  • 正常运行情况下,不存在 CP 和 AP 的选择,可以同时满足 CA。CAP 理论告诉我们分布式系统只能选择 CP 或者 AP,但其实这里的前提是系统发生了“分区”现象。如果系统没有发生分区现象,也就是说 P 不存在的时候(节点间的网络连接一切正常),我们没有必要放弃 C 或者 A,应该 C 和 A 都可以保证,这就要求架构设计的时候既要考虑分区发生时选择 CP 还是 AP,也要考虑分区没有发生时如何保证 CA。(同样以用户管理系统为例,即使是实现 CA,不同的数据实现方式也可能不一样:用户账号数据可以采用“消息队列”的方式来实现 CA,因为消息队列可以比较好地控制实时性,但实现起来就复杂一些;而用户信息数据可以采用“数据库同步”的方式来实现 CA,因为数据库的方式虽然在某些场景下可能延迟较高,但使用起来简单。)
  • 放弃并不等于什么都不做,需要为分区恢复后做准备。

2、BASE理论

  • BASE 是基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)三个短语的简写。BASE理论是对CAP中一致性和可用性权衡的结果,是基于CAP定力逐步演化而来的,是源于大规模互联网系统分布式实践的总结。其核心思想:无法做到强一致性,但是每一个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

(1)基本可用

基本可用指分布式系统在出现不可预知的故障时候,允许损失部分可用性,保证核心服务可用。响应时间上的损失(正常0.5ms之内的故障时候响应延时为1-2秒了)和功能上的损失(秒杀时候的降级数据)

(2)弱状态

也称软状态,指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程中存在延时。

(3)最终一致性

最终一致性强调的是系统中所有的数据副本,在进过一段时间的同步后,最终能够达到一个一致的状态。最终一致性需要保证数据最终能够一致而不需要保证数据实时的一致性。

  • 在没有发生故障的前提下,数据的一致性状态的时间延时,取决于网络延迟,系统负载,数据恢复策略等等因素。

(4)总结

  • BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。其基本思路就是:通过业务,牺牲强一致性而获得可用性,并允许数据在一段时间内是不一致的,但是最终达到一致性状态。


作者:小manong
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

posted @ 2020-07-24 01:27  傲骄鹿先生  阅读(159)  评论(0编辑  收藏  举报