大型网站如何处理每天数百万的访问量?
网站令人惊讶的一点在于,在某些情况下,一台非常小的计算机可以处理大量访问者。例如,假设你有一个包含大量静态页面(在这里,“静态”意味着每个人在浏览任何页面时看到的都是同一版本)的简单网站。如果你采用运行Windows NT或Linux的普通500MHz赛扬计算机,该计算机中加载了Apache Web服务器,并且你用T3线路(传输速率为4500万位/秒)将此计算机连接到互联网,则你每天可以处理数十万访问者。许多ISP以每月1,000美元或更低的价格出租类似的专用计算机配置。此配置非常有效,除非存在以下情况:
- 你每天需要处理数百万访问者。
- 这台唯一的计算机出现故障(在这种情况下,网站将关闭,直到安装并配置了一台新的计算机)。
- 页面非常大或极其复杂。
- 页面需要针对每个用户动态更改。
- 需要执行后端处理来创建页面内容或处理页面请求。
因为大多数大型网站满足上述所有条件,所以它们需要大得多的基础结构。
有三种主要策略用于处理负载:
- 网站可以购买一台具有高处理能力、大容量内存、足够磁盘空间和冗余功能的巨型计算机。
- 网站可以在多台计算机之间分配负载。
- 网站可以使用以上两个策略的某种组合形式。
如果你访问的网站在你每次访问时具有不同的URL(例如www1.xyz.com、www2.xyz.com、www3.xyz.com等),则说明该网站在前端使用了第二种方法。通常,网站拥有很多台独立的计算机,并且每台计算机都运行Web服务器软件。它们都可以访问网站页面的相同副本。传入的页面请求以下列两种方式之一在所有计算机之间分布:
- 网站的域名服务器(Domain Name Server, DNS)可以分配负载。DNS是将域名转换为IP地址的互联网服务。每次发出针对Web服务器的请求时,DNS都会循环选择可用的IP地址以均分负载。各台服务器对该网站的相同网页集具有共同访问权。
- 负载均衡交换机可以分配负载。所有针对该网站的请求都将到达一台计算机,该计算机随后将请求传递给其中一个可用服务器。交换机可以找到负载最低的服务器,这样所有服务器都将完成相同数量的工作。这正是博闻网用于其服务器的方法。负载均衡器在三个不同的Web服务器之间分配负载。其中一个服务器出现故障时,不会对该网站产生任何影响。
这种冗余方法的优点在于,任一计算机出现故障时都不会产生问题——其他计算机会承担它的负载。另外,这种方法还容易以递增方式增加处理能力。其缺点在于,如果需要进行事务处理,则这些计算机仍然必须同某种中央数据库通信。
Microsoft的TerraServer采用“单台大型计算机”方法。Terraserver存储了数千GB的卫星成像数据,并且处理针对这些信息的数百万个请求。该网站使用巨型企业级计算机来处理负载。例如,TerraServer使用的单台Digital AlphaServer 8400具有8个440MHz64位处理器和10GB经校验并纠正了错误的RAM。