我有一个与以下场景(真实情况)近似的服务器有关的问题:
我有一个服务器,其中将存储一些可以通过在该服务器上运行的 Web 应用程序访问的视频。将有大约 100 个(并发)用户使用它(通常通过平板电脑或手机,但也包括 PC)。
你能给我一些关于为这个服务器构建硬件配置的想法吗?在其上运行的操作系统将是 Linux。
提前致谢。
编辑我:
我使用的 Web 服务器是 Apache HTTP,但它很可能会充当服务器的代理Java
(当然安装在这台机器上)。
将在此服务器上运行的其他应用程序将是:
- 认证申请
- 管理申请。
该服务器也将持续运行 (24/7)。
很难根据并发用户的数量提供准确的服务器配置,因为它也取决于您的代码和数据库优化。基本上您需要为您的应用程序和服务器执行基准测试,因此有很多开源工具可以这样做
您可以进行完整基准测试以及堆栈基准测试
像这样的工具
等可用。
从您的描述看来,服务器的主要用例是将视频流式传输到 100 个客户端。
鉴于此,服务器的两个最重要的子系统将是:
要根据性能调整这些大小,您需要知道需要多少带宽 - 这取决于您将提供的视频的质量。假设视频为 1MB/s,对于 100 个用户,网络和存储系统都必须能够提供 100MB/s(网络为 800Mb/s)的数据。
如果网络带宽连接大于单个链路的处理能力并且您无法提高链路速度(即从 1GbE 迁移到 10GbE/40GbE),那么您可以添加更多链路并在第 2 层聚合它们或使用多个IP 地址(每个链接一个)并通过应用程序分配连接。此外,您必须确保从服务器到客户端的数据路径能够处理容量,如果网络中的其他地方出现瓶颈,服务器能够提供 10Gbps 是没有意义的!
对于存储系统,您需要确保它能够同时处理带宽和 IOPS 数(每秒 IO 数)来提供数据。根据我们上面的计算,您将需要 100MB/s 的流式读取,但由于您有 100 个用户,存储系统必须能够处理至少 100 IOPS。如果您希望用户浏览视频,您将需要更多来保持性能。虽然硬盘驱动器在没有争用时可以提供良好的流媒体性能,但当并发访问数量增加时,我会考虑使用 SSD。
除了这些基本性能特征之外,您还需要考虑网络连接和存储系统的可靠性。如果链路故障或硬盘驱动器故障会发生什么?如果您想继续提供服务,您必须拥有多个链路和弹性存储配置(通过 RAID 或应用程序/文件系统级别的数据复制)。
存储系统的 RAM 将帮助您缓存视频并减轻存储系统的负载,因此如果您希望许多人观看相同的视频,那么更多的 RAM 通常会有所帮助。但是如果工作集的大小(通常访问的数据)大于系统上的 RAM 量,如果您没有看到很大的改进,请不要感到惊讶。
由于系统的大部分将通过 IO 传输数据,因此您可能不需要太多的 CPU 能力,因此任何现代多核 CPU 都应该足够了。尽管您应该注意,如果您在 NUMA 架构中有多个 CPU,则不要使 CPU 互连过载。
一旦你有了硬件,你应该对它进行基准测试,以确保它提供了明智的性能。对于存储系统,我推荐使用fio工具,它允许您专门测试场景,例如具有 100 个并发读取器的流式读取。
鉴于我上面所说的,您应该与您的首选供应商交谈,看看他们推荐什么配置。如果您将您的需求作为 RFP 的一部分(特别是如果您包含硬性需求,例如交付特定 IO 配置文件的能力),那么它可以更容易地解决以后的任何性能故障。
在设计这些系统时,请尝试考虑数据如何在系统中移动,以及限制在哪里。
最后,确保您设计的系统容量过剩,这样您就可以处理流量的增长和峰值。
是的。使用双倍尺寸。
</irony>
不,从这个阶段不可能。您可以使用 4core-4GB ram 机器或 mot,这实际上取决于您将使用它做什么。如果您只是从文件系统提供下载服务,那么小型机器就可以了,但是当涉及到 java et al ... 基准!
要更具体,您自己也应该更具体。
如果主要目的是提供视频并充当您的 java 应用程序的反向代理,我建议使用 nginx。它比 apache 更轻量级,可以处理更多的并发连接,同时需要更少的系统资源。
对于您的下载部分,尽量避免使用网络应用程序并直接从您的反向代理提供您的文件;这将降低整体所需的性能。
请注意,nginx 有一些很好的模块可以充当视频的静态服务器
关于 24/7:您是否需要确保24/7 全天候运营?那么你需要一个故障转移设置。