分布式系统的演进和问题

从集中式系统到分布式系统演进
1.从集中式部署到分布式尝试
在计算机被设计之初,单机的计算性能相当之高,因此在早期的计算机系统设计中,应用程序大都部署在同一台机器上就能完成系统的需要。但是随着计算机技术的进一步普及和发展,硬件性能不断更新和提升以及应用场景的改变,原有的集中式部署越来越不能满足需求。集中式系统致命的问题在于单点故障,往往一台机器故障之后整个系统对外均不可用,因此在可靠性上集中式部署存在明显问题,其次当业务请求数量规模无法被忽视时,系统的并发量和吞吐量也成为了集中式系统的瓶颈,分布式系统应运而生。
 
2.分布式系统的特点
简单的来说就是:一个硬件或者软件组件分布在不同网络上的计算机,彼此之间仅仅通过消息传递进行通信和协调的系统称之为分布式系统,分布式系统有以下几大特点,分布性,对等性,并发性,缺乏全局时钟,故障总是会发生。下面分别进行介绍
分布性:分布式系统中的多台机器都会在空间上面随意分布,同时机器的分布情况也可能会随时变动。
 
对等性:分布式系统之中不存在主从的概念,并不存在控制整个系统的主机,也没有被控制的从属机器。各个节点之间功能平等,都可以响应外界的请求,各个节点之间通过数据副本达成数据一致性,在某一个节点挂掉后,其他节点有能力处理外界请求。
 
并发性:各个节点可能会并发的操作共享的资源,如何准确的进行协调也是分布式系统的一大挑战之一。
 
缺乏全局时钟:因为分布式系统是空间上面独立部署的,因此在系统中很难确定两个事件之间的先后顺序,因为分布式节点之间只进行消息通信,缺乏一个全局的时钟。
 
故障总是会发生:组成分布式系统的计算机都有可能在任何时间发生任何形式的故障,实践证明在系统设计之初考虑到的可能会发生的故障,在系统运行时候一定会发生,并且不仅限于此,还会发生其它很多意想不到的故障,因此在分布式系统设计之初,一定要考虑到这些异常场景。
 
3.事务一致性概念
ACID:事务是由一系列对系统中数据进行访问与更新组成的一个程序执行单元,狭义上面的事务特指数据库事务。事务具有隔离性,也就是说在并发访问数据库时,事务可以提供一个隔离方法,防止各个事务之间数据干扰。此外事务也具有回滚性质,在事务处理异常时提供回滚到事务处理之初的状态方法。一般来说事物具有如下四个特性:原子性,一致性,隔离性,持久性
原子性:事务必须时一个原子的操作序列,也就是一个事务中包含的各项操作只允许出现以下两种状态,要么全部成功,要么全部失败。一旦一个事务中有操作失败出现,那么那些操作成功的单元也需要进行回滚。
一致性:事物的执行不能破化数据库的一致性,也就是说事务执行前后只允许从一种一致性状态转换为另一种一致性状态,如果说数据库运行中发生故障,导致有些事务尚未完成被迫中断,有些事物已经对于数据库做了修改这个时候数据库数据就不是一致性状态了。
隔离性:在并发环境中,并发的事务之间是相互隔离的,一个事务的执行不能被其它事务的执行所干扰,也就是不同的事物并发操作相同的数据时,每个事务都有各自完成的数据空间。
持久性:持久性也称为永久性,也就是说一旦一个事务成功执行,他对于数据库的状态变更是永久的,即使是发生机器崩溃,只要数据库能够重新启动,那么也一定能够将其恢复到事务成功处理结束的状态。
 
4.分布式事务的概念
在单机部署中很容易实现一套基于ACID的事务处理系统,但是在分布式数据库中,数据分散在各个不同的机器上面,对于分布式事务的处理是一个极大的挑战。举个如下例子:
一个跨银行转账操作涉及调用两个异地的银行服务,其中一个是本地银行取款,另一个是目标银行存款。这两个服务本身无状态并且相互独立,共同构成了一个分布式事务,如果本地银行取款成功,但是目标银行存款失败时,一定要有能力回滚到取款前的状态,否则客户的银行账户资金就不翼而飞了。为了解决分布式事务问题需要引入以下的两个弱化的事务理论,分别是CAP和BASE理论,分别叙述:
 
