1.2 分布式系统常用术语
分布式系统是一门新兴的学科。为了方便后续章节的学习,先了解下分布式系统中常用的术语。
1.节点
节点(Node)是指一个可以独立按照分布式协议完成一组逻辑的程序个体。在具体的工程项目中,一个节点往往是操作系统上的一个进程。节点是一个完整的、不可分的整体,是执行分布式任务的最小的单元。
有关节点的内容,会在第2章中详细讲解。
2.副本
在高可用的分布式系统中,相同功能的程序往往会部署到不同的节点中。这些不同的节点也被称为“副本(Replica)”。副本在分布式系统中是数据或服务提供的冗余,因此可分为数据副本和服务副本。
数据副本,是指在不同的节点上持久化同一份数据,当出现某一个节点存储的数据丢失时,可以从副本上读到数据。数据副本是分布式系统解决数据丢失异常的主要手段。
服务副本是指数个节点提供某种相同的服务,这种服务一般并不依赖于本地存储的节点,其所需数据一般来自其他节点。服务副本也称为“服务实例”。
例如,GFS系统的同一个Chunk的数个副本就是典型的数据副本,而Map Reduce系统的Job Worker则是典型的服务副本。
图1-1展示的是一个微服务架构,其中相同的服务会有多个服务实例(服务副本)。
图1-1 微服务架构
3.集群
相同功能程序的副本,统称为该功能的集群。
4.通信
节点与节点之间是完全独立、相互隔离的,节点之间传递消息的唯一方式是网络通信(Communication)。图1-1中带箭头的直线表示了节点之间的消息通信。
消息通信可以是双向的或者是单向的。使用双向箭头的直线表示网络双向可达,而某些节点间的直线只有单向箭头,表示网络单向可达,而某些节点间连线没有箭头,表示网络完全不可达。
有关通信的内容,会在第3章中详细讲解。
5.存储
节点可以通过将数据写入某台计算机的本地存储(Storage)设备来保存数据。通常的存储设备可以是磁盘、SSD、文件,也可以是关系型数据库、NoSQL数据库、文件存储系统等。
6.状态
如果某个节点负责存储、读取数据,则该节点为有状态的节点,反之称为无状态的节点。如果某个节点A存储数据的方式是将数据通过网络发送到另一个节点B,由节点B负责将数据存储到节点B的本地存储设备,那么不能认为节点A是有状态的节点,而只有节点B是有状态的节点。
7.异常
异常主要是针对某个节点而言的。异常可能是由网络故障引起的,也可能是程序自身引起的。
需要注意的是,在高可用的分布式系统中,单个节点的异常,并不一定会影响整个分布式系统。分布式系统往往会设计一定的容错性。
8.性能
无论是分布式系统还是单机程序,都会对性能(Performance)有所要求。不同的系统,关注点有所差异。常见的性能指标有以下3点。
·吞吐能力,指系统在某一时间可以处理的数据总量,通常可以用系统每秒可处理的总的数据量来衡量。
·响应延迟,指系统完成某一功能需要使用的时间。
·并发能力,指系统可以同时完成某一功能的能力,通常也用每秒请求数(Query Per Second,QPS)来衡量。
上述3个性能指标往往会相互制约,追求高吞吐的系统,往往很难做到低延迟;系统平均响应时间较长时,也很难提高QPS。
9.一致性
分布式系统为了提升可用性,总是不可避免地使用副本的机制,从而引发副本一致性的问题。
根据具体的业务需求的不同,分布式系统总是提供某种一致性模型,并基于此模型提供具体的服务。
有关一致性的模型,会在第17章中详细讲解。