分布式操作系统,简单来说就是把多台计算机组网,对外表现成一台完整机器。你在终端输入指令,或是运行程序,不用关心任务在哪台机器执行,数据存放在哪个节点,系统自动调度资源。所有功能分散在多台计算机上,这是它最核心的特征。
传统操作系统管控单台机器内部CPU、内存、硬盘、外设。分布式操作系统管理一整个集群,每台机器承担一部分工作,有的专门计算,有的负责存储文件,有的处理网络转发。机器之间依靠高速网络通信协作,对外只提供统一访问接口。用户看到的是一套系统,不是一堆独立设备。
需要区分网络操作系统。网络操作系统里面,每台计算机独立运行自身系统,用户访问其他机器,需要知道目标地址,登录或者映射网络驱动器。分布式操作系统不同,把整个集群当作整体管理。用户不用了解文件存储节点,也不用知道进程调度在哪台服务器,这种底层细节屏蔽能力叫做透明性,也是分布式操作系统的核心目标。

资源管理逻辑完全改变。单机系统内部,进程调度、内存分配、文件读写全部在单台主机完成。分布式系统,这些操作需要跨机器协同。计算任务拆分成多个子任务,分发到不同节点并行运算,运算结束汇总结果。文件系统会把同一份数据复制多份存储在不同节点,兼顾备份与就近读取。系统需要感知机器空闲、负载高低,合理分配任务。
通信是绕不开的难题。机器之间依靠网络传输消息,网络存在延迟、丢包、断连问题。单机系统进程通信依靠内存与总线,传输速度快,基本不会出现消息丢失。分布式系统没有这个条件,需要设计专属通信机制,比如远程过程调用,一台机器程序调用另一台机器函数,体验接近本地调用。底层的数据包封装、重传、超时处理,用户不用感知。
容错是分布式操作系统必须解决的问题。服务器数量多,单个节点故障属于常态。单机系统死机直接停止工作,分布式系统不能因为一台机器宕机导致整体瘫痪。系统检测故障节点,把任务迁移到其他节点,从数据副本恢复信息。部分系统采用冗余计算,同一任务在两台机器同时运行,优先采用最先返回的结果。这套思路依靠冗余换取整体可靠性。
可扩展性是它的优势。业务量上涨,直接新增服务器。分布式操作系统自动识别新节点,分摊负载。理想状态新增机器全程对用户透明,不用停机、不用修改配置。实际落地会遇到数据一致性、数据迁移、网络瓶颈等阻碍,但整体设计方向是这样。
分布式操作系统不是新理论,几十年前就开始研究。Amoeba、Mach、Plan 9这些名称在教材中经常出现。大规模落地应用,是近十几年的事情。云计算、大数据、微服务底层都用到分布式思路。单台服务器性能不足,就集群协同承载。多台机器协同调度,需要类似操作系统的平台管理。Kubernetes管理容器,Borg管理集群,不属于传统分布式操作系统,但承担的工作很接近。
难点同样突出。网络不可靠,节点随时下线,不同服务器时钟无法完全对齐,维护数据一致性成本很高。让大量服务器协同工作,像一台设备一样稳定运行,远比管理单台主机复杂。分布式操作系统,就是在各类矛盾之间寻找平衡方案。