暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

分布式系统之聊聊CAP理论

码农的修炼之道 2019-11-25
564

   

       在分布式系统中有一个重要的理论,这就是CAP理论。其中C代表单词Consistency,一致性。是指所有节点在同一时刻的数据是相同的,比如更新数据库集群,更新成功后,该集群中的其他数据库也要数据一致。


    A代表单词Availability,可用性。是指系统提供的服务一直是可用状态,对于客户端的请求必须有响应。


   P代表Partition,分区容错性。在分布式系统中,遇到网络问题仍然可以响应用户的请求。


   一致性,可用性,分区容错性构成了分布式系统的CAP理论,在CAP理论中得出结论,C、A、P三者只能满足两个,至于为什么只能满足两个,本文先不介绍了。


     CAP理论的选择策略一般有以下三种,也就是CA、AP、CP三种组合。


1、CP组合

     对于金钱相关的交易来说,数据一致性就是最重要的。比如2015年发送的支付宝光缆被挖断的情况,当时支付宝的策略就是CP,导致很多用户当时使用支付宝都不是很方便。保证CP的系统一旦发送网络分区会导致数据无法同步,降低系统可用性,直到数据完全同步才提供服务。

     保证CP的系统很多,比如Redis系统,zookeeper等。


     在Zookeeper集群中包括多个节点,这些节点通过选举算法选出一个Lead节点,这里采用的是ZAB算法。Lead节点之外的是Follower节点,Lead节点专门负责处理用户的写请求。

  • 当用户向节点发送写请求,如果节点是Lead则之间处理。

  • 如果是Follow节点,则转发请求给Lead节点,Lead先向所有的节点发送Proposal(提案),等超过一半节点同意后就进行提交这次写操作,从而保证了数据的强一致性。如下图所示。

      这种方案保证了分区容错性,牺牲了一定的系统可用性。比如,出现了网络分区(脑裂问题),该方案在小范围内还是进行选举出新Lead提供对外服务。只有分区内都不满足选举,才会导致完全不可用。


2、AP组合

     对于大部分应用场景来说,只需要做到最终一致性即可。也就是可以容忍短时间内数据的不一致。


     这种场景其实也很多,比如很多电商网站或查询系统中,为了用户体验好,会牺牲一定的数据一致性。比如,某电商有三大仓库A,B,C。假设A的网络与B,C发生了故障,导致数据无法互相同步。假如此时出售了一个电风吹,但是A区域的用户可能查询到库存还是之前的结果。只有最终网络恢复了才会进行同步,此时用户刷新一下界面就可以看到现在的库存。但是对于用户来说并不会感知网络故障。


     如果此时采用强一致性,A区服务器阻塞进行数据同步,那么无法响应A区域的响应,用户刷半天刷不出来商品,肯定不想看了。


3、CA组合

   在分布式系统中,系统之间通过网络进行连接,而网络的不通或故障是很常见的,如果不需要P,也就是放弃了分区容错性,也就意味着放弃了分布式系统,这种情况对应于单机下的应用程序,比如MySQL部署在单机上,因为不存在不同机器的数据库集群相互通信问题,因此保证CA很容易。


本文先写到这里吧,后续我们基于zookeeper深入聊聊。

文章转载自码农的修炼之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论