分布式系统一致性初探

分布式系统一致性初探

摘要随着大规模系统及应用的高并发访问、海量数据处理等场景越来越多,如何实现此类系统的高可用、易伸缩、可扩展、安全等目标就显得尤为重要,而分布式系统架构的建设是解决上述问题的不错选择。依据分布式领域的CAP理论可知,当前任意分布式系统都无法同时满足一致性、可用性以及分区容错性这三大基本需求,最多只能满足其中之二。但无论在CAP三者之间如何权衡,都无法彻底地放弃一致性。因为一致性的放弃,表明系统中数据缺乏可信性,则该系统便没有任何价值可言。所以,无论如何,分布式一致性问题是分布式系统最为关键及重要的问题。本文从一致性简述、一致性协议分析及一致性协议算法在高可用分布式系统中的应用等三个方面对分布式系统的一致性进行初步探究。

0 引言

随着互联网技术和应用的高速发展,数据规模呈爆炸式的增长,继而使分布式系统得到越来越广泛的运用。数据分片存储、多副本冗余和多节点并发更新等多种机制在使分布式系统具备高可扩展性、高并发性等优势的同时,也引入了一致性、可用性的问题[1]。而实现分布式系统的动态一致性,需具备两大特性:a.操作一致性,即并发的更新操作在各个局部节点上串行化执行顺序和全局的串行化执行顺序是等价的;b.多副本一致性,即主节点和冗余备份节点之间数据的更新序列是一致的。分布式系统的一致性需要确保串行化执行顺序、节点的最终状态是全局一致的。保证了操作一致性、多副本一致性,就可以实现全局状态和局部状态不断地从一个一致的状态到达另一个一致状态,实现一种动态的一致。可用性指分布式系统能够自动容错,并持续地对外提供服务。

根据CAP理论[2],在分布式环境下,可用性和一致性只能保证一点。然而,一致性和可用性的权衡不必是两者达到彼此的极致。一致性可分为极致一致性、强一致性、最终一致性和弱一致性等多个级别,可用性可分为较高可用性、高可用性和弱可用性等。不同级别的可用性和一致性组合可满足不同的应用需求。很多互联网应用对一致性要求不高,采取最终一致和较高可用的组合,这是一种一致性换可用性的做法。而另一些对一致性要求较高的关键应用,比如银行系统和金融证券业,可以采取强一致性和高可用的组合,在保证多数派副本完全一致的前提下,将可用性尽可能地最大化[3]。

实现分布式系统的强一致性,关键是选取合适的分布式一致性协议(distributed consensus protocol)来保证一致性。由于数据分布在多个节点和网络的不确定性等因素,而各节点上的数据更新是相互隔离且独立进行的,因此,可能会出现的问题有:1)更新顺序不同即上文所述操作一致性问题;2)主备副本数据不同步即上文所述多副本一致性问题,继而需要使用分布式一致性协议来协调多节点并发更新和主备节点操作序列的同步,保证分布式系统的操作一致性和多副本一致性。

综上,分布式一致性协议是实现分布式系统所需的强一致性和高可用性的重要基础。本文梳理并总结了前人在提出一致性理论,设计一致性协议以及探索高可用性分布式系统方面进行的研究工作,进行了初步的分析与探索。

1 一致性简述

1.1 一致性问题概述

1.1.1 问题描述

通常情况下,我们所说的分布式一致性问题通常指的是数据一致性问题。因此本文主要以数据一致性为切入点,概要介绍一致性问题。数据一致性其实是数据库系统中的概念。我们可以简单的把一致性理解为正确性或者完整性,那么数据一致性通常指关联数据之间的逻辑关系是否正确和完整。在数据库系统中通常用事务(访问并可能更新数据库中各种数据项的一个程序执行单元)来保证数据的一致性和完整性。而在分布式系统中,数据一致性往往指的是由于数据的复制,不同数据节点中的数据内容是否完整并且相同。虽然分布式系统有着诸多优点,但是由于采用多机器进行分布式部署的方式提供服务,必然存在着数据的复制。分布式系统的数据复制需求主要来源于以下两个原因:1、可用性。将数据复制到分布式部署的多台机器中,可以消除单点故障,防止系统由于某台(些)机器宕机导致的不可用状态。2、性能。通过负载均衡技术,能够让分布在不同地方的数据副本全都对外提供服务,有效提高系统性能。

