01
—
CAP
CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性、分区容错性,最多只能保证两个;
C(consistency)一致性
A(availability)可用性
P(partition tolerance)分区容错性
一致性
在分布式环境中,多个数据副本之间能否保持一致的特性,比如说对一个节点上的数据进行更新后,另外一个节点上的数据是否能够得到更新,如果第二个节点上获取的依旧是老数据,这就出现了数据不一致的问题(那用户不蒙蒙哒了么)
可用性
系统必须一直处于可用的状态,简单点说就是:别管用户什么时候访问你的系统,都是好使的;
分区容错性
因为分布式系统各个节点可能部署在不同的网络分区上,而且各个节点之间还要保持通讯,其中任何网络分区出现故障的时候,都要保证系统对外能提供一致性和可用性的服务,这就是分区容错性,举个例子如下图:

从CAP理论可以看出,一个分布式系统不可能同时满足以上3点,另外,分区容错性对分布式系统来说,这是最基本的要求,原因是:既然是分布式系统,那么系统的中的组件必然会部署到不同的网络节点,那么网络发生异常这是很正常的(购物网站系统中某一个服务或者组件的调用发生异常了,整个网站就无法访问了,这样的话太扯了不是吗
),因此架构师的经历往往集中在,如何根据业务特点做到一致性和可用性之间的平衡,也就有了后来的BASE理论...
02
—
BASE
BASE理论是对于分布式系统中一致性和可用性权衡得到的结果,其来源于大规模互联网系统分布式实践的经验,有eBay架构师提出;
BA(basic available)基本可用
S(soft status)软转态
E(eventually consistency)最终一致性
BASE理论的核心点在于,即使无法做到强一致性,但每个应用都应该结合自身的业务特点,采取一定的措施做到最终一致性;
基本可用
指的是分布式系统出现一些故障的时候,可以损失部分功能(上面那个图,用户无法下单,但可以浏览)
软状态
指的是系统中的数据存在中间状态,并认为该状态不会影响系统整体的可用性,即:允许系统在不同节点上的数据同步存在延迟;
最终一致性
最终一致性强调的是,在经过一段时间后,系统在不同节点上的数据会达到一致;(想象一下mysql的主从同步,就是最终一致性了吧)
总的来说BASE理论面向的是大型高可用可扩展的分布式系统,它强调的是通过牺牲强一直性来保证系统的高可用,并且允许数据在一段时间(根据实际情况而定,有可能毫秒延迟,也有可能分钟级别等等)内是不一致的,但最终能达到一致的状态;
03
—
思考
针对上面聊的我们再简单讨论一下(只针对这个例子的结构),笔者画了一个简单的系统图如下:

高可用
用户那层通过负载均衡等一些策略就可以保证,请求节点1发现挂了,那就请求节点2,而数据库层可以通过集群方式控制;
分区容错性
业务系统调用户系统,由于网络不通导致失败,可以通过熔断机制等等来控制(直接给用户返回一个失败的页面)
一致性
网3里的mysql主从之间同步,是弱一致性,业务不用从库了,只用一个主库,那这没问题了,数据也能达到强一致性(因为就主库自己么),但是此时系统的高可用性是不是也下来了你想想看;