4.1CAP理论
CAP理论由加州大学伯克利分校Eric Brewer教授首次提出,由麻省理工学院学术工作者进行理论验证,从此之后CAP理论成为了分布式计算领域的公认定理,并且深深的影响了分布式计算的发展。
CAP理论:一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A:Availability), 分区容错性(P:Pation tolerance),这三个基本的需求最多只能同时满足其中的两项。
一致性:分布式系统中一致性是指数据在多个数据副本之中能否保持数据一致的特性。在一致性要求下,当系统在数据一致性状态下执行了数据更新之后,应该保正系统的数据仍然处于一致性状态。也就是说如果能做到一个数据项的更新成功后,所有的用户都可以读取到最新更新的值,这样的系统就被认为具有强一致性。
可用性:可用性指的是系统提供的服务必须一致处于可用的状态,对于用户的每一个操作都能够在有效的时间之内返回处理结果,如果规定时间无法出现结果用户则会对系统失望,如果出现了用户无法理解的结果那么就会造成使用者的困惑,这样的系统严格来说就不是可用的。
 
分区容错性:分布式系统在遇到任何网路分区故障之后(只有部分子网内部之间网络互通),仍然需要能够保正对外界提供满足一致性和可用性要求的服务,除非整个分布式网络环境都发生了故障。
从分布式系统的特点来看,因为构成分布式系统的计算机都是独立分布的因此出现网络故障和机器故障的现象一定会存在的,那么分区容错性就是一个必须满足的基本要求,从CAP的理论来看,无法同时满足可用性,一致性,分区容错性,因此就需要系统设计师在分布式系统设计时就在一致性和可用性上面作出权衡。
 
4.2 BASE理论
BASE理论是基本可用(Bacically Avaliably) 弱状态(Soft State),最终一致性(Eventually Consistent)的简称,是由eBay的架构师所提出来的理论。BASE理论是对CAP中一致性和可用性权衡之后的结果,是基于大规模分布式互联网系统实践的总结,是基于CAP理论逐步演化而来的。核心思想就是即使无法做到强一致性,但是每个应用都可以根据自身业务特点,采用适当的方式,来使系统达到最终一致性。
基本可用:基本可用是指,系统出现不可预知的故障时,允许损失部分的可用性,但是不等价于系统不可用,以下是两个基本可用的例子:响应时间的损失,功能上面的损失(功能降级)
 
弱状态:弱状态也成为软状态,和硬状态相比实值允许数据存在中间状态,并且认为该中间状态并不影响系统的可用性,也就是说允许系统在不同节点的数据副本之间进行数据同步的过程存在延迟。
 
最终一致性:强调的是系统中的所有数据副本,在经过一段时间的数据同步之后最终能够达到一个一致状态。因此最终一致性要求数据副本在经过一段时间的延迟之后达到数据的一致性,而不再要求系统达到实时一致性,也就是不需要达到强一致性。在实际的应用中对于最终一致性的变种有以下五种
 
4.2.1 因果一致性:如果进行A更新了数据并且通知进程B那么进程B之后获取数据都应该能访问到A更新的结果。如果B要后于进程A更新数据,那么必须基于A更新的结果之后更新。同时与进程A无因果关系的进程C不需要受到这样的限制。
 
读己之所写:也就是进程A读取自己的数据是一定能够读取到最新变更的数据,不可能读取到旧值,这是单个进程的数据读取逻辑,也是特殊的因果一致性。
 
会话一致性:也就是在同一个会话中客户端始终保证读取到数据项的最新值,而不会读到旧值。
 
单调读一致性:系统中一个进程从系统中读出某一个数据项的最新值,那么系统对于该进程后续的数据访问都不能返回更旧的数据值。
 
单调写一致性:一个系统需要保证来自同一个进程的写操作按顺序被执行,不允许乱序存在。
 
总的来说,BASE理论是大型高可用可扩展的分布式系统,和传统的ACID相比牺牲了一部分系统的可用性,允许系统部分可用。牺牲了系统的强一致性,只要求数据副本保证最终一致性。但是实际的开发中,各个业务单元对于数据一致性的要求并不相同,因此在实际设计过程中需要将ACID理论和BASE理论结合使用。
posted @ 2019-07-07 23:58  荼蘼花开  阅读(305)  评论(0编辑  收藏  举报