量化概要计算的数字


学习在概略计算中使用适当的数字。

为什么要使用概略计算?

分布式系统有通过网络连接的计算节点。有许多不同类型的计算节点,它们可以以许多不同的方式连接。概略计算帮助我们忽略系统的细节(至少在设计层面),并关注更重要的方面。

一些概略计算的例子可能包括:

  • 服务器可以支持的并发TCP连接数。
  • Web、数据库或缓存服务器可以处理的每秒请求数(RPS)。
  • 服务的存储需求。

在这些计算中选择不合理的数字可能导致有缺陷的设计。由于我们在许多设计问题中需要良好的估计,因此我们将在本课程中详细讨论所有相关的概念。这些概念包括:

  • 数据中心服务器的类型。
  • 不同组件的实际访问延迟。
  • 服务器可以处理的RPS的估计。
  • 带宽、服务器和存储估计的示例。

数据中心服务器的类型

数据中心没有单一类型的服务器。企业解决方案使用普通硬件以节省成本并开发可扩展的解决方案。下面,我们将讨论数据中心中常用于处理不同工作负载的服务器类型。

QQ截图20230406174803

服务器 Web、应用和存储层所需资源的近似值。Y轴是一个分类轴,包括低、中和高的数据点。

Web 服务器

为了可扩展性,Web 服务器与应用程序服务器分离。Web 服务器是负载均衡器之后的第一个接触点。数据中心有一整个机架的 Web 服务器通常处理来自客户端的 API 调用。根据提供的服务,Web 服务器的内存和存储资源可以是小到中等。但是,这样的服务器需要良好的计算资源。例如,Facebook 曾使用具有 32 GB RAM 和 500 GB 存储空间的 Web 服务器。但对于其高端计算需求,它与英特尔合作构建了定制的 16 核处理器。

提示

注意:本课程中引用的许多数字是从 Facebook 在 2011 年开源的数据中心设计中获得的。由于 Moore 定律诱导的性能减缓约在 2004 年左右,这些数字并不陈旧。

应用服务器

应用服务器运行核心应用软件和业务逻辑。

Web 服务器和应用服务器之间的区别有些模糊。

应用服务器主要提供动态内容,而 Web 服务器主要为客户端(通常是 Web 浏览器)提供静态内容。

它们可能需要大量的计算和存储资源。存储资源可以是易失性和非易失性的。Facebook 曾经使用过具有最多 256 GB RAM 和两种存储(传统旋转硬盘和闪存)的应用服务器,容量高达 6.5 TB。

存储服务器

随着互联网用户的激增,巨型服务存储的数据量增加了。此外,各种类型的数据现在被存储在不同的存储单元中。例如,YouTube 使用以下数据存储:

  1. 用于编码视频的Blob 存储
  2. 一个临时处理队列存储,可以容纳每天上传到 YouTube 进行处理的数百小时视频内容。
  3. 用于存储大量视频缩略图的专用存储称为 Bigtable
  4. 关系型数据库管理系统(RDBMS) 用于用户和视频元数据(评论、点赞、用户频道等)。

其他数据存储仍用于分析,例如 Hadoop 的 HDFS。

存储服务器主要包括结构化(例如 SQL)和非结构化(NoSQL)数据管理系统。

回到 Facebook 的例子,我们知道他们曾经使用过具有多达 120 TB 存储容量的服务器。随着使用的服务器数量增加,Facebook 能够容纳 exabytes 的存储。

一个 exabyte 是 10^18 字节。按照惯例,我们以 10 进制而不是 2 进制来衡量存储和网络带宽。然而,这些服务器的 RAM 只有 32 GB。

提示

注意: 上述服务器不是数据中心中唯一的服务器类型。组织还需要服务器来提供配置、监视、负载平衡、分析、计费、缓存等服务。

由 Facebook 开源的数字现在已经过时。在下表中,我们展示了可以在当今数据中心中使用的服务器的能力:

典型服务器规格

组件数量
插槽数2
处理器Intel Xeon X2686
核心数36 核心(72 线程)
RAM256 GB
缓存(L3)45 MB
存储容量15 TB

