其他分享
首页 > 其他分享> > 如何在项目重构建具有可扩展的搜索功能?使用Kubernetes 、Memphis 、Elasticsearch 搭建可扩展的搜索框架

如何在项目重构建具有可扩展的搜索功能?使用Kubernetes 、Memphis 、Elasticsearch 搭建可扩展的搜索框架

作者:互联网

项目搜索功能已经是目前项目中不可或缺的重要功能,构建一款易于扩展的搜索功能,已经成为项目中很重要的一环,今天我们将给大家介绍一个用多种插件构建的可易于扩展的搜索架构,快一起来看看吧
 

搜索架构的当前挑战

对于大小和复杂性各不相同的大多数程序而言,构建可扩展的搜索架构都具有挑战性。为了解决这个问题,有几种不同的搜索架构。

然而,由于信息技术的快速发展,新的快速增长的市场和 SaaS 应用程序的创建,现有的解决方案已不能满足所有需求。因此,需要构建一个新的高效、可扩展的架构来解决现代问题。

让我们来看看可伸缩搜索架构的开发人员目前面临的挑战。

搜索引擎和数据库之间的差异

虽然搜索引擎和关系数据库有很多共同点,但它们之间也存在一些关键差异 。

关系数据库以相互关联的表的形式存储结构化数据。它们允许您处理比搜索引擎更多的信息。然而,搜索引擎的优势在于它们可以解析非结构化数据。它们存储平面对象而不是互连的表。搜索引擎允许您通过并行化来提高数据读写操作的性能。

在关系数据库中,信息组织良好且更可靠。相反,在搜索引擎中,信息没有系统化并且不稳定,因为它的位置和内容可以不断变化。

搜索引擎易于实施且快速。但是,与数据库不同,搜索引擎需要经常更新。他们的主要目标是提供一组相关的高质量搜索结果,以快速响应客户需求。

扩展架构模式

主/副本架构

主/副本架构用于支持大量读取。它涉及将主服务器的数据复制到多个副本。与在一台服务器上仅使用一个数据副本相比,此架构允许您处理多几倍的请求。例如,如果您在三台服务器上使用三个数据副本,那么您可以处理比在一台服务器上处理一个副本多三倍的请求。

为了支持更多的写操作,您需要将数据拆分成几个更小的部分,并添加更多的 CPU 来创建这些部分。此外,扩展读写需要添加分片并在多台机器上拥有多个副本。

要实现一种跨多个副本复制主服务器数据的主/副本架构,每个分片都需要有一个接受写入的版本。其他副本使用主副本作为事实来源。存储在主分片上的日志文件通常用于同步主数据和副本。此日志文件包含主分片按顺序接收的所有写入。每个副本分片从这个日志中读取写入并在本地应用它们。

这种方法的主要缺点是在同一台机器上进行索引和搜索。由于我们需要创建数据的多个副本,因此需要复制 CPU 和内存索引。这大大增加了成本。如果您需要同时扩展索引和搜索,那么复制因子会增加并适用于更多数据,需要大量额外资源。

如果同一台计算机同时处理索引和搜索查询,那么增加索引的 CPU 和内存使用量也会对最终用户体验产生负面影响。如果最终用户产生的搜索流量急剧增加,那么用于索引的资源可能会限制应对这种流量激增的能力。

此外,这种方法限制了自动缩放功能,因为添加新副本需要从现有机器中提取数据,通常需要几个小时,并且会增加机器的额外负载。这导致您不得不大大增加架构的规模,并期望数据或查询的数量显着增加。

二进制数据结构的复制

创建可伸缩搜索架构的另一种方法是在索引任务完成后复制提交到磁盘的二进制数据结构。

这种方法避免了重复用于索引的 CPU 和内存。但是,在覆盖所有数据结构的同时,二进制文件可能会很大,从而导致一些延迟。

大多数情况下,搜索架构以不到一分钟的速度处理大量索引和搜索操作。因此,在大多数情况下,不使用这种方法。

此外,搜索引擎依赖于世代数据结构。这意味着不是单个二进制文件,而是一组文件。当一个段接收到新的索引操作时,它被存储在磁盘上的一个较小的数据结构中。新的索引操作在第 0 代中执行,直到部分文件达到一定大小并且必须与第 1 代合并。这是删除重复项和优化搜索效率所必需的。这种方法的缺点是磁盘上的所有文件都被修改了,每个副本都需要获得一个包含所有数据分片的新版本。

合并数据的过程及其复制传输将受到以下因素的影响:

搜索架构主要服务

要创建搜索架构,您应该使用三种服务:爬虫、网页处理器和索引。

  1. 爬虫是用于访问网页、获取网页上的所有链接并跟踪这些链接的机器人。这使得搜索引擎能够不断地找到新的内容。
  2. 网页处理器读取页面内容和元数据。然后,您需要将网页内容分解为更简单的形式,这些形式可以根据不同的标准进行分组,例如,按主题、关键字等。元数据包含有用的信息,例如关键字、描述等。
  3. 索引用于组织找到的信息,以便可以快速轻松地阅读。为此,您可以使用关键字和网页排名。然而,更有效的索引需要一些研究和开发。

使用 Kubernetes 设置搜索服务

Kubernetes 是一个可扩展的 Docker 容器平台,可用于创建搜索架构所需的所有服务。它允许您以这样的方式配置服务,无论为此使用什么硬件,它们都可以工作。此外,您可以根据需要单独扩展每项服务。

Kubernetes 允许您创建服务并为其分配唯一的 IP 地址。这允许服务在不创建特殊连接的情况下相互通信。此外,它还确保您的服务安全。

使用 Kubernetes 的主要好处是:

使用 Memphis 控制数据流

Memphis是一个实时数据处理平台。它允许您处理流数据并支持异步。它非常适合处理大量数据并需要编写大量复杂代码的工程师。

Memphis 平台具有高性能和容错能力。此外,它还有一个内置的监控功能,这对于故障排除非常有用和方便。

使用 Memphis 可以解决您在构建搜索架构时面临的大部分数据流控制问题。其中包括:

Memphis 使用生产者-消费者模式,并将控制您在搜索架构中使用的服务的整个数据流。

让我们列出孟菲斯的主要优势。

使用 Elasticsearch 创建搜索索引

Elasticsearch 是一个允许您创建搜索索引的应用程序。它通常用于日志分析、全文搜索、智能安全系统、商业智能、持续进程监控等。

您可以使用 API 或使用其他工具(如 Logstash)将数据作为 JSON 文档发送到 Elasticsearch。然后 Elasticsearch 自动保存文档并在聚集索引中添加指向它的链接,包括可搜索性。您还可以使用 Elasticsearch API 查找和检索文档。

Elasticsearch 提供可水平扩展的搜索并支持多线程。此外,您可以使用多个不同的搜索字段并确定哪些值是记录与搜索匹配的最佳指标的优先级。

快速文件复制

云基础设施的发展和吞吐量的增加允许索引和搜索之间更好的隔离,而不会对索引延迟产生负面影响。这使得更有效和动态的缩放成为可能。

让我们来看看可伸缩架构是如何工作的。

这种搜索架构有一系列优点。

包起来

我们弄清楚了现代的、可扩展的搜索架构是如何工作的,以及它们的优缺点是什么。我们还介绍了搜索架构包含哪些主要服务以及它们的用途。此外,本文还描述了您在开发可伸缩搜索架构时可以使用的有用工具。

标签:搜索功能,Kubernetes,Memphis,Elasticsearc
来源: