# 6.1 引言
<!-- source: p0487 -->

> 谁都能造出一个快 CPU，诀窍在于造出一个快系统。
>
> ——Seymour Cray，被誉为超级计算机之父

**仓库级计算机**（warehouse-scale computer，WSC）是数十亿人每天使用的互联网服务的基础：搜索、社交网络、在线地图、视频流、网上购物、在线游戏、软件即服务，等等。智能手机成为随处可用、始终在线的瘦客户端设备，使我们必须建立可扩展、可靠且具有成本效益的 WSC，作为这些极受欢迎的互联网服务的后端平台。这也催生了云计算：以公共服务的方式提供计算硬件、软件，乃至数据，任何持有信用卡的人都可以使用。

WSC 看起来或许只是大型集群，但我们将看到，其体系结构和运作方式大有不同。要以合理成本和良好性能达到每座 WSC 超过 50,000 台服务器的规模，就必须协同设计它的各个方面，包括硬件、软件、网络，甚至容纳 WSC 的建筑物中的配电与冷却基础设施。在这个前沿领域，WSC 是超级计算机的现代继承者，Seymour Cray 因而也成了今天 WSC 体系结构设计者的先驱。Cray 的超级计算机同样采用纵向协同设计，支持科学家与工程师在其他地方无法完成的高性能计算（HPC）。不过，Cray 的计算机价格极高，只有少数公司负担得起。今天的 WSC 如同一台巨大的机器，造价达数亿美元，却能以令人惊讶的成本效益，为广泛用户支持多种计算。因此，可以说，WSC 在当今社会所起的作用，比过去 Cray 超级计算机的作用更为重要。

WSC 设计者与服务器设计者有许多共同目标和要求：

- **性价比。** 每美元能够完成多少工作至关重要，部分原因在于规模：将一组 WSC 的成本降低几个百分点，就可能节省数千万美元。
- **能效。** 除了离开 WSC 的光子之外，它们基本上是封闭系统，几乎所有消耗的能量最终都变成必须排出的热量。因此，峰值功率和实际功耗决定了配电与冷却系统的成本，也决定了一座 WSC 能够容纳的硬件数量，进而决定其峰值性能和用户容量。建设 WSC 的大部分基础设施成本都花在供电与冷却上。此外，能效也是履行环境责任的重要部分。
- **通过冗余实现可信赖性。** 互联网服务长期运行且全天候使用，这意味着 WSC 中的硬件与软件必须共同提供至少 99.99% 的可用性，也就是“四个九”；每年的服务中断时间必须少于 1 小时。冗余是<!-- source: p0488 --> WSC 和服务器实现可信赖性的关键。服务器设计者常常增加硬件并承担更高成本，以达到高可用性；WSC 设计者则依靠大量具有成本效益的服务器，通过网络连接，由软件管理冗余。除了 WSC 内部的局部冗余，组织还需要多座互为冗余的 WSC，以掩盖可能导致整座 WSC 失效的事件。事实上，虽然每项云服务都需要至少 99.99% 的可用性，但 Amazon、Google、Microsoft 这样的互联网公司，整体的可信赖性还必须更高。如果其中一家公司每年完全离线 1 小时，也就是整体可用性只有 99.99%，就会成为头版新闻。多座 WSC 还有一个好处：降低广泛部署的服务的访问延迟。

- **网络 I/O。** 服务器设计者必须提供良好的外部网络连接，WSC 设计者也一样。后者还面临另一项挑战：提供高带宽、且往往经过定制的内部网络，用来在一座 WSC 内实现分布式可靠服务，并保持多座 WSC 之间的数据一致性。

当然，也有一些 WSC 特性不同于服务器体系结构：

- **种类繁多的工作负载。** 通过云计算，WSC 承载各种类型和规模的工作负载。其中有些是单节点数据库、科学计算等传统服务器应用；但 WSC 也承载规模最大的分布式工作负载，包括社交网络与搜索这样的交互式服务、视频流平台，以及计算这些服务所需元数据的大规模并行批处理程序。机器学习（ML）计算在 WSC 计算周期中所占的比例持续提高，既包括在线服务的推理负载，也包括批处理的训练负载。
- **充足的并行性。** 服务器设计者会担心：目标市场中的应用是否有足够并发性，值得配置这么多并行硬件？为利用这种并行性所需的通信硬件是否过于昂贵？WSC 设计者没有这样的顾虑。首先，随着更多用户和工作负载迁移到云平台，进程级并行性十分充足。其次，批处理应用通常需要对大量不同数据集进行独立处理，因此能够利用数据级并行性。这与第 4 章介绍的数据级并行性相似，但这次针对的是存储设备上的海量数据集，而不是内存中较小的数据集，因此可以用多台机器以分布式方式加以利用。最后，交互式互联网服务面向成千上万乃至数百万彼此独立的用户。不同用户的读写很少相互依赖，因此交互式服务可以利用请求级并行性：大量独立请求并行推进，几乎不需要通信或同步。

