我正在寻找有关服务器硬件规格的建议,该服务器需要成为大约 2,000 个并发连接的用户群的 Web 缓存。客户端正在观看比特率从 150kbps 到 2mbps 的分段 HTTP 视频。大多数视频都是“实时”的,即每个片段为 2-10 秒,每次维护 100 个左右。还有一些预先录制的固定长度视频。我将如何为这样的服务器进行配置计算:什么样的 HDD(SSD?)、多少个 NIC、多少 RAM 等?我正在考虑在 Linux 上使用 Varnish,使用我能得到的所有 RAM,2 个 CPU,每个 CPU 有 6-8 个核心。
答案1
Varnish 是否能够跨会话共享对象?换句话说,您的架构是否使得视频流客户端加载的对象是/somestream/1h42m0s-1h42m10s/
,而不是/somestream/for/joeuser
?在这种情况下,根据您的描述,我会跳过 SSD,只使用大量 RAM;配置池后,Varnish 实际上不需要磁盘存储malloc
。记得关闭swappiness
。另一方面,如果 Varnish 只是将每个请求传递到后端,那么您最多只能获得一些 SYN 洪水保护。
我见过 Varnish 愉快地将几千兆位推向门外,但要确保 Varnish 之上的所有内容也知道如何处理这种流量。一些防火墙(名称已删除以保护有罪者)几乎无法处理 100 Mbit/s,更不用说您所说的流量(4Gbit/s),如果这些连接中的每一个都以 2Mbit/s 的速度饱和其链路。对于 NIC,即使是板载 10Gbit 端口也可能足够;如果需要,您还可以使用 GigE 进行愚蠢的通道绑定,但何必呢?只需获得一个 10G 端口(或三个)就可以了。
对于服务器本身,您根本不需要太多的 CPU,但需要将 RAM 最大化。如果您愿意,可以在那里安装几个快速磁盘,但它们存在的唯一原因是启动。Varnish 是一款非常非常轻巧的服务器。您可以使用多级缓存,并在视频从 RAM 中转出后尝试将其卸载到 HDD 上,但为什么呢?它们已经缓存到内容服务器上的磁盘上;Varnish 服务器上的磁盘并不是神奇地变得更好。把这些钱花在更多的 RAM 上。说真的,考虑到您谈论的带宽类型,您不应该对 64 或 96 GB 感到惊讶。
无关的建议是,如果您在流媒体服务器上的任何时候使用磁盘,您绝对应该选择 SSD(或更奇特的选择,如 FusionIO)。对于流媒体应用程序,当人们流式传输同一文件的不同部分时,您会在磁盘上跳来跳去,SSD 不只是好一点;实际上,它们是您唯一合理的选择。