为什么大型站点使用多台服务器而不是一台规格更好的服务器?


42

我读到Stack Overflow使用10台或更多服务器来服务Stack Overflow网站。不同的服务器具有不同的功能,例如反向代理,数据库服务器或HTTP服务器。

我已经看到了具有以下规格的功能强大的独立单服务器:

  • 2个Xeon E5-2630v2 @ 2.60 GHz,总共12核,24线程; 30兆字节
  • 64 GB ECC注册表 1600 MHz时高达768 GB DDR3
  • 4 x 120 GB英特尔520/530系列(80k随机IOPS,〜550 MB / s)
  • 带有专用以太网管理端口的HP iLo4 Advanced。

为什么不使用具有更高规格(例如768 GB RAM,20 TB + HDD,4 + x Xeon)的单台服务器?使用许多服务器的优点是什么?使用单个高规格服务器的缺点是什么?


4
SE不仅拥有10台以上的服务器,而且在另一个数据中心中具有重复的设置以进行故障转移。而且,尚未发明出可以处理Facebook或Google的所有流量的服务器。
2014年

8
当您需要重启该超级服务器时会发生什么?
Liath 2014年

冗余... :)
William Edwards 2014年

1
并行性...
莫妮卡(Monica)

1
@SSpoke:每个端口不限于一个连接。重要的是(src地址,src端口,dst地址,dst端口)的组合是唯一的。
大卫

Answers:


58

到目前为止,单个功能强大的服务器只能进行升级。一旦拥有了最强大的服务器,您的站点就无法在不将服务器分开或提高效率的情况下增长。

还有成本因素。一台功能强大的服务器的成本可能是两台功能强大的服务器成本的十倍。您希望能够以最便宜的价格购买硬件,而又不会被锁定在更高的价格上,因为这是唯一可行的方法。

正常运行时间和可靠性也很重要。如果有两台或更多服务器,则一台服务器可能会发生故障或脱机进行维护,从而使站点保持正常运行。您无法使用单个服务器来做到这一点。

大多数大型网站使用负载平衡器和多个服务器。我曾经在TripAdvisor工作。他们发表了一篇很棒的文章,介绍了TripAdvisor架构以及如何使它在多台服务器上具有高度可扩展性。

可能在一台服务器上运行先进的服务。我知道的一个例子是Mailinator。作者发表了有关Mailinator体系结构的文章。他致力于提高代码效率,而不是购买新服务器。这最终成为一个限制,决定了他的服务如何工作。在单台机器删除邮件以腾出更多空间之前,它仅保留几个小时。

升级单个服务器称为垂直扩展。添加更多服务器称为水平扩展。有关此主题的更多信息,这里有一些文章将两者进行比较:


9
如果您有多台服务器(多于几台),并且有些CPU死了,那么您还有其他服务器可以使一切正常运行。如果您有1台服务器,并且中断了,那么您就完成了。
马丁2014年

2
人们忘记的另一点是,以最大容量或接近最大容量运行服务器不一定是一件好事。通常,我们在全球电信(该服务器将保持无名状态)中对服务器的容量进行了评估,这通常是最大容量的一半(没有真正的逻辑,只是观察指标)。无论硬件容量如何,您有时都会在计算队列,IO子系统,内存寻址和交换等方面遇到麻烦,这仅仅是因为子系统之间的平衡可能会因操作系统的不同而发生冲突。有些健壮的系统可以提供更多支持。
closetnoc

@closetnoc我认为描述它的最好方法是您试图避免瓶颈。理论上,一个适当平衡的系统可以以100%的容量运行,而不会产生不良影响,但是系统必须等待的任何事情(CPU时间,I / O,总线传输等)都将导致性能问题。通过以最大容量的一半运行系统,您会发现一个不错的地方,您不会遇到此类瓶颈。
Thebluefish 2014年

