分布式系统CAP定理

        我们在平时的项目开发过程中经常会听到分布式、集群这两个概念,那么到底什么是分布式,什么是集群呢?

分布式系统定义

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

        通俗的理解,分布式系统就是一个业务拆分成多个子业务,分布在不同的服务器节点,共同构成的系统为分布式系统。这些服务器节点在空间部署上是可以随意分布的,可能在不同的机柜中,不同的机房中,或者不同的城市中。

        类比在家办公,一个小队,大家都在自己的家中办公,组成的这个小队就是一个分布式系统,而服务器的算力就如同一个人的能力一样,都是有限的,由N个服务器组成的集群,算力是无限扩张的。

分布式系统面临的问题

        1.通信异常:网络本身的不可靠性,因此每次网络通信都会伴随着网络不可用的风险(光纤、路由、DNS等硬件设备或系统的不可用),都会导致最终分布式系统无法顺利进行一次网络通信,另外,即使分布式系统各节点之间的网络通信能够正常执行,其延时也会大于单机操作,存在巨大的延时差别,也会影响消息的收发过程,因此消息丢失和消息延迟变的非常普遍。

        2.网络分区:网络之间出现了网络不连通,但各个子网络的内部网络是正常的,从而导致整个系统的网络环境被切分成了若干个孤立的区域,分布式系统就会出现局部小集群,在极端情况下,这些小集群会独立完成原本需要整个分布式系统才能完成的功能,包括数据的事务处理,这就对分布式一致性提出非常大的挑战。

        3.节点故障:节点故障是分布式系统下另一个比较常见的问题,指的是组成分布式系统的服务器节点出现的宕机或"僵死"现象,每个节点都有可能出现故障,并且经常发生。

        4.三态:分布式系统每一次请求与响应存在特有的“三态”概念,即成功、失败和超时

分布式与集群的区别

        集群:多个服务做同一件事情

         分布式:多个服务做不同的事情。

CAP定理

        一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A: Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的2个。

        一致性(C:Consistency):指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。

        可用性(A: Availability):指系统提供的服务一直处于可用状态,对于用户的请求可即时响应。

        分区容错性(P:Partition tolerance):指在分布式系统遇到网络分区的情况下,仍然可以响应用户的请求。网络分区是指因为网络故障导致网络不连通,不同节点分布在不同的子网络中,各个子网络内网络正常。假设有a,b,c三个服务提供订单查询的服务,其中c与a、b网络不通了,a和b还是想通的。也就是说,形成了两个分区{a, b}和{c},在这种情况下,系统仍能响应用户请求。

        可以结合一个例子来理解CAP。如下图,是商品信息管理的执行流程:

整体执行流程如下:
        1、商品服务请求主数据库写入商品信息(添加商品、修改商品、删除商品)
        2、主数据库向商品服务响应写入成功。
        3、商品服务请求从数据库读取商品信息。

C - Consistency: 

上图中,商品信息的读写要满足一致性就是要实现如下目标:
        1、商品服务写入主数据库成功,则向从数据库查询新数据也成功。
        2、商品服务写入主数据库失败,则向从数据库查询新数据也失败。

 如何实现一致性?
        1、写入主数据库后要将数据同步到从数据库。
        2、写入主数据库后,在向从数据库同步期间要将从数据库锁定,待同步完成后再释放锁,以免在新数据写入成功后,向从数据库查询到旧的数据。

分布式系统一致性的特点:
        1、由于存在数据同步的过程,写操作的响应会有一定的延迟。
        2、为了保证数据一致性会对资源暂时锁定,待数据同步完成释放锁定资源。
        3、如果请求数据同步失败的结点则会返回错误信息,一定不会返回旧数据。

A - Availability :

上图中,商品信息读取满足可用性就是要实现如下目标:
        1、从数据库接收到数据查询的请求则立即能够响应数据查询结果。
        2、从数据库不允许出现响应超时或响应错误。

如何实现可用性?
        1、写入主数据库后要将数据同步到从数据库。
        2、由于要保证从数据库的可用性,不可将从数据库中的资源进行锁定。
        3、即时数据还没有同步过来,从数据库也要返回要查询的数据,哪怕是旧数据,如果连旧数据也没有则可以按照约定返回一个默认信息,但不能返回错误或响应超时。

分布式系统可用性的特点:
        1、 所有请求都有响应,且不会出现响应超时或响应错误。

P - Partition tolerance :

上图中,商品信息读写满足分区容忍性就是要实现如下目标:
        1、主数据库向从数据库同步数据失败不影响读写操作。
        2、其一个结点挂掉不影响另一个结点对外提供服务。

如何实现分区容忍性?
        1、尽量使用异步取代同步操作,例如使用异步方式将数据从主数据库同步到从数据,这样结点之间能有效的实现
松耦合。
        2、添加从数据库结点,其中一个从结点挂掉其它从结点提供服务。

分布式分区容忍性的特点:
        1、分区容忍性分是布式系统具备的基本能力。

CAP 选择策略及应用

保 CA 弃 P

        在分布式系统中,现在的网络基础设施无法做到始终保持稳定,网络分区(网络不连通)难以避免。牺牲分区容错性 P,就相当于放弃使用分布式系统

        因此,在分布式系统中,这种策略不需要过多讨论。既然分布式系统不能采用这种策略,那单点系统毫无疑问就需要满足 CA 特性了。比如关系型数据库 DBMS(比如 MySQL、Oracle)部署在单台机器上,因为不存在网络通信问题,所以保证 CA 就可以了。

保 CP 弃 A

      如果一个分布式场景需要很强的数据一致性,或者该场景可以容忍系统长时间无响应的情况下,保 CP 弃 A 这个策略就比较适合。  

        这种策略通常用在涉及金钱交易的分布式场景下,因为它任何时候都不允许出现数据不一致的情况,否则就会给用户造成损失。因此,这种场景下必须保证 CP。保证 CP 的系统有很多,典型的有 Redis、HBase、ZooKeeper 等。

保 AP 弃 C

      如果一个分布式场景需要很高的可用性,或者说在网络状况不太好的情况下,该场景允许数据暂时不一致,那这种情况下就可以牺牲一定的一致性了。  

        网络分区出现后,各个节点之间数据无法马上同步,为了保证高可用,分布式系统需要即刻响应用户的请求。但,此时可能某些节点还没有拿到最新数据,只能将本地旧的数据返回给用户,从而导致数据不一致的情况。

        适合保证 AP 放弃 C 的场景有很多。比如,很多查询网站、电商系统中的商品查询等,用户体验非常重要,所以大多会保证系统的可用性,而牺牲一定的数据一致性。

BASE理论

        BASE是对CAP中一致性和可用性权衡的结果,其核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性

        BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)

基本可用(Basically Available):

        基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。

        电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。

        以下两个就是“基本可用”的典型例子:

        响应时间上的损失:正常情况下,一个在线搜索引擎需要0.5秒内返回给用户相应的查询结果,但由于出现异常(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了1~2秒

        功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利地完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面

软状态( Soft State):

        软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现

最终一致性( Eventual Consistency):

        最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

参考文档:

        什么是分布式系统的BASE理论?_FlyWine的博客-CSDN博客

        分区容错性是什么意思_一篇文章搞清楚什么是分布式系统 CAP 定理_姜白的树洞的博客-CSDN博客

        分布式理论 - 知乎

        分布式第1篇:CAP定理&BASE理论 - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值