分布式搜索系统设计要求


让我们确定分布式搜索系统的要求并概述我们需要的资源。

要求

让我们了解分布式搜索系统的功能和非功能需求。

功能需求

以下是一个分布式搜索系统的功能需求:

  • 搜索:用户应该根据他们的需求查询获得相关内容。

非功能性需求

以下是分布式搜索系统的非功能性需求:

  • 可用性:系统应该对用户高度可用。
  • 可扩展性:系统应该能够随着数据量的增加而扩展。换句话说,它应该能够索引大量数据。
  • 大数据快速搜索:无论搜索多少内容,用户都应该快速获得结果。
  • 降低成本:构建搜索系统的总体成本应该更低。

资源估算

我们来估算分布式搜索系统所需的服务器、存储和带宽的总数。我们将使用 YouTube 搜索示例来计算这些数字。

服务器数量估计

要估算服务器数量,我们需要知道每天有多少活跃用户在使用 YouTube 上的搜索功能,以及我们的单个服务器每秒可以处理多少请求。我们假设以下数字:

  • 使用搜索功能的每日活跃用户数为 300 万。
  • 单个服务器可以处理的请求数为 1,000。

使用以下公式计算所需的服务器数量:

如果三百万用户并发搜索,则同时产生三百万搜索请求。单个服务器一次处理 1,000 个请求。将 300 万除以 1,000 得到 3,000 台服务器。

存储估算

每个视频的元数据都存储在一个单独的 JSON 文档中。每个文档都由视频 ID 唯一标识。此元数据包含视频的标题、描述、频道名称和文字记录。我们假设以下数字来估算索引一个视频所需的存储空间:

  • 单个 JSON 文档的大小为 200 KB。
  • 从单个 JSON 文档中提取的唯一术语或键的数量为 1,000。
  • 向索引表中添加一个术语所需的存储空间量为 100 字节。

以下公式用于计算索引一个视频所需的存储空间:

在 YouTube 上索引一个视频所需的总存储空间

每个 JSON 文档的存储量 (KB)每个文档的条款数量每学期存储(字节)每个视频的总存储量 (KB)
2001000100300

在上表中,我们计算了索引一个视频所需的存储空间。我们已经看到每个视频所需的总存储空间为 300 KB。假设平均每天在 YouTube 上上传的视频数量为 6,000,我们来计算索引每天上传的视频所需的总存储空间。以下公式用于计算将一天内上传到 YouTube 的视频编入索引所需的存储空间:

每天在 YouTube 上索引视频所需的总存储空间

每天的视频数量每个视频的总存储量 (KB)每天总存储量(GB)
60003001.8

将每天上传到 YouTube 的 6,000 个视频编入索引所需的总存储空间为 1.8 GB。此存储要求只是 YouTube 的估计值。如果我们将分布式搜索系统作为服务提供给多个租户,存储需求将会增加。

总结分布式搜索系统对每天上传到 YouTube 的视频的存储需求

带宽估计

每次搜索请求时,数据都会在用户和服务器之间传输。我们估计服务器上传入流量和服务器传出流量所需的带宽。以下是计算所需带宽的公式:

传入流量

为了估计传入流量带宽,我们假设以下数字:

  • 每天的搜索请求数为 1.5 亿。
  • 搜索查询大小为 100 字节。

我们可以使用上面给出的公式来计算传入流量所需的带宽。

每秒传入搜索查询所需的带宽

每秒请求数查询大小(字节)带宽 (Mb/s)
1736.11100F1.39

传出流量

传出流量是服务器根据搜索请求返回给用户的响应。我们假设针对搜索查询的建议视频数量为 80,并且一个建议的大小为 50 字节。建议由视频 ID 的有序列表组成。

为了估计传出流量带宽,我们假设以下数字:

  • 每天的搜索请求数为 1.5 亿。
  • 响应大小为 4,000 字节。

我们可以使用相同的公式来计算传出流量所需的带宽。

每秒传出流量所需的带宽

每秒请求数查询大小(字节)带宽 (Mb/s)1736.114000F55.56

相关信息

带宽要求相对适中,因为我们假设的是文本结果。许多搜索服务可以返回小缩略图和其他媒体来增强搜索页面。每页的带宽需求有意设置得较低,以便该服务可以向客户端提供近乎实时的结果。

我们将使用的积木

我们的设计需要分布式存储。因此,我们可以使用之前讨论过的构建块blob store该索引之后添加 来存储要索引的数据和索引本身。我们将使用通用术语,即“分布式存储”,而不是特定术语“blob 存储”。

最后,我们解释了搜索系统的要求。我们进行了资源估算。最后,我们提到了我们将在分布式搜索系统设计中使用的构建块。