在分布式系统引入复制机制后,不同的数据节点之间由于网络延时等原因很容易产生数据不一致的情况。复制机制的目的是为了保证数据的一致性。但是数据复制面临的主要难题也是如何保证多个副本之间的数据一致性。假设有这样的场景,有两个人同时去两个不同的火车站买票(A去A火车站,B去B火车站),为了保证合理的卖票,需要在A火车站和B火车站之间共享关于剩余票数的数据。但是A和B要买的票只剩下一张,并且一张票当然只能卖给一个人。如果为了保证系统性能,那么A和B在买票的时候应该都可以买票成功(因为他们在买票过程中余票数据都显示还有一张余票)。两人在买完票之后,系统在做数据复制时发现一张票被卖出了两次,这时就要让A和B两人其中一人手中得票作废掉。这时就要花费很大的力气来通知后买到这张票的人这个消息。如果为了保证数据一致性,那么就需要在A买票的过程中,B只能等着。等A买票结束,并且把余票结果同步到B火车站的售票窗口。然后B才能知道还有没有余票可以购买。上面的例子可以简单的说明一个系统如果想保证数据一致性很有可能影响其性能。因为并发的写请求需要在前一个写请求结束之后才能进行。

因此,如何能既保证数据一致性,又保证系统的性能,是每一个分布式系统都需要重点考虑和权衡的。一致性模型可以在做这些权衡的时候给我们很多借鉴和思考

1.1.2 模型介绍

一致性模型大概可以分为一下几种,分别是强一致性、弱一致性、最终一致性以及一致性的相关变种。

强一致性是指当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。但是这种实现对性能影响较大。

弱一致性是指系统并不保证进程或者线程的访问都会返回最新的更新过的值。系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。但会尽可能保证在某个时间级别(比如秒级别)之后,可以让数据达到一致性状态。

最终一致性其实是弱一致性的特定形式。系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。

最终一致性模型的相关变种,包括因果一致性、读已所写一致性、会话一致性、单调度一致性、单调写一致性等。1、因果一致性:如果A进程在更新之后向B进程通知更新的完成,那么B的访问操作将会返回更新的值。如果没有因果关系的C进程将会遵循最终一致性的规则;2、读己所写一致性:因果一致性的特定形式。一个进程总可以读到自己更新的数据;3、会话一致性:读己所写一致性的特定形式。进程在访问存储系统同一个会话内,系统保证该进程读己之所写;4、单调读一致性:如果一个进程已经读取到一个特定值,那么该进程不会读取到该值以前的任何值;5、单调写一致性:系统保证对同一个进程的写操作串行化。

1.2 一致性理论概述

1.2.1 CAP理论

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。CAP理论指的是一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。一致性是指所有的节点在同一时刻所看到的数据是一致的,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致;可用性是指无论何时何地读写都是成功的,即服务一直可用,而且是正常响应时间;分区容忍性是指系统即使在部分节点丢失或出错的情况下依然能持续性提供服务,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。CAP理论严格证明了任何一个分布式系统都无法同时满足一致性、可用性、分区容错性这三个基本需求,最多只能满足其中两项。若选择放弃P(分区容错性),即选择加强一致性和可用性,其本质就是传统单机数据库的选择;而若选择放弃A(可用性),则其所导致的网络等问题会使整个系统不可用;又若选择放弃C(一致性,一般指强一致性),则表明该系统中数据不可信且无价值意义。但需要明确的一点是,对于一个分布式系统而言,分区容错性是一个最基本的要求。因为既然是一个分布式系统,那么分布式系统中的组件必然需要被部署到不同的节点,否则也就无所谓分布式系统了,从而必然出现子网络。而对于分布式系统而言,网络问题又是一个必定会出现的异常情况,因而分区容错性也就成为了一个分布式系统必然需要面对和解决的问题。而通常系统架构师往往需要把精力花在如何根据业务特点在一致性和可用性之间寻求平衡。

1.2.2 BASE理论

eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论[4]BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong ConsistencyCAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。基本可用性是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。例如电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

1.2.3 ACID与一致性理论的区别与联系

ACID是传统数据库常用的设计理念,即一个事务执行必须坚持A(原子性)、C(一致性)、I(隔离性)、D(持久性)这四大特性,以保证数据的安全、一致、持久,是追求强一致性的模型。而BASE理论面向的是大型高可用、高可扩展的分布式系统,其通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。ACIDBASE代表了两种截然相反的设计哲学,在分布式系统设计的场景中,不同业务单元和系统组件对数据一致性要求是不同的,因此在具体的分布式系统架构设计过程中,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值