Contents

计算和存储都在想方设法地提高速度,谁都不想成为性能瓶颈,而在分布式架构下,网络带宽也是一个优化的地方。

带宽,是做性能估算时常用的一个单位。

在单机的情况下,我们学过DMA (直接内存访问)是一种能力,允许在计算机主板上的设备直接把数据发送到内存中去,数据搬运不需要CPU的参与。

对应地,有人实现了分布式架构下的直接内存访问,也就是RDMA。

RDMA目前来说比较垄断,Mellanox

RDMA需要专用硬件设备,包括RDMA卡、网线、交换机等。

一种不需要购置上述设备来模仿的技术叫DPDK,另外由此衍生的还有SPDK(Storage Performance Development Kit)。他们的创新点都是用户态,没有内核态中断。

DPDK和SPDK都是由Intel发起的工具箱,有一部分原因是要卖硬件。

DPDK存在的一个问题是,需要一个应用绑定一个网卡,由此来做高性能的处理,特别适合netty的场景。
我们曾经尝试对spark进行改造,使得它支持DPDK,其中包括对netty进行定制化等,但最终以失败告终,问题就出在了使用DPDK的每个进程都需要绑定一个网卡。
比如一个spark应用启动了n个executors,那就要有n个网卡了。
对于netty的情况,它起的是多线程,所以不影响。

SPDK技术就涉及到虚拟文件系统FUSE,hadoop、alluxio、lustre都已经实现对应的接口。

用户态文件系统
ZFS Ceph

spdk的存在就是提供一种以轮询的方式来访问硬盘的方式,在高速设备上用于取代中断的访问方式