以1000个请求/秒识别静态文件服务器上的瓶颈

这是困扰了我很长一段时间,我真的希望有人能帮我。

我将保持简短:我拥有一个文件服务器(2个双核Xeon 2.0,8GB内存,132个SCSI硬盘),可以承载数千个小图像文件,4-10kb,每秒钟可以处理超过1000个请求。

我已经尝试了Apache,Nginx和Lighttpd,并发现Lighttpd是最适合这项工作的。

当Web服务器closures时,一个简单的高清基准testing表明它可以以大约170兆字节/秒的速度读取。 但是,当networking服务器打开并且服务大约30兆字节/秒时,这个非常相同的高清基准testing表明,高清可以以仅仅5兆字节/秒的速度读取,而不是140(170减去30)兆字节/秒,我会期待。

现在,即使在1000个请求/秒的时间内,CPU也能正常工作(负载低于1),并且有足够的空闲内存,这使我相信瓶颈实际上就是HD。

所以,我的问题是,为什么? 为什么当通过networking服务器提供服务时,可以读取的HD只有每秒30兆字节/秒的170兆字节/秒的瓶颈?

我的第一个猜测是,立即寻找并提供数千个文件完全杀死了HD的性能,而不是像这些基准testing一样只是一次读取/写入一个文件。

那是对的吗? 如果是这样,我该如何解决呢? 袭击? 更多HDs? 固态硬盘?

提前致谢!

这确实听起来像是在饱和磁盘的I / Ofunction。 一个15K RPM磁盘每秒可以处理大约170次I / O完全随机的I / O操作。 当在RAID0,RAID1或RAID10arrays中使用时,根据arrays中驱动器的数量,此I / O操作数是可加的(R5和R6引入另一个瓶颈,因此真实吞吐量可能会从理论上降低)。 如果你有96个驱动器在那里,你的理论最大值是大约16K I / O操作,秒。

除此之外:现在甚至可以把它比作中档的固态硬盘,在一台设备上可以处理30K I / O Ops /秒。

即使文件系统可能有4kb的块大小,该HD可能已经足够大以具有512b的扇区大小。 所以你将在你的I / O中得到一些4-10kb文件的顺序性。 即使如此,每秒钟有1000个并发请求听起来像是真正饱和单个磁盘。 事实上,你在繁忙时期的基准testing显示微不足道的5MB /秒告诉我,你正在饱和磁盘。

如果您的数据集足够小,单个SSD(或R1镜像中的一对)速度将足够快,无需增加caching的RAM。 如果这个“132 SCSI HD”实际上是“132GB SCSI HD”,那么你就进入了“价格适中”的SSD价格区间。

你的问题确实很可能是寻求开销。 有两个主要的解决scheme:

  • 添加足够的内存以适合你的工作集是最理想的方法,而且这些日子相当便宜。 即使它看起来像有足够的RAM,问题是没有足够的cachingRAM,它通常不会显示为“已使用”。
  • 如果不这样做的话,固态硬盘的搜寻速度会比普通的硬盘要快得多,如果你的工作集太大而不能适应内存(也就是说,对于你的主板的内存限制太大或者比普通内存的价格便宜)。

RAID10,RAID1或RAID0(危险:丢失一个驱动器会终止arrays)可以帮助将读取访问分割到多个硬盘驱动器,从而提高平均访问时间,但这只是Nx的改进(其中N是正在使用的驱动器数量) ,所以添加RAM应该被认为是可取的。