在技术领域中,分布式系统越来越成为绕不过去的一个名词。原因在于,这个时代的数据尺度与单机存储、处理能力的不匹配。于是有两条路子:机器大型化和机器互联。前者成本高昂且不灵活,于是后者越来越受青睐。根据代价守恒定律,代价不会凭空消失,硬件成本降下来了,软件设计成本便会提升。而分布式系统理论,则是帮我们降低这个软件成本的钥匙。
是什么
分布式系统奠基者 Leslie Lamport [1] 在其最重要的论文之一 ”Time, Clocks, and the Ordering of Events in a Distributed System“ [2] 中提到:
A system is distributed if the message transmission delay is not negligible compared to the time between events in a single process.
Lamport 是用类似相对论的思想来阐释这个问题。我们考虑两个时间尺度:进程间消息传递延迟和进程内事件间隔,如果前者相对后者不可忽略,则这组进程就是一个分布式系统。
理解这个定义,需要理解几个重要的概念(形式化的定义总是这样,摊手):进程(process)、消息(message)和事件(event)。为了避免套娃,这里不做过多展开,仅给出一个形象的理解:进程就是一个负责干活的劳工,其干的活可以分解为多个步骤,每个步骤就是一个事件,消息便是劳工交流的方式。
这也印证了维基百科中 distributed computing [3](分布式系统又称分布式计算)给的定义:
- There are several autonomous computational entities ( computers or nodes ), each of which has its own local memory.
- The entities communicate with each other by message passing.
这里面涉及到了计算机系统中最重的几种资源:计算(computational),存储(memory),以及沟通他们的网络(network)。
总结下,我们可以从另一个角度来对分布式系统进行描述:
对外,分布式系统表现为一个整体,基于总体的存储和计算能力,提供特定功能。
对内,分布式系统表现为一组个体,基于网络消息进行通信,分工合作。
而分布式系统的设计目标是,最大化整体资源利用率的同时,处理局部错误、保持对外可用性。