<!-- source: p0489 -->

- **运行成本不可忽视。** 服务器设计者通常忽略服务器的运行成本，认为它与购买成本相比微不足道。WSC 规模巨大，寿命也更长，建筑物以及电气与冷却基础设施通常按 10–20 年摊销。因此，运行成本很快就会累积起来：在 10 年期间，能耗、配电和冷却可能占 WSC 成本的 30% 以上。
- **选址很重要。** 建设 WSC 的第一步是建一座仓库。问题在于建在哪里。房地产经纪人强调地段，但 WSC 的选址意味着：能获得低价电力，有水或温度适宜的空气用于冷却，靠近互联网骨干光纤，附近有人能够到 WSC 工作，而且地震、洪水、飓风等自然灾害风险较低。更直接的考虑是土地成本，以及是否有足够空间供 WSC 扩建。对于拥有许多 WSC 的公司，还要考虑在地理上靠近现有或未来互联网用户群，以降低访问互联网服务的延迟。其他因素包括税收、不动产成本、社会因素（人们有时希望设施设在本国）、数据主权（某些司法辖区要求数据本地托管）、网络的成本与可靠性、电力的成本与来源（例如水电还是煤电）、天气（越凉爽越便宜），以及整体互联网连通性。
- **在各种利用率下都高效计算。** 服务器设计者通常在成本预算内追求峰值性能，关心功率主要是为了不超过机箱的散热能力。6.7 节将说明，由于多种原因，WSC 服务器很少满负载运行。高利用率很难实现，因为它可能增加外部用户感受到的延迟，或加剧共享 WSC 计算、存储和网络组件的工作负载之间的干扰。既然运行成本不可忽略，WSC 服务器就必须在低、中、高各种利用率下都高效计算。
- **规模，以及规模带来的机遇和问题。** 极端规模的计算机往往极其昂贵，因为它们需要定制硬件，而数量又少，定制成本难以有效摊销。不过，一次购买数千台服务器，就能获得可观的批量折扣。WSC 的内部规模如此之大，即使 WSC 本身数量不多，也能产生规模经济。这种规模经济催生了商业云计算：WSC 较低的单位成本，使公司能够以低于外部用户自行部署的成本出租服务器，同时仍然获利。100,000 台服务器的另一面则是失效。图 6.1 列出了一个只有 2400 台服务器的小型集群发生的中断与异常。即使一台服务器的平均失效前时间（MTTF）长达惊人的 25 年（200,000 小时），WSC 设计者也需要按每天五台服务器失效来设计。图 6.1 给出的硬盘年失效率为 2%–10%。

> **译注：** 如果按同段的 100,000 台、独立且均匀失效的口径估算，每天预期失效数为 \(100000/200000\times24=12\)，与原文的五台不同；原文未说明这里是否另用了较小的服务器规模。

<!-- source: p0490 -->