@Thebluefish是和不是。我是老系统内部人员。大多数系统在操作系统和内部硬件中都存在瓶颈,无法通过快速的突袭,内存,CPU等来弥补。此外,操作系统内部也有局限性。Windows相当不错,因为它基于VMS,但仍具有无法像VMS一样进行调整的限制。Linux显然更好。某些服务器在设计时几乎没有硬件限制,例如我们使用的HP。但是即使那样,由于中断和CPU交换的增加,以%100的容量运行计算队列也不是一个好主意。
closetnoc

2
水平扩展的另一个优点是:只有太多的电力,带宽,冷却等可以定向到单个服务器。Netflix可能拥有一个具有无限处理能力和内存的盒子,但是如果没有足够多的管道来吸引流量,这对他们没有好处。
克里斯·海斯

32

从海军上将格雷斯·霍珀(Grace Hopper)出发:

关于大型计算机的构建:“在开拓者时代,他们使用牛进行繁重的工作,并且当一头牛无法放下原木时,他们并没有尝试长出一头更大的牛。我们不应该尝试使用大型计算机,但适用于更多计算机系统。”

资源


1
在我的早期职业生涯中,我几次遇到了格蕾丝·霍珀(Grace Hopper),并与她共度了一段时间。她真的是什么!一只很酷的猫!我们都爱她。她对自己的时间和优雅非常友善和慷慨(双关语意)。引用她的荣誉!一次回程投票。谢谢!
closetnoc

5
尽管这是一个相关的报价,但这并不能回答问题。一个人的无根据的意见在这里不应该有价值。
TankorSmash

7
@NoahSpurrier因为它实际上没有回答问题的任何部分?这仅是一句引人入胜的报价,没有解释为什么我们应该为更多的服务器拍摄。
克里斯·海斯

2
我想说这是一个有用的答案,但不应作为THE答案接受,因为它没有详细说明具体原因。但是,它确实明确说明了负载分配原理的过度拱形原因。
Ian T. Small

1
@Bobson我一点也不在说她是一个重要的球员,我只是说我想看到一个包含一些内容的答案,而不是一两个听起来很不错的句子。
TankorSmash 2014年

10

Stephen解释了决定系统体系结构时要考虑的主要考虑因素:垂直和水平缩放的权衡。我将添加其他一些注意事项:

  • 关注点分离:您提到了多个截然不同的系统:反向代理,数据库,内容服务器等。从维护和安全的角度来看,将这些职责分散在不同的系统上以便它们可以运行不同的OS(版本)显然是有利的。如有必要,可以单独进行更新,并且在受到威胁时不会影响其他服务。
  • 内容交付:这是Web服务器的最终目标,非常适合于分布式模型。系统可以在地理上进行复制和扩展,以使长距离连接的等待时间最小化。它还允许冗余。大型网站使用负载平衡器(还有另一组服务器!)来允许自动故障转移以始终保持服务状态。

实际上,有一整个服务器类将垂直扩展扩展到另一个级别:大型机。它们具有多种优势(速度,可靠性)和劣势(成本),但总的来说,它们通常用于需要通过输入输出处理处理大量数据的情况下,即所谓的交易处理(例如信用卡购买,银行业务)。 ,选举和普查数据)。例如,银行通过垂直扩展的Web服务器为站点提供服务,而后端将最终通过大型机处理交易。

有趣的是,Paypal和Visa等公司已经从大型机转向了成千上万水平扩展系统的集群系统。在快速发展的数字世界中,大型机也达到了水平扩展的上限:

“鉴于所有可用性和性能要求,我们无法继续在大型机上处理付款,

资料来源:英国计算机世界杂志的 Adam Banks


