分布式架构概述
随着计算机系统规模越来越大,将所有业务单元部署在一个或者若干个大型主机上的体系结构,已经越来越不满足当今计算机系统,尤其是大型互联网系统的发展,各种灵活多变的系统架构模型层出不穷。同时,随着微型计算机的发展,越来越多廉价的PC机成为了各大企业IT架构的首选,分布式的处理方式越来越受到业界的青睐,计算机系统经历着一场从集中式到分布式架构的转变。
1. 从集中式到分布式
自20世纪60年代大型主机被发明出来以后,凭借其超强的计算和I/O处理能力以及在安全性和稳定性方面的卓越表现,在很长一段时间,大型主机引领了计算机行业以及商业计算领域的发展。最知名的企业当属IBM,其发明的 System/360系列大型主机,是计算机发展史上的一个里程碑,与波音707,福特T型车齐名,并称为20世纪最重要的三大商业成就,并一度成为大型主机的代名词,从那时起,IT界进入了大型主机时代。
随着大型主机的到来,计算机系统架构也进入集中式处理的时代。大型主机由于卓越的性能、良好的稳定性,其在单机处理能力方面的优势非常明显。使得IT系统快速进入了集中式处理阶段。但是20世纪80年代后,计算机向微型化和网络化的发展趋势日益明显,传统的IT架构越来越不适应人们的需求。
首先,大型主机的人才培养成本相当高。通常一台大型主机汇集了大量精密的组件,操作非常复杂,运维人员掌握技术细节的成本是非常高的。
其次,大型主机的成本是非常高的,动辄上百万美元的售价,只有政府、大型企业才有财力采购这些大型主机。
另外,集中式架构具有很明显的单点问题。大型主机虽然在性能和稳定性方面性能卓越,但不代表永远不会出现故障,出现了故障,影响范围是非常大的。随着用户规模的扩大,大型主机的扩容也是很困难的。
随着计算机性能的不断提高和计算机技术的快速普及,大型主机所占市场份额越来越少,小型机普通PC机成为了成为了企业的主流。最为典型的是阿里巴巴去IOE运动。
1.1 集中式的特点
所谓的集中式系统是指由一台或者多台计算机组成计算机中心节点,数据集中存储在这个中心节点上,并且整个系统的所有业务单元都集中部署在这个中心节点上,系统的功能都由其集中处理,数据的存储和控制处理都由主机来完成。
集中式系统最大的特点是部署结构简单
,由于集中式系统底层往往基于性能优越的大型主机,因此无需考虑如何对服务进行多个节点的部署,也不用考虑多个节点的分布式协作问题。
1.2 分布式的特点
分布式系统的定义:
分布式系统是由一个硬件或者软件组成分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统
推荐一本书《分布式系统概念与设计》
同一个分布式系统在空间部署上是可以随意分布的,这些计算机可以放在不同机柜,也可能在不同机房中,甚至分布在不同的城市,一个标准的分布式系统,会有如下几个特征
分布性
分布式系统中的多台计算机在空间上是随意分布的,同时,机器的分布情况也会随时变动。
对等性
分布式系统中的计算机没有主从之分,没有控制整个系统的主机,也没有被控制的从机。组成分布式系统的所有计算机节点都是对等的。副本
是分布式系统中最常见的概念之一。数据副本
可以解决分布式系统中数据丢失问题。
并发性
分布式系统可能会并发的操作一些共享资源,比如数据库或分布式存储等。如何准确并高效的协调分布式并发操作成了分布式系统中最大的挑战之一
缺乏全局时钟
根据之前的描述我们了解到,分布式系统是由一系列在空间上随意分布的多个进程组成的,具有明显的分布性,这些进程之间通过交换消息来进行互相通信,很难界定两个事件谁先谁后,原因就是分布式系统缺乏一个全局的时钟序列控制
故障总是会发生
分布式系统中的计算机,可能发生任何形式的故障
1.3 分布式环境中的各种问题
通信异常
由于网络本身的不可靠性,每次网络通信都伴随着网络不可用的风险。另外,即时分布式系统各节点之前的网络通信能够正常进行,其延时也会大于单机操作。单机内存访问的延时在纳秒数量级(通常是10ns),而正常恶一次网络通信的延时在01 ~1ms左右,时延差别巨大。
网络分区
网络发生异常时,分布式系统中部分节点之前的网络延时不断增大,最终导致了分布式系统的所有节点中,只有部分节点之间能够正常通信,而另一些节点则不能,这个现象称为网络分区,俗称脑裂
。网络分区出现时,分布式系统会出现局部小集群,在极端情况下,这些局部小集群会独立完成原本需要整个分布式系统才能完成的功能,包括对数据的事务处理,这就对分布式一致性提出了非常大的挑战。
三态
分布式系统中的每一次请求,存在特有的三态概念,即成功、失败、超时。一般由以下两种情况导致
- 由于网络原因,该请求没有被发送成功到接收方,发送过程中发生了消息丢失
- 该请求被成功接收后,进行了处理,将响应结果反馈给发送方的过程中,发生了消息丢失现象
节点故障
指分布式系统的服务器节点出现的宕机或者僵死现象,通常根据经验来说,每个节点都有可能出现故障,并且每天都发生。
2. 从ACID到CAP/BASE
2.1 ACID
事务有四个特性:
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
在标准的sql规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同
- 未授权读
- 授权读
- 可重复读
- 串行化
2.2 分布式事务
因为分布式系统的出现,出现了分布式事务问题。分布式事务的具体概念省略。
2.3 CAP和BASE理论
对于本地事务处理或者是集中式的事务处理,我们可以用已经被实践证明成熟的ACID模型来保证数据的严格一致性。但是随着分布式事务的出现,传统的单机事务模型已经无法胜任。在可用性和一致性之间无法存在一个两全其美的方案。
2.3.1 CAP定理
2000年7月,加州大学伯克利分销的Eric Drewer教授提出了著名的CAP猜想。2年后,来自麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了Brewer教授CAP猜想的可行性,从此,CAP理论正式在学术上成了分布式计算领域的公认定理。
CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性和分区容错性这三个基本需求,最多只能同时满足其中两项
2.3.2 BASE理论
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。eBay的架构师Dan Pritchett其来源于大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的,其核心思想是即时无法做到强一致性,但是每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性
基本可用
是指分布式系统在出现不可预知的故障的时候,允许损失部分可用性,但是不等价于系统不可用
1、响应时间上的损失:比正常响应时间增加
2、功能上的损失:比如由于系统限流,被引导到一个降级页面
弱状态
是指允许系统中的数据存在中间状态,并认为该中间状态不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程中存在延时
最终一致性
是指系统中的所有数据副本,在经过一段时间的同步后,最终能达到一个一致的状态。在工程实践中,最终一致性存在以下五类变种。
- 因果一致性
- 读己之所写
- 会话一致性
- 单调读一致性
- 单调写一致性
总的来说,BASE理论面向的是大型高可用可扩展的分布式系统。