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