分布式搜索系统设计要求
让我们确定分布式搜索系统的要求并概述我们需要的资源。
要求
让我们了解分布式搜索系统的功能和非功能需求。
功能需求
以下是一个分布式搜索系统的功能需求:
- 搜索:用户应该根据他们的需求查询获得相关内容。
非功能性需求
以下是分布式搜索系统的非功能性需求:
- 可用性:系统应该对用户高度可用。
- 可扩展性:系统应该能够随着数据量的增加而扩展。换句话说,它应该能够索引大量数据。
- 大数据快速搜索:无论搜索多少内容,用户都应该快速获得结果。
- 降低成本:构建搜索系统的总体成本应该更低。
资源估算
我们来估算分布式搜索系统所需的服务器、存储和带宽的总数。我们将使用 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) |
---|---|---|---|
200 | 1000 | 100 | 300 |
在上表中,我们计算了索引一个视频所需的存储空间。我们已经看到每个视频所需的总存储空间为 300 KB。假设平均每天在 YouTube 上上传的视频数量为 6,000,我们来计算索引每天上传的视频所需的总存储空间。以下公式用于计算将一天内上传到 YouTube 的视频编入索引所需的存储空间:
每天在 YouTube 上索引视频所需的总存储空间
每天的视频数量 | 每个视频的总存储量 (KB) | 每天总存储量(GB) |
---|---|---|
6000 | 300 | 1.8 |
将每天上传到 YouTube 的 6,000 个视频编入索引所需的总存储空间为 1.8 GB。此存储要求只是 YouTube 的估计值。如果我们将分布式搜索系统作为服务提供给多个租户,存储需求将会增加。
总结分布式搜索系统对每天上传到 YouTube 的视频的存储需求
带宽估计
每次搜索请求时,数据都会在用户和服务器之间传输。我们估计服务器上传入流量和服务器传出流量所需的带宽。以下是计算所需带宽的公式:
传入流量
为了估计传入流量带宽,我们假设以下数字:
- 每天的搜索请求数为 1.5 亿。
- 搜索查询大小为 100 字节。
我们可以使用上面给出的公式来计算传入流量所需的带宽。
每秒传入搜索查询所需的带宽
每秒请求数 | 查询大小(字节) | 带宽 (Mb/s) |
---|---|---|
1736.11 | 100 | F1.39 |
传出流量
传出流量是服务器根据搜索请求返回给用户的响应。我们假设针对搜索查询的建议视频数量为 80,并且一个建议的大小为 50 字节。建议由视频 ID 的有序列表组成。
为了估计传出流量带宽,我们假设以下数字:
- 每天的搜索请求数为 1.5 亿。
- 响应大小为 4,000 字节。
我们可以使用相同的公式来计算传出流量所需的带宽。
每秒传出流量所需的带宽
每秒请求数查询大小(字节)带宽 (Mb/s)1736.114000F55.56
相关信息
带宽要求相对适中,因为我们假设的是文本结果。许多搜索服务可以返回小缩略图和其他媒体来增强搜索页面。每页的带宽需求有意设置得较低,以便该服务可以向客户端提供近乎实时的结果。
我们将使用的积木
我们的设计需要分布式存储。因此,我们可以使用之前讨论过的构建块blob store该索引之后添加 来存储要索引的数据和索引本身。我们将使用通用术语,即“分布式存储”,而不是特定术语“blob 存储”。
最后,我们解释了搜索系统的要求。我们进行了资源估算。最后,我们提到了我们将在分布式搜索系统设计中使用的构建块。