另外再推荐给大家两篇论文,一篇是 Raft 作者 John Ousterhout 大神的新作 “Exploiting Commutativity For Practical Fast Replication”,还有一篇是用 Raft 实现 Erasure Code “CRaft: An Erasure-coding-supported Version of Raft for Reducing Storage Cost and Network Cost”。有兴趣的同学可以自己看一下,这里我就不做介绍了。
Distributed Shared Memory and Heterogeneous computing
在开始之前,我们首先来回顾一下计算机的发展历史。到今天为止,主流的计算机都是在冯诺依曼架构下发展的,一切的设计都围绕着 CPU、内存进行。当 CPU、内存的能力不足时,就通过总线(Bus),不断地对他们的能力进行扩展,例如磁盘、GPU 等等。随着 CPU 速度不断升级,总线的速度也在不断地升级,以匹配 CPU 的运算速度。同时,为了安全高效的完成 CPU 以及外设之间的通信,产生了例如 DMA、IOMMU 等技术。而总线受限于物理条件,通常只能进行非常短距离的通信,CPU 能直接访问的所有的设备都需要集成在主板上,也就是我们今天看到的主机。
在早期 CPU 的处理能力还非常弱的时候,单个 CPU 无法胜任大规模计算任务。这个时候出现了两种发展的流派,一种是 Shared Memory,也就是在单机内扩展 CPU 的数量,所有 CPU 都共享相同的内存地址空间;另一种是 Distributed Memory,也可以理解为多机,每台机器的 CPU 有独立的内存和独立的地址空间,程序之间通过 Message-Passing 的方式进行通信。Shared Memory 技术对于硬件的要求较高,需要在处理器之间实现 Cache Coherence,而软件层面的改动较为容易,早期的典型代表就是 Mainframe Computer,也就是俗称的大型机;而 Distributed Memory 则对硬件的要求较低,但是软件需要采用 Message-Passing 的方式进行重写,例如早年的 MPI 类的程序,主要应用在 HPC 领域。由于 Mainframe 的硬件成本太高,MPI 逐渐成为了主流。
在上世纪八九十年代的时候,曾经流行了一阵 Distributed Shared Memory(DSM)技术,也就是分布式共享内存。DSM 通过操作系统的内存管理系统把各个独立服务器上的内存地址连接到一起,组成连续的内存地址,使得应用程序可以更方便的做数据共享。但 DSM 技术一直没有发展起来,主要是受限于不断提升的 CPU 频率和当时的网络速度越来越不匹配,导致 DSM 的通信成本过高,无法被普及。