目录
1.定义
2.关键技术
3.关键问题
4.基本定理
4.1.CAP定理
4.2.BASE定理
1.定义
分布式的本质是一系列计算机集群通过网络共同完成一串连贯的任务。
2.关键技术
分布式主要关注的几个关键点技术是:
- 性能
- 容错
- 通信
性能:
可扩展性,可扩展性指的是当资源扩展时,整个系统能对应得到计算性能和吞吐量的提升。比如使用了负载均衡,1个结点扩展为了3个结点,那么对应的整个系统的计算能力和吞吐量就应该提升为原来的3倍,当然性能堆叠是会有损失的,比如负载均衡扩展后相应的还需要引入一个负载均衡计算的中间层,负载均衡计算以及这个中间层和业务结点的网络通信中损耗掉一部分性能。
所以整个系统应该是向提升为原来性能的3倍这个理想标准靠近,如果远远低于这个理想标准,那么就要排查一下哪里造成了性能的大量损耗,是否出现了问题。
容错:
分布式集群会将一个不常见的问题变得常见,比如1台电脑1年会有3次卡死,那么1个1000台电脑的集群,1天会卡死3台。因此分布式系统的容错能力是很重要的,容错的核心是保证
-
可用性
可用性是容错必须保证的核心点,当系统出现异常时要尽量保证系统能继续使用。
-
可恢复性
可用性是容错尽量要保证的点,当分布式集群出现了问题,是否还能进行恢复?比如单节点故障,那么这个结点的历史数据是否有保存等这些点都是要考虑的。
保存数据有两种实现方法:
-
非易失性存储
将数据存储在磁盘上,这样即使结点故障,后期修复的时候直接从磁盘上恢复数据即可。使用非易失性的存储是最简单的保存数据的方法。
-
复制
让数据在所有结点上进行复制、共享,这样即使是单节点故障,全局仍然是记录有数据的,后期修复的时候去其他节点同步数据即可。复制会存在一个问题,即不同结点间很容易因为一些问题造成状态的不同步。这个问题可以解决,但是解决的难度很大,成本很高。
-
通信:
目前来说分布式系统中结点的通信都是使用RPC,但是如何实现RPC很多地方是值得考虑的。
通信协议之间各自性能均不相同,应用层是选用速度快但是安全性不高的HTTP、还是选用安全性高但是速度不快的HTTPS;传输层是选用可靠但速度慢的TCP,还是选用速度快但是不可靠的UDP,等等......
3.关键问题
一致性问题:
一致性其实是容错带来的一个问题,为了容错一个数据往往存在多份,放在不同的结点,一个更新操作后面往往伴随着多个同步操作,来达到数据的一致性。这也就意味着分布式系统中有很多时间节点间各自的数据很可能往往处于不同版本,不具有一致性。如何保证数据的一致性也是分布式系统经常考虑的问题。
一致性分为两种:
- 强一致性
- 弱一致性
强一致性:
系统对外提供服务时要时时刻刻对外呈现出一致性,也就是说当系统内部在进行同步操作时系统要拒绝对外提供服务,直到系统内部各结点间的数据达到一致性。
弱一致性:
弱一致性,也叫最终一致性,系统对外提供服务时不要求时时刻刻对外呈现出一致性,反正只要最后提供的结果是准确的就行。
4.基本定理
4.1.CAP定理
CAP,是高可用性、强一致性、分区容错性这三种特性的缩写。。
高可用性:
不管访问的服务是否成功都要给出响应,
强一致性:
系统中数据必须是一致的,不能出现脏数据,比如已经修改了一个值,再去访问系统的时候拿到的是修改以前的值。
分区容错性:
分布式系统一般会划分成多个子网,子网之间可能由于网络故障等原因造成通信中断,因此必须保证系统在任意情况下分区能单独且正常的工作。这就意味着每个分区必须有自己的数据,每份数据都需要在每个分区单独存放。
三者不可兼得,只能同时满足其中两种。
满足高可用性、分区容错性就满足不了强一致性,因为分区容错要求每个分区内部都存一份数据,高可用性要求立即响应,而强一致性在各个分区之间进行数据同步这段时间内会对外拒绝服务。
满足高可用性、强一致性分就满足不了分区容错性,因为高可用性要求立即响应,强一致性要求系统实时数据正确,就不可能在各个分区内部存一份数据,只能是全局唯一一份数据,这样才能保证数据实时的准确。
满足分区容错性、强一致性就满足不了高可用性,因为分区容错要求每个分区内都存有一份数据,强一致性要求系统对外提供服务时必须数据是准确的,也就意味着在进行全局数据交换、进行同步的时间段对外是拒绝服务的。
4.2.BASE定理
BASE是三个单词的缩写:
-
basically available(基本可用)
-
Soft state(软状态)
-
Eventually consistent(最终一致性)
BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。
也就是说分布式系统还是在努力的往三者兼顾上靠拢,具备基本的分区容错性后还是希望一致性和高可用性都具备一些,也就是保证最终一致性的情况下系统基本可用。达到这个目的就需要系统具有多种状态,进行数据同步保证最终一致性的时候对外的可用性不高,不用进行数据同步的时候对外呈现出高可用性。