构建可扩展的搜索体系结构
#database #scalability #dataflow

创建可扩展的搜索体系结构是许多系统的流行而重要的任务。该任务有不同的解决方案。选择正确的一个取决于项目的要求。

有时,随着项目的增长及其需求的变化,您可能会遇到新问题,而您正在使用的搜索体系结构无法解决这些问题。例如,当增加数据量(包括搜索中的同义词,添加多语言搜索等)时。在这种情况下,您需要考虑创建一个新的,更高效,更可扩展的搜索体系结构。

搜索体系结构必须支持大多数用例所需的快速读写缩放。

在本文中,我们将讨论有效的搜索体系结构必须解决的主要挑战。我们还将学习实现此类体系结构的主要方法以及可以使用哪些工具来实现此目的。最后,我们将告诉您如何加快搜索引擎。

搜索体系结构的当前挑战
对于大多数不同大小和复杂性的程序来说,构建可扩展的搜索体系结构是一个挑战。为了解决它,有几种不同的搜索体系结构。

然而,由于信息技术的快速发展,新的快速增长的市场以及SaaS应用程序的创建,现有的解决方案无法再满足所有要求。因此,有必要构建一个可以解决现代问题的新有效的可扩展体系结构。

让我们看一下可扩展搜索体系结构的开发人员当前面临的挑战。

1. 动态可伸缩性。系统收到的搜索查询数量可能会因不同的事件而变化很大。有时,与平均每日流量相比,流量的数量可能会增加数十倍。为了有效地处理查询,搜索引擎必须能够预测交通增长并扩展其基础架构。重要的是要在不到一分钟的时间内添加和卸下机器,并在新机器可用之前暂时处理流量。动态可伸缩性节省了成本,同时为搜索引擎创造性地使用新的机会。

2. 动态数量的碎片数量。系统的性能及其扩展能力取决于此指标。为了获得搜索引擎的最佳性能,该数字应该是动态的。为了具有最佳性能和扩展能力,重要的是能够自动调整此值。

3. 搜索和索引的分离。在查询量和数据卷中同时缩放是搜索引擎的挑战。搜索或索引功能的增加需要更多的资源,这可能使基础设施成本很高。为了获得搜索引擎的最佳性能并避免索引对搜索的负面影响,您应该分别扩展索引和搜索。

4. 在网络上的并行数据传输。在过去十年中,网络上的数据传输速度增长了约100倍,并继续进一步增长。同时,处理器和数据存储的发展并不快。为了有效的缩放,这种情况需要创建以更大比例的并行化传输数据的方式。

搜索引擎和数据库之间的差异
尽管搜索引擎和关系数据库有很多共同点,但它们之间也有关键的differences

关系数据库以相互关联的表格存储结构化数据。它们使您可以处理比搜索引擎更多的信息。但是,搜索引擎的优点是它们可以解析非结构化数据。他们存储平坦的对象而不是互连表。搜索引擎使您可以通过使数据并行化数据读取和写作操作的性能。

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

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

缩放结构模式:

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

要支持更多的写操作,您需要将数据分为几个较小的部分,并添加更多CPU来创建这些零件。缩放读取和写入需要添加碎片并在多台机器上有多个副本。

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

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

如果相同的计算机处理索引和搜索查询,则CPU的增加和索引的内存使用量也会对最终用户体验产生负面影响。如果最终用户生成的搜索流量大大增加,则用于索引的资源可能会限制考虑此交通激增的能力。

此外,此方法限制了自动缩放功能,因为添加新副本需要从现有计算机中提取数据,通常需要几个小时,并在计算机上增加了额外的负载。这会导致您必须大大增加架构的规模并预计数据或查询会大大增加。

二进制数据结构的复制
创建可扩展搜索体系结构的另一种方法是在完成索引任务后复制致力于磁盘的二进制数据结构。

此方法避免复制用于索引的CPU和内存。但是,虽然覆盖所有数据结构,但二进制文件可能很大,导致一定的延迟。

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

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

合并数据及其复制转移的过程将受到此类因素的影响:

  • 碎片尺寸确定所有层合并后要传输的最大数据量。

- 世代的数量。这将直接影响所有世代的合并频率(我们必须传输最大数据大小的次数)。

搜索架构主服务
要创建搜索体系结构,您应该使用三个services:爬网,网页处理器和索引。

爬行者是用于访问网页,获取所有链接的机器人,并遵循这些链接。这使搜索引擎可以不断找到新内容。

