我问的是一个非常常见的问题,每个开发人员在想要托管服务器时都会想到这个问题,但很难找到准确的答案。我需要托管一个返回 20KB HTTP 响应的服务器。该服务器预计每天会收到一千万个请求,每分钟最多 1 万个请求。我应该拥有多大的服务器容量(RAM、带宽等)?让我们放心地忽略其他因素,如存储、数据库容量(如 SQL 等)。这个问题的主要目的是根据带宽和 RAM(或其他硬件)来判断硬件估计值,这些硬件可以处理如此多的同时连接。
如果回答这个问题的人能够解释一下得出答案时考虑的因素,那么这不仅对我,而且对任何感兴趣的人都会非常有帮助。控制这些因素的公式将帮助任何人改变我最初问题中的要求并得出所需的答案。
答案1
没有公式可循,最好的方法是尝试获取一些测试设备,并设置一个类似于生产环境的环境并进行测试。
答案2
Zoredache 是对的:您需要对您的应用程序进行实际测试,以便进行准确的容量规划。但话虽如此……
如果您预计每天会收到一千万个请求,每个请求为 20 KB,那么每天大约需要 190 GB,每月需要 5912 GB。为了大致了解带宽成本,亚马逊对其 S3 服务收取 0.12 美元/GB 的费用,因此仅带宽费用就需要 709.44 美元/月。
您的估计峰值负载为每分钟 10,000 个请求,或每秒 167 个请求。每个请求 20 KB,即每秒 3.26 MB 的数据,或大约 26 Mbps,这是通常测量带宽的方式。
如果您要处理小型静态文件,任何现代服务器都应该能够处理此负载。如果您要进行大量计算才能生成 20 KB 的输出,那么即使是最强大的服务器也可以轻松应对。如果不了解有关您的应用程序的更多信息,就无法确定带宽是否是限制因素。
祝你好运!
答案3
嗯,没有确切的公式,但是根据您提供的数字,可以估算出所需的一些规格。
每秒 10,000 个请求,
每个请求 20KB
等于每秒 200,000KB
因此,忽略存储和 IO 带宽,您至少会饱和两个 1GE 链路。
由于不知道响应的性质,我无法对存储需求或 RAM 提供任何估计
因此您需要提供更多信息。
您能缓存内容吗?
您使用的是 PHP、ASP 还是类似程序?
如果您要提供静态内容,则只需使用两台服务器,每台服务器都具有大量 RAM 和 1GE 网卡,并在前面放置 2 个负载平衡器。
这样就足够了。
如果您提供动态内容,那么这项任务就变得完全不同了。