| 第一年大致发生次数 | 原因 | 后果 |
| --- | --- | --- |
| 1 或 2 | 公共电网故障 | 整座 WSC 失去市电；若 UPS 与发电机工作正常，WSC 不会停机。发电机约有 99% 的时间能够正常工作 |
| 4 | 集群升级 | 为升级基础设施而计划停机，常见原因是不断变化的网络需求，例如重新布线、升级交换机固件等。每发生一次非计划停机，约有九次计划内的集群停机 |
| 以下五类合计数千次 | 硬盘失效 | 硬盘年失效率为 2%–10%（Pinheiro 等，2007） |
| 同上 | 磁盘变慢 | 仍能运行，但速度降至正常的 1/10–1/20 |
| 同上 | 内存故障 | 每年发生一次不可纠正的 DRAM 错误（Schroeder 等，2009） |
| 同上 | 机器配置错误 | 配置问题导致约 30% 的服务中断（Barroso 与 Hölzle，2009） |
| 同上 | 不稳定的机器 | 1% 的服务器每周重启不止一次（Barroso 与 Hölzle，2009） |
| 5000 | 单台服务器崩溃 | 机器重启通常耗时约 5 分钟，原因可能是软件或硬件问题 |
{#fig-6.1 .wide .expand num="6.1" caption="一个包含 2400 台服务器的新集群，在第一年发生的中断与异常及其大致频率。根据 Barroso, L.A., 2010. Warehouse Scale Computing [keynote address]. In Proceedings of ACM SIGMOD, June 8–10, 2010, Indianapolis, IN 整理。"}

假设每台服务器有两块硬盘，年失效率为 4%，那么对于 100,000 台服务器，WSC 设计者应预期平均每小时就有一块硬盘失效。不过，如图 6.1 所示，软件失效远多于硬件失效。因此，系统设计必须能够承受软件缺陷导致的服务器崩溃，这甚至比磁盘失效还频繁。在拥有数万台服务器的大型设施中，WSC 运维人员会非常熟练地更换硬盘，所以磁盘失效对 WSC 造成的成本远低于小型数据中心。DRAM 也是如此。如果能买到价格更低、可靠性再差一些的组件，WSC 甚至可能合理地使用它们。

**例题**

计算运行在图 6.1 所示 2400 台服务器上的一个服务的可用性。与真实 WSC 中的服务不同，本例的服务不能容忍硬件或软件失效。假设重启软件需要 5 分钟，修复硬件需要 1 小时。

**解答**

可以计算各类组件失效导致的停机时间，来估计服务可用性。保守地取图 6.1 每一类的最低次数，并把其中 1000 次停机平均分给四类组件。我们忽略速度变慢的磁盘——它们是这 1000 次停机中的第五类——因为<!-- source: p0491 -->它们损害性能，却不影响可用性。也忽略公共电网故障，因为不间断电源（UPS）系统掩盖了其中 99% 的故障。

$$
\begin{aligned}
\text{服务停机小时数}
&=(4+250+250+250)\times1\,\mathrm{h}
 +(250+5000)\times5\,\mathrm{min}\\
&=754+438=1192\,\mathrm{h}
\end{aligned}
$$

一年有 \(365\times24=8760\) 小时，因此可用性为：

$$
\text{系统可用性}
=\frac{8760-1192}{8760}
=\frac{7568}{8760}
=86\%
$$

如果不使用软件冗余来掩盖这些大量中断，这 2400 台服务器上的服务平均每周就会停机一天，一个“九”也达不到，远低于 WSC 追求的 99.99% 可用性。

**计算机集群**是 WSC 的前身。集群由独立计算机构成，用局域网（LAN）和交换机连接。20 世纪 90 年代末，集群先在科学计算中流行起来，随后进入互联网服务领域，因为对于不需要密集通信的工作负载，它们比共享内存多处理器更具成本效益。共享内存多处理器则是第 5 章介绍的多核计算机的前身。因此，一种看法是，WSC 不过是由数百台服务器组成的集群，顺理成章地演进为数万台服务器。

不过，传统集群的运营者一般从组织的多个部门收集机器和第三方软件，集中运行。他们主要关注把众多服务整合到较少机器上，并将服务相互隔离，以保护敏感信息。因此，为了服务组织内部不同客户，容纳这些集群的设施往往具有很强的硬件和软件异构性。WSC 设计者则会定制第三方软件，或开发自己的软件，硬件也同质得多。总体而言，WSC 的目标是让仓库中的软硬件像一台计算机那样工作，通常运行多种应用。传统集群的最大成本往往是维护人员；设计良好的 WSC 中，服务器硬件是最大成本，人员成本则从最高项降到最低项。集群通常也没有 WSC 的规模，因此无法获得前面所说的规模经济。

WSC 在规模和成本上也类似高性能计算系统：有些 HPC 系统拥有一百万个处理器，造价数亿美元。HPC 系统历来采用同质体系结构，其处理器更强，节点间网络延迟也远低于 WSC，因为 HPC 应用的相互依赖更强，通信更频繁。HPC 系统针对少数长期运行的任务进行优化，让服务器保持满负载，甚至一次持续<!-- source: p0492 -->数周。WSC 则旨在支持各种工作负载，包括许多负载变化的交互式服务。WSC 的服务器利用率在 10%–80% 之间，每天都会随时间变化。WSC 的硬件异构性更高，因为它们逐步填充硬件，并引入多代设备，以更好地服务不同工作负载。分布式存储是 WSC 体系结构的重要组成部分，因为 WSC 工作负载比科学计算更加密集地使用存储与 I/O。HPC 系统常用的检查点和恢复等容错技术，对许多 WSC 工作负载并不实用。不过，近来 WSC 引入机器学习领域专用加速器（DSA），以及支持在数百到数千个加速器之间执行长时间训练任务的网络，使 WSC 与 HPC 体系结构日益接近。较新 WSC 的很大一部分，就是为容纳机器学习超级计算机而设计的。
