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