分布式系统是其组件分布在连网的计算机上,组件之间通过传递消息进行通信和动作协调的系统。一个标准的分布式系统在没有任何特定业务逻辑约束的情况下,一般有以下几个特征:
分布性:一个分布式系统中的计算机在空间部署上是可以随意分布的,这些计算机可能处于不同的机柜上,不同的城市的机房中,或者是世界上任何一个角落。同时,机器的分布情况也会随时变动;
并发性:在一个计算机网络中,程序运行过程中的并发性操作是非常常见的行为,例如同一个分布式系统的多个节点,可能会并发地操作一些共享的资源,诸如数据库或分布式存储等,如何准确并高效地协调分布式并发操作也成为了分布式系统架构与设计中最大的挑战之一;
缺乏全局时钟:分布式系统中多个进程可能在空间上分布式在各处,进程之间通过交换消息来相互协作,密切的协作通常取决于对程序动作发生的时间的共识。但在分布式系统中,各进程与时钟同步所达到的准确性是有限的,即没有一个正确时间的全局概念;
故障独立性:组成分布式系统的所有计算机,都有可能发生任何形式的故障。单个模块的故障相对容易预知并设计应对逻辑,但分布式系统可能以新的方式出现故障。网络故障导致互连的计算机的隔离,但它们并不一定会停止运行,而且程序很难判断是网络故障还是因为延迟。同样,当被网络隔离计算程序在异常终止时,也许不能马上通知与它通信的其他组件了解。系统的每个组件会单独地出现故障,而其他组件还在运行。
分布式系统能够实现高可用、高吞吐、大容量存储、海量计算、并行计算等优异能力,天然的分布性和可伸缩等特性,也打破了物理上单机的瓶颈,使其能不断支撑着业务的发展而演进,并推进了云计算、大数据、人工智能等领域的发展。但是正如每个硬币都有两面,分布式系统的复杂性,也使其在设计、研发、运行、维护、安全性等方面都面临更多的挑战。