上面的数字受到 Amazon 裸机服务器的启发,但可能会支持更高的 RAM(高达 8 TB)、磁盘存储(每个硬盘高达 24 个,每个硬盘容量高达 20 TB,大约在 2021 年左右)和缓存内存(高达 120 MB)的更强大机器。

记住的标准数字

规划和实施服务需要付出很多努力。但是如果没有任何有关机器可以处理的工作负载类型的基本知识,就无法进行规划。延迟在决定机器可以处理多少工作负载方面起着重要作用。下表显示了一些系统设计师需要知道的重要数字,以进行资源估算。

重要的延迟

组件时间(纳秒)
L1 缓存引用0.9
L2 缓存引用2.8
L3 缓存引用12.9
主存储器引用100
用 Snzip 压缩 1KB3,000(3 微秒)
从内存顺序读取 1 MB9,000(9 微秒)
从 SSD 顺序读取 1 MB200,000(200 微秒)
同一数据中心的往返时间500,000(500 微秒)
从速度约为 1GB/秒 的 SSD 顺序读取 1 MB1,000,000(1 毫秒)
磁盘查找4,000,000(4 毫秒)
从磁盘顺序读取 1 MB2,000,000(2 毫秒)
发送数据包 SF->NYC71,000,000(71 毫秒)

除了上面列出的延迟之外,还有以每秒查询数(QPS)测量的吞吐量数字,一个典型的单服务器数据存储可以处理。

重要的速率

MySQL 处理的 QPS1000
键值存储处理的 QPS10,000
缓存服务器处理的 QPS100,000–1 M

上述数字是近似值,因为它们在很多方面都会因查询类型(范围)、机器规格、数据库设计、索引等因素而大大变化。

请求估计

本节讨论典型服务器可以处理的请求数。在服务器内,资源有限,根据客户端请求的类型,不同的资源可能会成为瓶颈。让我们了解两种类型的请求。

  • CPU 绑定请求: 这是一种限制因素是 CPU 的请求类型。

  • 内存绑定请求: 这是一种受机器内存限制的请求类型。

让我们近似计算每种类型请求的 RPS。但在此之前,我们需要假设以下内容:

  • 我们的服务器具有我们在上面定义的典型服务器的规格。
  • 操作系统和其他辅助进程已使用了总共 16 GB 的 RAM。
  • 每个工作者使用 300 MB RAM 存储来完成请求。
  • 为了简单起见,我们假设 CPU 从 RAM 中获取数据。因此,缓存系统确保所有所需内容都可供服务,而无需访问存储层。
  • 每个 CPU 绑定请求需要 200 毫秒,而内存绑定请求需要 50 毫秒才能完成。

让我们分别计算每种请求类型的 RPS。

CPU 绑定请求: 用于计算 CPU 绑定请求的 RPS 的简单公式如下:

在次计算中, 我们使用如下术语:

上面显示的计算的原理是,我们可以将一秒钟视为一个盒子,并计算有多少个小盒子(任务)可以适合大盒子内,即一些 CPU 可以在一秒钟内完成多少个任务。因此,更高数量的 CPU/线程将导致更高的 RPS。

内存绑定请求: 对于内存绑定请求,我们使用以下公式:

从上面 CPU 绑定请求的解释中继续我们的盒子比喻,我们首先计算有多少个盒子(一个服务器可以托管多少个内存绑定进程),然后计算每个更大的盒子中可以容纳多少个小盒子(任务)。 服务接收 CPU 绑定和内存绑定请求。考虑到一半的请求是 CPU 绑定的,另一半是内存绑定的,我们可以处理总共

上述计算仅是估算基本因素以了解估算 RPS 的基本因素。实际上,还有很多其他因素会发挥作用。例如,如果数据不在 RAM 中,或者如果向数据库服务器发出请求,则需要延迟才能执行磁盘查找。此外,查询类型也很重要。当然,故障、代码中的错误、节点故障、停电、网络中断等不可避免的因素也会对系统性能产生影响。

在典型的一天中,会有各种类型的请求到达,一台仅从 RAM 中提供静态内容的强大服务器可能处理多达 500k RPS。另一方面,计算密集型任务如图像处理可能只允许最多 50 RPS。

提示

注意: 实际上,容量估算是一个艰巨的问题,组织会在多年中学习如何改进它。监控系统关注我们基础设施的所有部分,以便提前警告我们服务器过载。