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

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


2 x Xeon E5-2630v2 @ 2.60 GHz,总共12核,24线程; 30 MB
64 GB ECC寄存器1600 MHz时高达768 GB DDR3
4 x 120 GB Intel 520/530系列(80k随机IOPS,〜550 MB / s)
HP iLo4 Advanced,带有专用以太网管理端口。

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

评论

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

当您需要重新启动超级服务器时会发生什么?

冗余... :)

并行...

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

#1 楼

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

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

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

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

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

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


维基百科:水平和垂直扩展
IBM关于云的思想:如何解释垂直和水平扩展在云端
Internap视频:垂直与水平缩放


评论


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

–马丁(Martijn)
2014年11月20日下午13:51

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

– closetnoc
2014年11月20日下午16:47

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

– Thebluefish
2014年11月20日在18:07

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

– closetnoc
2014年11月20日18:38

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

–克里斯·海斯(Chris Hayes)
2014年11月21日下午4:45

#2 楼

海军上将格雷斯·霍珀(Grace Hopper)的话:


在建造更大的计算机时:“在开拓者时代,他们使用牛进行沉重的拉力,而当一头牛无法放下原木时,他们没有。尝试长大一头牛。我们不应该尝试使用更大的计算机,而应该尝试使用更多的计算机系统。“




评论


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

– closetnoc
2014年11月20日在16:36

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

–TankorSmash
2014年11月20日在21:08

@NoahSpurrier因为它实际上没有回答问题的任何部分?这仅是一句引人注目的引用,并没有解释为什么我们应该为更多服务器拍摄。

–克里斯·海斯(Chris Hayes)
2014年11月21日,下午4:43

我想说这是一个有用的答案,但由于它没有详细说明具体原因,因此不应被认为是“答案”。但是,它确实明确说明了负载分配原理的过度拱形原因。

–伊恩·T·斯莫特(Ian T. Small)
2014年11月21日19:10

@Bobson我根本不认为她是一个重要的角色,我只是说我想看到一个包含一些内容的答案,而不是一两个听起来很不错的句子。

–TankorSmash
2014年11月21日19:51

#3 楼

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


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

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

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

资料来源:英国计算机世界的亚当·班克斯(Adam Banks)

#4 楼


大小限制。我们想假装一个装有多个处理器,内存芯片和磁盘的盒子是统一的。这并非完全正确,但如果您的数字不要太大,那就足够正确了。在热量,能量,邻近性等方面存在技术限制,这意味着在单个服务器的最大容量方面始终存在实际限制。
可伸缩性-使用共享内存的单个服务器系统之间存在巨大差异IPC和使用网络或群集的多服务器系统。但是,两台服务器和200台服务器之间的差异要小得多-如果您构建了一个可扩展的系统,则可以在出现问题之前将其扩展到更大...如果有的话,实际上就不需要大型服务器首先。
弹性-一台服务器是一个管理员可能会“举起”的地方。或存在一个物理问题,这意味着整个锡罐的维修都中断了。 (Datacentre漏水,有人摔进机架并将其撞倒,诸如此类)。可以将多个服务器分布在一个数据中心内,或者更好地在地理位置上分布。而且,如果您已经在分发​​应用程序,则在“中型”大小的计算机上进行扩展通常总是比在数量较少的大型计算机上进行相同数量的CPU /内存/ IO便宜。
更新-如果我修补服务器,则可能会使服务不稳定,需要重新启动或需要一些停机时间。如果我有4台服务器运行相同的服务器,则可以使其中一台服务器停止运行一段时间。如果修补/更新周期出错,请不要使用它。


#5 楼

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

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

这些孤立的“一项服务都已关闭”问题中的任何一项都会影响整个服务器,因此该服务器上的任何共享内容都将因必须重新启动或其他原因而受到影响。 。

一旦真正的IT专家出现并看到该服务器,他将建议将它们拆分为单独的服务器(并具有备用域控制器服务器)。

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

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

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

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

评论


+1用于命名单点故障问题。

–大卫·卡里(David Cary)
2014年11月22日在17:51

#6 楼

如果一个人试图让一台机器同时完成两个工作,那么机器的某些部分将需要较大但以相同的速度运行,某些部分可以保持相同的大小但需要运行得更快,而另一些则需要更大。更快。将小型计算机的角色合并为大型计算机,或将大型计算机的角色拆分为较小计算机的意义,很大程度上取决于哪种缩放比例适用于计算机中最昂贵的部分。如果将太多机器的工作负荷组合成一个巨大的庞然大物,那么成本将由需要更大,更快地处理增加的工作负荷的事物所决定。即使这些东西的成本在速度和大小方面是线性的,将工作量加倍也会使处理它的机器成本增加一倍以上。速度提高到一定点这一事实会导致(远远超过)线性成本增加,从而扩大了影响。根据要完成的工作类型,一台结合了两个工作负载的机器可能获得的内存不足两倍,或者运行速度不到两倍。另一方面,机器要做的任务越多,内存和速度要求随工作负载线性扩展的程度就越大。除此之外,每增加一倍的工作量,相对成本的增加就越大。