为规模设计服务。需要的服务器数量

时间:2016-11-01 22:05:57

标签: apache performance architecture lamp system-design

假设我需要设计一个Web服务。为了简单起见,假设我使用LAMP(Linux-Apache-MySQL-PHP)。

我知道我每秒会提供N个用户请求。这些请求基本上是对数据库的简单CRUD操作,没有文件上传或复杂的计算。

假设每个请求执行M ms并且在我的服务器上占用K Mb内存,具有G Gb的RAM。

我需要多少台这样的服务器?它只是N * K / G吗?

M的合理值是200msK的合理价值是什么?

我们是否需要在这个问题中考虑CPU功率?

还有其他考虑因素吗?

1 个答案:

答案 0 :(得分:1)

您正在做的事情是信封近似的良好背景,但绝不应该将您的思维练习作为扩展服务的权威指南。

这是因为没有服务会像你描述的那样表现出那种类型的常量行为(如果在不可预知的外围i / o,垃圾收集,外部因素,用户输入等等,则会受到指责)

正确的方法是执行比例和负载测试。在您编写服务后,开始加载测试服务并记录服务的性能特征。如果您做得对,您应该达到配置最大化的程度:CPU,网络吞吐量,内存或磁盘I / O.如果两者都没有超出限制而你达到了限制,那么它就是你的一个上游依赖项(你的数据库等)。

一旦达到峰值,它就会告诉您每秒可以处理的峰值请求数。

您还会注意到,在大多数情况下,峰值性能是不可持续的:您的设置可能会在短时间内突发,每秒处理的请求数量超过持续负载量。

获得单个服务器的数字后,您可以从两个方面开始改变:

  1. 使用不同的硬件配置进行测试(如果您需要内存绑定,请添加更多内存,如果您受CPU限制,请添加更好的CPU等)

  2. 使用多台服务器进行测试;开始添加服务器并查看您的服务如何水平扩展

  3. 理想情况下,您的服务应该在添加服务器时进行线性扩展,但您可能会发现性能曲线不是线性的。

    获取您的号码,调整您的设计。冲洗。重复。

    没有替代品,神奇的公式。