首先,如果这篇文章引起一些混乱,我感到很抱歉,因为这关系到我一段时间以来一直在处理的一个大问题。
以下是一些背景信息:我经营一家教育网站,提供在线课程的视频点播服务。4 年来,我们使用遍布全球的 6 台专用 Wowza 服务器托管我们自己的所有媒体,以交付我们的媒体。我们的成本约为每月 1,500 美元。
为了改善服务,我们采用了 CDN,效果一直不错,但现在我们的托管费用已上涨至每月近 6,000 美元,我们想恢复到 98% 的托管状态,只有在万不得已的情况下才使用滚动脚本将内容外包给 CDN。
当我们拥有自己的专用服务器时,我们通常会使用 2X 四核 2.66GHz 处理器、16GB 内存和 2 个 SSD(RAID0)。即使我们从同一家托管公司订购相同的产品,只是在世界不同地区,我们也会注意到巨大的性能差异,这似乎是硬件层面的,而不是网络层面的。
我们达成了一项协议,以很优惠的价格与他们进行一些共置,但现在我却无法确定如何获得我需要的最佳性能。
================================
现在我的问题
假设我想要最佳的数据传输/寻道时间以同时传输最多数量的视频?如果我同时有 1000 个用户在线,他们可能同时打开多达 250-400 个单独的视频文件。我知道我可以获得 8 个 SSD SAS 驱动器并将它们放入 RAID 中,但处理器或 RAM 呢?
在 eBay 上,我看到类似这样的内容:
PowerEdge R810 1U Server (4X) 1.87GHz Eight-Core Xeon L7555 192GB RAM
POWEREDGE R810 SERVER FOUR X7550 2.0GHZ 96GB
从处理器的角度来看,我可以找到具有 8MB - 30MB L3 缓存的处理器,但这真的很重要吗?我是否最好使用 2 个四核处理器,还是需要 4 个八核处理器才能真正发挥其最大作用?
我从软件供应商那里了解到,当您打开多个文件时,内存越大越好,但总的来说,他们拒绝提供有关哪种硬件实际上会给您带来特定结果的更多详细信息。他们只说:
http://www.wowza.com/products/streaming-engine/specifications
High-load recommended production hardware
CPU: Dual Quad-Core or a single Hex-Core, 3.00 GHz or better
RAM: 16-32GB
Disk: 2 or more in RAID 0 (striping)
Network: 10Gbps Ethernet
这很好,但它没有说明这种配置的结果会是什么。我通常每天都需要能够在一整天内播放 15,000 个视频,同时播放的峰值为 1,500 个。从带宽的角度来看,如果硬件能够跟上,我可以通过单个互联网连接实现这一目标。我知道拥有多个位置有好处,但如果我能解决硬件问题,我仍然可以每年节省超过 50,000 美元。
最后,我想知道如果我确实有一个超高性能 RAID,我接下来需要担心的事情的顺序是什么?我应该只关注时钟速度、L3 缓存、RAM 吗?
=================================
更新:
我购买了一台新服务器,正在学习有关 RAID 配置和性能的更多信息,如果您想了解,可以在此处查看该故事的下一部分:
答案1
我认为不可能说:购买 X,安装 Y,您的问题就会立即得到解决。这将需要多次迭代才能完成,并且当瓶颈不可避免地出现时,您需要投入更多精力来识别它们。在大多数情况下,我将避免推荐特定的硬件,因为当我单击提交按钮时,这些硬件已经过时了。
因此,由于我们没有关于瓶颈的良好数据,我们只能假设这是一个绿地项目。以下是我处理它的方式:
- 视频流不需要那很多 RAM 或 CPU,但它确实需要快速存储。假设在 RAID 10 中使用四个 400GB SAS SSD,提供 800GB 可用空间来存储视频。但是,如果您计划在未来几年提供更多视频,您可能需要增加这个数字。假设在 RAID 10 中使用四个 800GB SAS SSD,提供 1600GB 可用空间。
- 不要在网卡上省钱。你的网卡至少应该支持 TCP/IP 卸载(即使你最终不使用它)、接收端扩展和接收端合并。一些网卡(例如来自英特尔的网卡)具有进一步提高性能的功能。你可能需要花一点时间研究一下这个问题。
- 虽然您确实需要注意并确保服务器的网络配置和调整良好,但网络吞吐量问题有时是网络基础设施的问题。如果您是同地办公且无法控制这一点,请准备好与数据中心进行大量争论。特别是,确保您没有购买被限制为链路速度一部分的网络端口,并且数据中心实际上有足够的带宽来满足您的高峰时段需求。
- CPU 并不是很重要,但确实很重要。Web 服务器不会使用太多 CPU,但处理来自 NIC 的中断可能会使用与 Web 服务器一样多的 CPU,甚至可能更多。您可能不需要顶级配置,但您也不应该在这里省钱。
- 如果您使用双 CPU 系统,则需要进行额外的调优工作。在这样的系统中,每个 CPU 可以快速访问一半的 RAM,而另一半则访问得较慢,另一个 CPU 则相反。这称为 NUMA,您需要注意与您的 Web 服务器或中断处理相关的瓶颈,这些瓶颈在一个 CPU 上运行,而另一个 CPU 访问内存。Linux 确实包含一些工具来帮助您处理这个问题。
- 您不需要那么多 RAM 来提供视频,但您的服务器将利用您提供的所有 RAM,作为非常快速的磁盘缓存。我认为您不太可能在这里遇到瓶颈,所以我会从小处着手,并在必要时升级 RAM。32GB 可能是一个好的开始;除非您已经知道您需要它,否则 192GB 会过度使用。
- 我会使用 nginx Web 服务器。我总是这么做,因为它默认比 Apache 更有能力处理数千个同时连接。不过,您可能需要增加系统上的文件描述符数量。
- 我将在 Red Hat Enterprise Linux 7 上构建它,并且购买并在服务器使用寿命内保持订阅有效。 除了Red Hat 的全面文档其分布和性能调优以及其广泛的知识库,Red Hat 支持可以帮助您识别并解决出现的瓶颈,这很容易就值得花费代价。
- 如果情况允许,请做好升级组件的准备。您可能需要根据投入生产后发现的实际问题升级 NIC、RAM 或 CPU。
- 所有这些都假设您正在构建多台服务器,并且请求以某种方式在它们之间进行负载平衡。您应该构建比其所需容量更大的服务器,以便在其中一台服务器发生故障或需要重新启动、升级等时,其余服务器可以弥补不足。