当前位置: 首页 > 科技观察

谈谈分布式系统的一致性,你知道多少?

时间:2023-03-22 00:06:37 科技观察

0。写在前面前几天pyq发起了求稿。分布式一致性问题对选题的要求最高。分布式系统的内容非常复杂,我们从几个关键部分切入。慢慢展开。今天重点一起学习分布式系统的一致性,但是内容比较多,需要多写几遍。1、为什么要学习分布式?作为后端从业者,我们在找工作和写简历的时候,除了高并发经验之外,一般都会写自己熟悉|了解|大师|精通分布式系统,所以高并发和分布式大多是成对出现的。我在拉勾上搜索了一个后端职位:分布式系统是个丰富的知识点,还不赶紧来!2.熵增的分布式系统关于分布式系统是什么的文章很多。不难理解。用大白话说就是:厂里工人多,一个人养不活,那就找更多的工人一起干。为了让这么多人为同一个目标快速而出色地工作,你需要一些规则和惯例。不然会乱七八糟的。从实用的角度来看,分布式系统是一种重要的架构模型。对于互联网工程架构的演进,简单提一下为什么会出现分布式系统,什么是分布式系统:业务量的快速增长,普通的单机系统无法满足需求,要么垂直扩展升级机器硬件,要么水平扩展堆叠便宜的服务器,这也是主流能想到的解决方案。目前互联网领域选择了后者——横向扩张。横向扩展机器多机房部署规模,升级服务集群应对业务增长,分布式系统出现。这些分布式系统中的物理节点可能部署在多机房、多网络场景下,并通过网络相互通信。合作。分布式系统的诞生是为了解决庞大的业务量和数据量,但需要理论和实践将大量的节点锤击在一起才能正确有序地实现共同的目标,这也是分布式系统的重点内容。一般来说,我们经常接触到的分布式系统包括两类:分布式存储和分布式计算。分布式系统中这么多机器协调在一起完成任务并不容易,所以我们通常认为分布式系统是一个熵增的过程。熵是描述系统内部混沌程度的物理量。对于一个具有宏观熵的孤立系统,在没有外力干预的情况下,系统内部的混沌程度会不断增加,即熵会增加。为了让系统保持秩序,就需要借助外力进行干预。对于分布式系统,我们必须使用相应的策略和算法来保持整个系统的有序和正确,所以我们认为分布式系统是一个熵增的过程。这不难理解,就像为了保持屋子整洁,就要经常打扫卫生,否则就会变得乱七八糟。如果系统不受控制和干预,系统将自动走向混乱和无序。3、分布式一致性问题的理解分布式一致性到底是什么?分布式一致性可以表现在很多方面,这些都是性格问题。它是基于数据的,所以这些个别的一致性问题最终会映射到一个共同的问题——分布式数据的一致性。分布式系统中有许多独立的节点。一般来说,这些节点可以独立完成存储和计算任务。这两个是最重要的任务类型。本质上,计算和存储的过程还是围绕着数据,所以说到底就是数据的一致性。在集中式结构中,管理节点和任务节点是有区别的,即每个节点的权利和义务不同。管理节点可能负责给下属节点分配任务,收集计算结果等,一般承担协调者的角色,任务节点主要是承担任务,所以很容易出现单点问题管理节点。在去中心化结构中,每个节点的权利和义务是相同的。虽然没有单独的leader指定,但是在实际操作中还是会出现leader的选举和failover动态更新leader的问题。完全去中心化系统不多。与中心化系统相比,去中心化系统更扁平、更稳定。比如官方的Redis集群就是去中心化的实现。任何一个节点失效都不会造成特别大的问题,因为节点是平等的。无论是在中心化还是去中心化的分布式系统中,任何一个节点的计算和存储结果都会影响到其他节点。这些独立的节点通过基础的、特定的网络协议进行协作,形成一个整体。4.严格意义上的数据一致性经过前面的一些铺垫,我们开始研究的重点部分——分布式系统中的数据一致性问题。我们必须有一个共识:严格意义上的分布式数据一致性是不存在的。为什么不存在?在分布式系统中,数据存储是多节点主从备份,一般是读写分离。当客户端通过主库的代理写入数据时,在极短的时间内,主节点无法将数据复制到从节点。此时其他客户端读取的slave数据都是旧数据。聪明的读者都能理解瞬间这个词。当然,你可以认为这是相对论的范畴,从物理角度可能更容易理解。下面以redis主从节点之间的数据复制来看一下同步和异步复制场景下的数据一致性问题:一般来说,为了保证服务的高可用,主从节点的数据复制是异步的,因为同步复制的不能保证延迟。当然也有部分场景是同步复制的,所以不能保证整体的延迟。如果是一主多从,同步复制的延迟就得不到保障。所以我们不讨论严格意义上的数据一致性,而是研究我们认为可以接受的时间长度下的数据一致性问题,即我们自身环境约束下的数据一致性问题。单机系统的一致性和事务是比较容易实现的。在分布式系统中,由于所有的节点交互都要通过网络来实现,网络势必会不稳定,还需要考虑大型系统中单个节点的稳定性。前一段听起来云里雾里。我想表达的是:不要把单机系统中的数据一致性需求过分的引入到分布式系统中,因为两者的约束条件不同,我们要合理分析,这样才能保证分布式的一致性系统尽可能接近单机系统。毕竟单人战和团战是不一样的。典型的《倚天屠龙记》中张无忌要去少林寺救谢逊,但他遇到的三位少林僧人都打坐了几十年,三者合一,登峰造极实在是太难了。这也是一个优秀的分布式系统的巅峰之作……五、CAP理论和PACELC理论我们知道,cap理论描述了一致性、可用性和分区容忍度之间的关系。在分布式系统中,由于节点的物理分布和网络的稳定性,分区容忍度P必须存在,因此分布式系统的建立必须以分布式网络存在分区P为前提。在P的基础上,我们在C和A之间进行选择。当然,这并不意味着我们必须随时在C和A之间进行选择。在网络正常的情况下我们可以同时拥有C和A,每个系统的设计目标也不一样,需要更实际的需求来选择。P在分布式系统中是不可避免的。我们在设计系统之初就必须权衡选择C和A。正常情况下跑出正确的结果是基本要求,异常情况下跑出结果还是正常的。设计重点。在分布式系统中,我们使用PACELC理论比CAP理论更合适,因为PACELC理论是CAP理论的扩展。简单地说,PACELC理论的表达是这样的:如果分区(P)存在,则分布式系统必须在可用性(A)和一致性(C)之间做出选择,否则(E)时系统运行无分区P,系统需要在延迟(L)和一致性(C)之间取得平衡。PACELC理论比CAP理论更适合分布式系统。充分体现了网络分区与正常情况之间的权衡与平衡。特别引入L延迟因子来解释一致性C,也就是我们常说的强一致性和弱一致性。不用说,强一致性对主从数据的一致性要求很高,一般是以牺牲可用性为代价来保证的。弱一致性可以分为最终一致性/会话一致性/单调读一致性/单调写一致性等,从实用的角度,我们可以重点关注弱一致性的最终一致性。6.分布式和BASE理论我们知道,由于网络的稳定性,必须考虑分布式系统中的网络分区问题。在一般的互联网场景中,我们选择最终一致性来保证服务的高可用,即允许一段时间内L时刻的数据不一致,经过数据复制同步后最终达到一致性。再来看看BASE理论,它是我们理解分布式系统一致性的重要理论基础:BASE是BasiclyAvailable、Softstate和Eventuallyconsistent这三个词组的首字母缩写。BA基本可用性是指系统大部分时间应该处于可用状态,允许故障损失部分可用性,但保证核心可用。S软状态是指:数据状态不要求任何时候都一致,允许存在中间状态,这种状态不影响系统的可用性。E最终一致性是指:在软状态的前提下,经过一定时间后,这些数据最终可以达到一致状态。7.CAP&BASE&ACID的关系CAP理论解释了分布式系统中一致性C、可用性A、分区容错性P之间的约束关系。BASE理论和ACID理论可以看作是CAP理论中的三个要素进行权衡之后的一种情况,同样适用于单机系统和分布式系统。三者的关系如图所示: