参考文献:刘杰 分布式系统原理介绍
一概念
1、模型
(1)节点
节点指一个可以独立按照分布式协议完成一组逻辑的程序个体。工程中,可能是一个操作系统上的进程。节点是完整、不可分的。
(2)通信
节点间完全独立,相互隔离,只能通过不可靠网络进行通信,即无法确认消息被完整正确接收。
(3)存储
负责将数据存储到该节点本地存储设备的节点,称为有状态的节点,反之,无状态的节点。该数据可以是本地节点产生的,也可以是通过网络接收到的。
(4)异常
分布式系统核心问题之一就是处理各种异常情况(failure)
a) 机器宕机
大型集群每日宕机概率千分之一,恢复时间24小时,完全随机。宕机时,节点称为“不可用(unavailable)状态”,重启后,节点失去所有内存信息,通过读取本地或其他节点数据恢复内存信息,进入“可用(available)状态”。该过程称为“宕机恢复”。
b) 网络异常
- 消息丢失
“网络分化”,部分节点网络通信正常,部分节点始终无法通信。该问题可能在分布式系统部署在多个机房之间时发生。
- 消息乱序
节点发送的网络消息不是按照发送时的顺序依次到达目的节点。
- 数据错误
可使用校验码机制简单检查数据错误,从而丢弃错误数据。
- 不可靠的TCP
分布式系统的协议设计中不能认为基于TCP的通信就是可靠的,一方面,TCP仅保证TCP协议栈间的可靠传输,但无法保证两上层应用之间的可靠传输,如协议栈缓冲区正确接收消息并确认后,接收方宕机了,其目标进程未处理该数据,或发送过程中TCP调用过程成功了之后发送方宕机了,消息丢失,或接收方处理了该数据后,宕机了,TCP确认消息丢失。另一方面,TCP协议只能保证同一个TCP链接内消息不乱序,不能保证多个链接间不乱序,但节点之间发送数据,可能使用多个链接,并发或串行,故不能确定顺序。
- 分布式系统三态
多一节点向另一节点发起RPC(remote procedure call)调用,即A向B发消息,B完成操作后,将结果返回A。RPC执行结果有三种状态:“成功”、“失败”、“超时(未知)”。
- 存储数据丢失
数据丢失指节点存储的数据不可被读取或读取出来的数据错误,如硬盘损坏,对有状态节点来说,数据丢失意味着状态丢失,通常只能从其他节点读取、恢复存储的状态。
- 无法归类的异常
- 异常处理的原则
在设计、推导、验证分布式系统的协议、流程时,最重要的工作之一就是思考在执行流程的每个步骤时一旦发生各种异常的情况下系统的处理方法及造成的影响
2、副本
(1)概念
指在分布式系统中为数据或服务提供的冗余。有两种,数据副本,不同节点持久化存储同一份数据,是分布式系统解决数据丢失异常的唯一手段。服务副本,指数个节点提供某种相同服务,这种服务一般不依赖于节点的本地存储,其所需数据一般来自其他节点。例如, GFS 系统的同一个 chunk 的数个副本就是典型的数据副本,而 Map Reduce 系统的 Job Worker则是典型的服务副本。
(2)一致性
分布式系统通过副本控制协议,使得从系统外部读取系统内各个副本的数据在一定的约束条件下相同,称为副本一致性。依据一致性的强弱即约束条件的不同苛刻程度,可由若干一致性级别。
- 强一致性(strong consistency)任何时刻、用户、节点都可以读到最近一次成功更新的副本数据。(程度最高,最难实现)
- 单调一致性(monotonic consistency):任何时刻,任何用户一旦读到某个数据在某次更新后的值,这个用户不会再读到比这个值更旧的值。(实用,因用户仅关心己方的一致性)
- 会话一致性(session consistency):任何用户在某次会话中一旦读到某个数据在某次更新后的值,这个用户在这次会话过程中不会再读到比这个值更旧的值。
- 最终一致性(eventual consistency):要求一旦更新成功,各个副本上的数据最终将达到完全一致的状态,但达到完全一致状态所需要的时间不能保证。一用户若始终读取一副本的数据,则可有单调一致性,一旦用户更换副本,则无法保障任何一致性。
- 弱一致性:一旦某个更新成功,用户无法在一个确定的时间内读到这次更新的值,且即使在某个副本上读到了新的值,也不能保证在其他副本上可以读到新的值。
3、衡量分布式系统的指标
(1)性能
常见性能指标:
a)系统的吞吐能力,指系统在某一时间可以处理的总数据量,可用系统每秒处理的总数据量来衡量;
b)系统的响应延迟,指系统完成某一功能需要使用的时间;
c)系统的并发能力,指系统可以同时完成某一功能的能力,通常用QPS(query per second)来衡量。
三者相互制约
(2)可用性
指系统在面对各种异常时可以正确提供服务的能力。可用系统停服务的时间与正常服务时间的比例衡量,也可用某功能失败次数与成功次数的比例衡量。该指标衡量了系统的鲁棒性,是系统容错能力的体现。
(3)可扩展性
指分布式系统通过扩展集群机器规模提高系统性能(吞吐、延迟、并发)、存储容量、计算能力的特性。好的分布式系统总在追求“线性扩展性”,也就是使系统某一指标可以随着集群中的机器数量线性增长。
(4)一致性
根据具体的业务需求的不同,分布式系统总是提供某种一致性模型,并基于此模型提供具体的服务,越强的一致性,对用户使用来说越简单