网页处理器读取页面内容和元数据。然后,您需要将网页的内容分解为可以根据不同条件进行分组的更简单表单。例如,通过主题,关键字等。元数据包含有用的信息,例如关键字,描述等。

索引用于组织发现的信息,以便可以快速,轻松地阅读。您可以为此目的使用关键字和页面排名。但是,更有效的索引需要一些研发。

使用kubernetes
设置搜索服务 Kubernetes是一个可扩展的Docker容器平台,可用于创建搜索体系结构所需的所有服务。它允许您以它们的工作方式配置服务,而不管使用哪种硬件。此外,您可以根据需要分别扩展每项服务。

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

使用kubernetes的主要好处是:

1. 自动化操作。在Kubernetes中,通过内置命令自动完成许多管理应用程序的复杂工作。

2. 基础架构抽象。 kubernetes代表您的工作负载处理计算,网络和存储。这使程序员不必担心设置基本环境,而是关注应用程序开发。

3. 服务健康监测。 kubernetes不断检查服务的健康。它重新启动已崩溃或停止的容器,并仅在确认操作后向用户提供服务。

用孟菲斯控制数据流
Memphis是一个实时数据处理平台。它使您可以使用流数据并支持异步。它非常适合使用大量数据并需要编写大量复杂代码的工程师。

孟菲斯平台具有高性能和容错性。它具有内置的监视功能,非常有用,可用于故障排除。

使用孟菲斯解决构建搜索体系结构时面临的大多数数据流控制问题。其中包括:

1.大量数据源很难处理。

2.每个来源的流数据进行分析。

3.由于缺乏继电器,失败和监视而导致的消息。

4.流程数据处理需要几个应用程序的集成,这大大减慢了数据处理过程,并且无法实时分析数据。

5.缺乏部署,管理,保护,更新,集成和配置其他现有数据处理系统。

孟菲斯使用生产者消费者模式,并将控制您在搜索体系结构中使用的服务的整个数据流。

让我们列出孟菲斯主要的好处。

1.团体部署。在任何Kubernetes和Docker环境中都在本地运行,并从一开始就完全优化。

2.弹性。未经代码更改的未开箱即用的死书队列,资源优化和事件恢复。

3.使用。孟菲斯具有简单易用的用户界面,可用于数据工程师和开发人员实时故障排除和跟踪数据。

4.唯一模式控制。孟菲斯通过内置流数据转换提供独特,可靠且易于使用的模式控制。

使用Elasticsearch创建搜索索引
Elasticsearch是一个允许您创建搜索索引的应用程序。它通常用于日志分析,全文搜索,智能安全系统,商业智能,监视正在进行的流程等。

您可以使用API​​或使用LogStash等其他工具将数据作为JSON文档发送到Elasticsearch。然后,Elasticsearch自动保存文档,并在群集索引中添加链接,包括搜索性。您还可以使用Elasticsearch API找到并检索文档。

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

快速文件复制
云基础架构的发展和增加的吞吐量可以在索引和搜索之间进行更大的隔离,而不会对索引延迟产生负面影响。这使得可能更有效和动态缩放。

让我们看一下可扩展体系结构的工作方式。

1.索引虚拟机保留文件的本地副本。如果发生故障,开始了一台新机器,该机器从云存储中下载文件。

2.新文件在索引过程中计算在内存中。

3.当上传到云存储时,大文件分为几个小段并并行上传。

4.这些文件也在本地存储在索引虚拟机的磁盘上。

5.发送数据后,搜索虚拟机下载了所有文件(如下载云的情况,将文件分为段并并行下载)。

6.搜索使用新版本的数据。

此搜索架构具有优势列表。

  • 速度 - 与并行加载合并数据。

  • 能够在接近实时实时降低段尺寸和索引。

  • 搜索操作和索引操作独立规模,因为它们使用了单独的虚拟机。

  • 快速添加/删除虚拟机。

  • 添加/删除其他资源,而无需长时间昂贵的数据重新平衡。

  • 能够使用新功能的功能,例如,使用异步过程更改单个索引的碎片数(文件部分)而不暂停索引。

总结
我们弄清楚了现代可扩展的搜索体系结构如何工作,以及它们的优势和缺点是什么。我们还告诉搜索体系结构包括哪些主要服务以及它们的用途。此外,本文包含一个有用工具的描述,您可以在开发可扩展搜索体系结构时可以使用。

使用获得的知识并为您的项目设计高效,可扩展的搜索体系结构。

最初由Idan Asulinhttps://memphis.dev上出版
Memphis.dev的联合创始人和CTO。