在AWS S3上搜索1B页面,为1000美元/月,以锈蚀和态度制成

2021-05-07 19:45:44

这篇博客帖子与我们的共同爬行演示和一杯Vin de Loire配对。

六个月前,我们创立了QuickWit,目的是建立一种新的全文搜索引擎,这将在非常大的数据集上成本高10倍。我们如何打算这样做?我们的搜索引擎将从Amazon S3中搜索数据,实现真正的解耦和存储。

对于诸如Presto或Spark等分布式计算发动机,解耦计算和存储是一段时间的现实。但是,对于搜索引擎来说,这是一种新的趋势。

5月2020年5月,亚马逊Elasticsearch服务发布了UltraWarm,一个解决方案,用于在亚马逊S3中直接搜索,该解决方案根据这次AWS在线技术谈判在几分钟内搜索PetAbytes的数据。

在3月2021年,Elastic还发布了冻结层搜索,使Elasticsearch用户能够在十几个秒秒数中安装和开始在存储的Amazon S3上搜索索引的可能性.AMAZON和弹性都基于一些狡猾的缓存层建立了解决方案,以搜索Elasticsearch索引并进行通信。谨慎地对他们的解决方案的表现。另一方面,我们有奢侈品从地上设计搜索引擎,帮助我们提供靠近驻留在SSD磁盘上的索引提供的性能。

我们的禁欲追求真正独立的计算和存储,使我们成为一个完全无状态的解决方案。我们的解决方案不仅可以更具成本效益,但我们的搜索集群也更容易运行。可以在几秒钟内添加或删除搜索实例。多租户搜索变得微不足道。

我们正在开发发动机,我们开始与潜在用户进行对话。通常,随着我们阐明未来解决方案的优点,我们的索赔得到了健康的怀疑。

让'是诚实的," 10倍更便宜&​​#34;在数据库世界中有一个糟糕的电视氛围,并且在数据库世界中存在大胆的表现索赔。

因此,我们开始根据大型数据集建立一个引人注目的演示。常见的爬网语料库,由几亿网页组成,出现成为最佳候选人。我们的演示很简单:用户类型短语的开头和应用程序在我们索引的10亿个网页中查找最常见的形容词或名词短语。

该演示如何工作?在高级别,此演示建立在以下组件之上:

从匹配片段中提取形容词和名词短语的NLP服务器,并计算最常见的事件

此演示的索引包含10亿英文页面从最新的常见爬网快照中提取。我们通过Whatlang确定了使用优秀的自然语言检测库的页面。我们的索引引擎在单个Amazon EC2实例(M5D.8xlarge)上rutr ran写入大约24小时,以生成存储在Amazon S3上的6.8 TB索引。我们对考虑到发动机的吞吐量也满意,考虑到发动机还下载和解压缩(GZIP)数千次常见的爬网湿文件,在每个页面上执行语言检测,源于语料库中的每个单词,最后构建并上传了索引。该指数分为180个碎片,以允许并行生产和消耗。 QuickWit通常根据碎片的元数据进行碎片修剪,不幸的是常见的爬行并没有提供这样的机会。

我们的搜索引擎由无状态搜索实例组成,只需从Amazon S3直接运行我们的代码以获取和数据。它们不会在其本地磁盘上维护索引或任何其他数据结构的部分副本。这使得缩放和操作群集,或者使失败变得简单。当查询被提交到群集时,一个实例在构成群集的实例中随机选择,成为查询的协调器。协调器确定查询的相关碎片列表,均匀地分配对等搜索实例之间的工作,并等待部分结果返回。协调器合并并对这些部分结果进行分类并将其返回给客户端。对于此演示,我们将在两个Amazon EC2实例(C5N.2xlarge)上部署我们的搜索引擎。这些实例具有良好的CPU,但也提供了良好的网络性能,这是每个实例对Amazon S3发出大量并行请求的关键,并且往往受网络绑定。

当被问及搜索引擎的性能和延迟时,我们的答案总是相同的:“它取决于查询。”

对于包含五个或更少的查询术语的“简单”查询,并且仅限于前一百个点击或更少,我们的搜索引擎能够在一到两秒钟内回答。例如,查询“+ barack和+ obama”限制为200次点击的延迟是平均1.5秒。当索引和查询允许碎片修剪时,我们有时能够在不到一秒钟内回答。

但是,对于需要更多带宽和处理时间的更复杂查询,增加了延迟。例如,对于此演示,我们不仅对包含所有查询条款的网页感兴趣,而且还有那些以正确的订单有关的网页 - 认为“巴拉克奥巴马是总统”与“总统是巴拉克奥巴马”。在信息检索Lingo中,这些类型的查询称为短语查询,并且由大多数搜索引擎支持,具有双引号语法。在我们的情况下,我们需要获取一个附加数据结构,该数据结构将每个令牌的位置进行编码,以处理短语查询。此外,对于需要这个演示,我们不会将自己限制在第一个结果。相反,我们实际上想要检索与短语查询匹配的所有网页,并且对于一些非常频繁的术语,这可能是很多页面。因此,我们已经盖住了每分碎片返回的结果数量为1,000。短语查询“Barack Obama是”达到该帽,并在12到15秒内返回18,000个片段。

我们计划在即将到来的几个月内伴随着博客文章的搜索引擎的适当基准。

NLP服务器从搜索引擎中流出高达18,000个匹配的片段,并通过称为模式的Python库推动它们以识别和提取形容词或名词短语。服务器计算每次发生,并且当处理所有片段时,它将最常见的部分返回到前端,然后能够显示一个单词云。

我们估计,我们的实验成本每月少于1,000美元。将索引存储在Amazon S3上的费用$ 160每月,并部署两个搜索实例的小池,每月$ 650。我们还颁发了一次性,45美元的费用,用于索引数据集。在未来,我们应该能够通过在Amazon Graviton实例上部署我们的代码进一步降低成本。

在接下来的几个月里,我们将开始开放我们的搜索引擎。我们将伴随着一系列博客帖子,解释我们独特的技术和分享我们的视野和路线图。

与此同时,如果您有任何疑问,请考虑我们的搜索引擎的有趣用例,或者有兴趣成为Beta用户,请与我们联系[email protected]