![共享驱动器可实现的最小延迟是多少?](https://linux22.com/image/665493/%E5%85%B1%E4%BA%AB%E9%A9%B1%E5%8A%A8%E5%99%A8%E5%8F%AF%E5%AE%9E%E7%8E%B0%E7%9A%84%E6%9C%80%E5%B0%8F%E5%BB%B6%E8%BF%9F%E6%98%AF%E5%A4%9A%E5%B0%91%EF%BC%9F.png)
我有一个服务器应用程序,它使用磁盘缓存来存储某些数据(100GB-1TB)。现在我想使用该服务器应用程序的多个实例(10、100 个)(每个实例在单独的服务器上),并且它们几乎都会生成相同的缓存内容。
现在一个显而易见的想法是让所有这些机器共享缓存。但是,我的缓存项很小(10kb)。因此,我最需要的是访问缓存项的低延迟。
从延迟角度来看,提供这种共享缓存的最快方法是什么?显然,以太网上的 CIFS 并不适用。
如果有帮助的话,您可以假设我的所有服务器都是同一主机系统上的虚拟机,因此如果存在灵巧的 VMware 功能(或类似的东西),我会洗耳恭听。
答案1
造成延迟的因素有以下几种:
- 无论托管存储的是什么,驱动存储 io 堆栈延迟。
- 对于真正负载的系统,这个时间范围从亚毫秒到几十毫秒,甚至几百毫秒。
- 无论你使用什么方法提供服务,网络文件系统堆栈的延迟都是如此(CIFS、NFS、OpenSwift、Gluster 等等)
- 对于面向连接的协议(CIFS、NFS),这个时间很少超过 10 毫秒,通常少于 1 毫秒。
- 对于无连接协议(OpenSwift),必须进行 TCP 握手,它是网络直径的函数。
- 网络距离延迟
- 对于您描述的如此接近的网络,这个时间可能小于 1 毫秒。
- 网络客户端延迟
- 对于空载系统来说小于 1ms。
总而言之,最大的延迟来源将是存储子系统的实际性能和您选择的协议。我会选择面向连接的存储协议。考虑到您要查看“100 个”并发连接,如果可能的话,我会选择您正在使用的任何内核都可以在内核中处理的协议。
实际上,减少延迟的最快方法是将所有数据放在 SSD 上。