就负载处理而言,哪个更好:一台服务器还是两台同等功率的服务器?

就负载处理而言,哪个更好:一台服务器还是两台同等功率的服务器?

我的目标是弄清楚是否使用一台强大的服务器或带有负载平衡器的多台较弱的服务器更好。在服务器之间分配负载是否会影响我的网站所能承受的总负载?

很难单独挑出这一点,因为当然有很多参数会影响结果,所以有一些假设:

  • 把故障转移考虑放在一边——我知道这很重要,但为了问题的简单性,我们假设没有发生任何故障。
  • 多台服务器选项中的服务器具有与单台服务器选项相同的累积“功率”(大约相同数量的核心和 RAM 空间)。

如果这太过理论化,这里有一个具体的问题可能会有所帮助:
假设我有多个完全相同的服务器实例 - 我们称之为年代.
假设服务器年代最多可承载X每单位时间的呼叫次数。
会不会两年代具有负载均衡器的服务器提供服务2X单位时间内呼叫次数? 明显更多? 明显更少?

答案1

这取决于应用程序是否有可以并行运行的工作负载。如果所有请求都必须序列化,并且序列化的工作负载是最慢的,那么通过水平扩展(读作“拥有更多服务器”)将不会获得任何好处。

所以你必须分析工作量和瓶颈。如果瓶颈可以并行化,那么增加更多服务器会有所帮助。

从:http://en.wikipedia.org/wiki/Parallel_computing

“当一项任务因为顺序限制而无法分割时,投入更多的精力对进度没有影响。不管分配多少名女性,生孩子都需要九个月的时间。”

答案2

忽略冗余,最好有两台服务器。您将拥有一条额外的总线、一个额外的 CPU 缓存、额外的 NIC 等。虽然我们通常只考虑 CPU 速度和 RAM 总量,但重要的是要记住所有其他硬件组件,并且您还将获得一组额外的硬件组件。

我是冗余的坚定支持者,因此,即使你的问题想要将其排除在考虑范围之外,我还是主张将其纳入你的决定中,因为你不可避免地会需要它,而且你会很高兴拥有它。

答案3

简单的数学:如果一台服务器发生故障的概率是 p(比如说 0.001),那么两台服务器同时发生故障的概率是 p^2(0.00001) - 即您的可用性增加了 1/p 倍(1000 倍)。

是否能降低负载取决于瓶颈在哪里。使用 2 台服务器意味着 L2 缓存带宽加倍,主内存带宽加倍,磁盘 I/O 加倍。

调度大量进程(预分叉和线程)也存在问题,这可能会在单个非 NUMA 机器上运行时引入额外的延迟。

另一方面,您更有可能在 I/O 请求中发生缓存未命中。此外,除非您实施一些优先路由,否则在 2 台机器之间迁移会话会产生额外开销。如果您使用负载平衡器(为什么?),那么您将向堆栈中注入额外的延迟和单点故障。

实际上并不存在一台服务器拥有与另外两台服务器同等能力的情况,然而,在极少数情况下,大型服务器才能在网络服务方面发挥优势。

相关内容