大型网站需要哪些硬件和软件考虑才能正确管理 1000 多台服务器?

大型网站需要哪些硬件和软件考虑才能正确管理 1000 多台服务器?

抱歉,我问了这么高水平的问题。我了解服务器负载平衡的基本知识,但管理 30,000 台服务器的概念对我来说有点陌生。这真的只是平衡 2 或 3 台服务器的概念,但规模扩大了 10,000 倍吗?

这与 memcached、sql/mysql、搜索引擎等有何关系?

它是一个具有“控制”服务器和在此基础上提供数据的从属服务器的层次结构系统吗?如何处理冗余?

谢谢您对此事的文章提供的任何信息或指导。

编辑谢谢大家的回复。我的帖子被关闭了,但我修改了标题,希望它能重新打开,因为我发现这些超高级数据解决方案所涉及的问题解决过程非常有趣,而且我目前正在构建一个需要一些基本负载平衡的 API,因此有这个问题。

答案1

Google 服务器上使用的大部分软件堆栈都是内部开发的。为了减轻不可避免的硬件故障的影响,软件被设计为具有容错能力。

来源:谷歌平台

读完这篇文章后,我猜想这与使用在 Linux 上自行开发的内部软件栈在少数服务器(扩展到 1000 多台服务器)之间平衡负载的概念相同。例如政府金融服务局(谷歌文件系统),BigTable- 基于GFS构建的结构化存储系统

链接描述了它们如何平衡网络负载。

他们使用负载平衡交换机分配负载。网站的所有请求都到达一台机器,然后该机器将请求传递给其中一台可用的服务器。交换机可以从服务器中找出哪台服务器负载最小,因此所有服务器都在做同等的工作量。

Google 的网络拓扑如下:

当客户端计算机尝试连接到 Google 时,多个 DNS 服务器会通过轮询策略将 www.google.com 解析为多个 IP 地址。此外,这充当第一级负载平衡,并将客户端定向到不同的 Google 集群。Google 集群有数千台服务器,一旦客户端连接到服务器,就会进行额外的负载平衡,将查询发送到负载最少的 Web 服务器。

答案2

这里最大的问题是,如果软件不是为扩展而设计的,它如何能做到呢?例如,Facebook 目前最大的限制之一就是对 MySQL 的依赖——他们可以通过向其投入越来越多的机器来解决这个问题,但是他们自己的工程师称之为“比死亡更糟糕的命运”。

通常,您需要能够平衡请求负载——许多项目(无论是开源项目还是其他项目)都是这样设计的。但这会带来开销,包括写入日志、延迟写入和“最终一致”架构。换句话说,扩展并不便宜。

因此,像 Web 服务器这样提供静态内容的东西很容易实现并行化。Memcached 和其他缓存系统很容易实现负载平衡。但是,如何改变单点故障?您的单个大型关系数据库如何扩展?文件存储又如何?从本质上讲,这是一个完整的研究分支……不是一个问题就能回答的问题。

答案3

我认为相同的概念应该是相同的,关键点在于如何在可用资源之间分配负载和数据以及如何定位数据。

一种方法是服务器的地理分布。每个用户将被引导到最近的服务器。

可以使用类似注册表的服务来查找所请求的数据。

想想 DNS 服务的实现。它拥有一个非常庞大的分布式数据库。根节点将用户引导到其他较低级别的节点,依此类推,直到到达可以回答您的查询的负责节点。

相关内容