8
  • 大小限制。我们想假装一个装有多个处理器,内存芯片和磁盘的盒子是统一的。这并非完全正确,但如果您的数字不要太大,那就足够正确了。在热量,能量,邻近性等方面存在技术限制,这意味着单个服务器的大小始终存在实际限制。

  • 可伸缩性-使用IPC共享内存的单服务器系统与使用网络或群集的多服务器系统之间存在巨大差异。但是,两台服务器和200台服务器之间的差异要小得多-如果您构建了一个可扩展的系统,则可以在出现问题之前将其扩展到更大……如果有的话,实际上就不需要大型服务器首先。

  • 弹性-一台服务器是一个管理员可能会“ oops”的地方。或存在一个物理问题,这意味着整个锡罐的维修都中断了。(Datacentre漏水,有人摔进机架并将其撞倒,诸如此类)。可以将多个服务器分布在一个数据中心内,或者更好地在地理位置上分布。而且,如果您已经在分发​​应用程序,则在“中型”大小的计算机上进行扩展几乎总是比在数量较少的大型计算机上进行相同数量的CPU /内存/ IO便宜。

  • 更新-如果我修补服务器,则可能会使服务不稳定,需要重新启动或需要一些停机时间。如果我有4台服务器运行相同的服务器,则可以使其中一台服务器停止运行一段时间。如果修补/更新周期出错,请不要使用它。


7

让我们小范围地解决这个问题。小型办公室,其中一台服务器运行邮件,ActiveDirectory,文件共享以及该公司的网站。

黑客攻击了它,您必须重新启动,因为IIS混乱了。或Exchange需要更新并重新启动。或Active Directory损坏。

这些孤立的“一项服务已关闭”问题中的任何一个都会影响整个服务器,因此该服务器上的任何共享都将由于必须重新启动或进行任何其他操作而影响它们。

真正的IT人员出现并看到该服务器后,他将建议将其拆分为单独的服务器(并具有备用域控制器服务器)。

这是“不要把所有鸡蛋都放在一个篮子里”的古老格言。

现在,该原理已应用于Web服务器。如果我只有一个Web服务器,并且发布了Web应用程序(新的MyFaceLink.com),并且它非常流行,那么我会遇到新的麻烦。当用户在网站上时,我无法关闭网站进行维护。而且如果它崩溃或我有太多用户,我会被抽水。即使是世界上最大的单个服务器,也将被10亿个FB转换所淹没。

因此,出于同样的“篮子里的蛋”原因,负载均衡开始发挥作用。将站点分布在3台服务器上,如果其中一台发生故障,其余2台将处理该容量。如果需要打补丁,我一次只能打一个补丁,而没有人注意到。

简而言之,它与大型服务器的价格无关,也不在于它能否真正处理负载(尽管可以)。这是单点故障。一旦业务繁忙,并且发生了24x7的情况(而不是5个工作在8-5的用户),则无法接受停机。计划内的停机比较难安排。因此,您分散了负载。


+1用于命名单点故障问题。
大卫·卡里

1

如果一个人试图让一台机器同时完成两个工作,那么机器的某些部分将需要更大但以相同的速度运行,某些部分可以保持相同的大小但需要运行得更快,而另一些则需要更大。更快。将小型计算机的角色合并为大型计算机,或将大型计算机的角色拆分为较小计算机的意义,很大程度上取决于哪种缩放比例适用于计算机中最昂贵的部分。如果将太多机器的工作负载组合成一个巨大的庞然大物,那么成本将由需要变得更大更快地处理增加的工作量。即使这些东西的成本相对于速度和大小而言都是线性的,但将工作量增加一倍也将使处理该机器的成本增加一倍以上。速度增加超过特定点的事实导致(远远超过)线性成本增加,从而扩大了影响。

实用性实际上并没有固定的点来强迫劳动的细分。根据要完成的工作类型,一台结合了两种工作负载的机器可能获得的内存不足两倍,或者运行速度不到两倍。另一方面,机器要做的任务越多,内存和速度要求随工作负载线性扩展的程度就越大。除此之外,每增加一倍的工作量,相对成本的增加就越大。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.