码迷,mamicode.com
首页 > 其他好文 > 详细

分布式经典理论

时间:2021-05-24 03:01:36      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:提升   强一致   而不是   计算机网络   base   less   原理   nbsp   数据分布   

 

CAP

  2000年Eric Brewer在ACM研讨会上提出的猜想:一致性(Consistency)、可用性(Availability)、分区容错(Partition-tolerance),三者无法在分布式系统中被同时满足,并且最多只能满足其中两个。 2003年MIT的Lynch证明了这三者确实是不可兼得的。 这被奉为分布式领域的重要理论。

  C(一致性):所有节点上的数据一直保持同步。

  A(可用性):每个请求都能收到响应,无论响应成功或失败。

  P(分区容错):系统能持续提供服务,即使内部某个节点分区有消息丢失。

  CA是分布式系统固有属性,而P是分区容错,分区是网络相关的属性,常见的几种分区如下:(1)交换机故障,导致网络被分成几个子网,形成脑裂;(2)服务器发生网络迟延或死机,导致某些服务器与集群中的其它服务器失去联系。

 

  2012年Lynch重写了之前的论文,针对业界各种质疑,刷新了CAP理论:

(1)把CAP理论局限在原子读写的场景,不支持数据库事务之类的场景;

(2)把分区容错归结为一个队网络环境的描述,而非之前的一个独立条件。这实际上更加明确了概念。

(3)引入活性Liveness和安全属性Safety,在一个更抽象的概念下研究分布式系统,并认为CAP是活性与安全属性之间权衡的一个特例。其中一致性属于活性,可用性属于安全属性。

(4)把CAP的研究推到更广阔的空间:网络存在同步、部分同步;一致性的结果也从仅存在一个到存在N个(部分一致);引入通信周期Round,并引用了其它论文,给出了为了保证N个一致性结果,至少需要通信的Round数量。

总之,Lynch论文主要几点:

(1)承认分区容错是一个既定的环境约束,而非独立的选择或者条件。

(2)缩小CAP适用范围,消除质疑场景。

 

总结一下CAP理论:首先,CAP并不是一个放之四海而皆准的原理,仅适用于原子读写的NoSQL场景,不适合数据库系统。其次,当今分布式系统早已不是十年前的简单系统,现在分布式系统还有很多特性,比如扩展性、自动化等,而不仅仅局限在CAP。

 

BASE准则:

  2008年eBay在ACM上分布了一篇BASE的文章,并给出了他们在实践中总结的基于BASE的一套新的分布式事务的解决方案,解决CAP理论不适用数据库事务的问题。

  BASE全称Basically Available, Soft-state, Eventually Consistent,即系统的主要可用、软状态、数据的最终一致性。相对于CAP,BASE大大降低了对系统的要求。

  Basically Available:例如数据库采用分区模式,100万用户分布在5个数据库实例上,如果破坏了1个,那么可用性还有80%,整个系统还是主要可用。

  Soft-state:在Client-Server模式的系统中,Server是否有状态(state),这是一个很重要的设计,也在根本上决定一个分布式系统是否具有良好的水平扩展、负载均衡、故障恢复等高级特性。然后,除了stateful和stateless,还存在另一个方式-soft state,它最早来源于计算机网络的协议设计,在分布式系统中函数是:Server承诺维持Client的state,但是仅仅维持一小段时间,过了这个时间段,Server就会将state丢弃。

  Eventually Consistent:数据最终一致性,而不是强一致性。

 

  BASE准则,主要是牺牲数据一致性来满足系统的高可用,系统中一部分数据不可用或不一致,仍需要保持系统整体的主要可用。

 

  数据库领域,BASE主要体现是对业务数据进行拆分,让不同的数据分布在不同的机器上,提升系统的可用性,主要做法:按功能划分数据库,数据库分片。由于拆分后会涉及分布式事务,所以eBay在该BASE论文中提到了如何用最终一致性的思路来实现高性能的分布式事务。

 

分布式经典理论

标签:提升   强一致   而不是   计算机网络   base   less   原理   nbsp   数据分布   

原文地址:https://www.cnblogs.com/ruanchao/p/14747469.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!