我想将 nginx 设置为静态文件(图像和视频)的反向代理。
有人能分享一些他使用 nginx(以及其他服务器)获得的吞吐量统计数据吗?你认为高端服务器可以处理数百甚至数千 Mbit/s 吗?(我知道流媒体服务器可以,但不知道 HTTP 服务器可以。)
答案1
通常吞吐量受每秒请求数限制。这取决于很多因素。
第一个瓶颈是存储。你可以使用大量内存作为文件系统缓存来消除这个瓶颈。
下一个瓶颈是中断导致的 CPU 负载。您可以使用允许卸载各种任务的 NIC 并配置中断合并来解决此问题。
接下来是 nginex CPU 使用率。您将通过扩展(使用更好的 CPU)然后水平扩展(添加更多 CPU 和服务器)来解决这个问题。
对所有更改进行负载测试并监控一切(CPU、I/O、交换机负载等)。确保您将使用一些好的硬件作为测试机器,否则瓶颈可能成为您的测试机器。
答案2
视情况而定。请求中值大小、保持活动连接数、文件系统缓存命中率、NIC 驱动程序质量以及驱动程序/操作系统调优参数都非常重要。其中,文件系统缓存最为重要。
例如,如果您同时向数百个客户端发送相同的 500 MB 视频副本,并且整个视频文件都在缓存中,则很容易达到 10 Gbps。如果您正在提供数十亿个小图像或 javascript,并且缓存命中率很低,那么提供 100 Mbps 的服务就算幸运了。
尽管 nginx 非常优秀,但它的发送速度受限于其读取数据的速度。10 Gbps 大约是 1 GByte/秒。如果数据集是全部来自 RAM 缓存,这是可行的。否则,您将在存储层遇到瓶颈(除非您在 RAID 配置中拥有几个快速 SSD 或大量旋转锈蚀)。还请注意,您需要在每个核心上运行多个 nginx 工作进程,以避免在 Linux 下阻塞磁盘访问,因为 Linux 中的异步 IO 基本上在设计上就被破坏了。