如何在项目重构建具有可扩展的搜索功能?使用Kubernetes 、Memphis 、Elasticsearch 搭建可扩展的搜索框架
作者:互联网
搜索架构的当前挑战
对于大小和复杂性各不相同的大多数程序而言,构建可扩展的搜索架构都具有挑战性。为了解决这个问题,有几种不同的搜索架构。
然而,由于信息技术的快速发展,新的快速增长的市场和 SaaS 应用程序的创建,现有的解决方案已不能满足所有需求。因此,需要构建一个新的高效、可扩展的架构来解决现代问题。
让我们来看看可伸缩搜索架构的开发人员目前面临的挑战。
- 动态可伸缩性。 系统收到的搜索查询的数量可能因不同的事件而有很大差异。与平均每日流量相比,有时流量会增加数十倍。为了有效地处理查询,搜索引擎必须能够预测流量增长并扩展其基础架构。在不到一分钟的时间内添加和删除机器并在新机器可用之前临时处理增加的流量非常重要。动态可扩展性节省了成本,同时为创造性地使用搜索引擎开辟了新的机会。
- 动态数量的分片。系统的性能及其扩展能力取决于该指标。为了搜索引擎的最佳性能,这个数字应该是动态的。为了获得最佳性能和扩展能力,能够自动调整此值非常重要。
- 搜索和索引分离。同时扩展查询量和数据量对搜索引擎来说是一个挑战。增加搜索或索引功能需要更多资源,从而使基础设施成本非常高。为了优化搜索引擎的性能并避免索引对搜索的负面影响,您应该分别扩展索引和搜索。
- 通过网络并行传输数据。在过去的十年中,网络上的数据传输速度增长了大约 100 倍,并且还在继续增长。与此同时,处理器和数据存储的发展速度没有那么快。为了有效扩展,这种情况需要创建一种不同的方式来传输具有更高并行化百分比的数据。
搜索引擎和数据库之间的差异
虽然搜索引擎和关系数据库有很多共同点,但它们之间也存在一些关键差异 。
关系数据库以相互关联的表的形式存储结构化数据。它们允许您处理比搜索引擎更多的信息。然而,搜索引擎的优势在于它们可以解析非结构化数据。它们存储平面对象而不是互连的表。搜索引擎允许您通过并行化来提高数据读写操作的性能。
在关系数据库中,信息组织良好且更可靠。相反,在搜索引擎中,信息没有系统化并且不稳定,因为它的位置和内容可以不断变化。
搜索引擎易于实施且快速。但是,与数据库不同,搜索引擎需要经常更新。他们的主要目标是提供一组相关的高质量搜索结果,以快速响应客户需求。
扩展架构模式
主/副本架构
主/副本架构用于支持大量读取。它涉及将主服务器的数据复制到多个副本。与在一台服务器上仅使用一个数据副本相比,此架构允许您处理多几倍的请求。例如,如果您在三台服务器上使用三个数据副本,那么您可以处理比在一台服务器上处理一个副本多三倍的请求。
为了支持更多的写操作,您需要将数据拆分成几个更小的部分,并添加更多的 CPU 来创建这些部分。此外,扩展读写需要添加分片并在多台机器上拥有多个副本。
要实现一种跨多个副本复制主服务器数据的主/副本架构,每个分片都需要有一个接受写入的版本。其他副本使用主副本作为事实来源。存储在主分片上的日志文件通常用于同步主数据和副本。此日志文件包含主分片按顺序接收的所有写入。每个副本分片从这个日志中读取写入并在本地应用它们。
这种方法的主要缺点是在同一台机器上进行索引和搜索。由于我们需要创建数据的多个副本,因此需要复制 CPU 和内存索引。这大大增加了成本。如果您需要同时扩展索引和搜索,那么复制因子会增加并适用于更多数据,需要大量额外资源。
如果同一台计算机同时处理索引和搜索查询,那么增加索引的 CPU 和内存使用量也会对最终用户体验产生负面影响。如果最终用户产生的搜索流量急剧增加,那么用于索引的资源可能会限制应对这种流量激增的能力。
此外,这种方法限制了自动缩放功能,因为添加新副本需要从现有机器中提取数据,通常需要几个小时,并且会增加机器的额外负载。这导致您不得不大大增加架构的规模,并期望数据或查询的数量显着增加。
二进制数据结构的复制
创建可伸缩搜索架构的另一种方法是在索引任务完成后复制提交到磁盘的二进制数据结构。
这种方法避免了重复用于索引的 CPU 和内存。但是,在覆盖所有数据结构的同时,二进制文件可能会很大,从而导致一些延迟。
大多数情况下,搜索架构以不到一分钟的速度处理大量索引和搜索操作。因此,在大多数情况下,不使用这种方法。
此外,搜索引擎依赖于世代数据结构。这意味着不是单个二进制文件,而是一组文件。当一个段接收到新的索引操作时,它被存储在磁盘上的一个较小的数据结构中。新的索引操作在第 0 代中执行,直到部分文件达到一定大小并且必须与第 1 代合并。这是删除重复项和优化搜索效率所必需的。这种方法的缺点是磁盘上的所有文件都被修改了,每个副本都需要获得一个包含所有数据分片的新版本。
合并数据的过程及其复制传输将受到以下因素的影响:
- 分片大小决定了所有层合并后要传输的最大数据量。
- 代数。这将直接影响所有代的合并频率(我们必须传输最大数据大小的次数)。
搜索架构主要服务
要创建搜索架构,您应该使用三种服务:爬虫、网页处理器和索引。
- 爬虫是用于访问网页、获取网页上的所有链接并跟踪这些链接的机器人。这使得搜索引擎能够不断地找到新的内容。
- 网页处理器读取页面内容和元数据。然后,您需要将网页内容分解为更简单的形式,这些形式可以根据不同的标准进行分组,例如,按主题、关键字等。元数据包含有用的信息,例如关键字、描述等。
- 索引用于组织找到的信息,以便可以快速轻松地阅读。为此,您可以使用关键字和网页排名。然而,更有效的索引需要一些研究和开发。
使用 Kubernetes 设置搜索服务
Kubernetes 是一个可扩展的 Docker 容器平台,可用于创建搜索架构所需的所有服务。它允许您以这样的方式配置服务,无论为此使用什么硬件,它们都可以工作。此外,您可以根据需要单独扩展每项服务。
Kubernetes 允许您创建服务并为其分配唯一的 IP 地址。这允许服务在不创建特殊连接的情况下相互通信。此外,它还确保您的服务安全。
使用 Kubernetes 的主要好处是:
- 自动化操作。在 Kubernetes 中,许多涉及管理应用程序的复杂工作都是通过内置命令自动完成的。
- 基础设施抽象。Kubernetes 代表您的工作负载处理计算、网络和存储。这使得程序员不必担心设置底层环境,而可以专注于应用程序开发。
- 服务健康监测。Kubernetes 会不断检查您的服务的健康状况。它重启已经崩溃或停止的容器,并在确认其操作后才向用户提供服务。
使用 Memphis 控制数据流
Memphis是一个实时数据处理平台。它允许您处理流数据并支持异步。它非常适合处理大量数据并需要编写大量复杂代码的工程师。
Memphis 平台具有高性能和容错能力。此外,它还有一个内置的监控功能,这对于故障排除非常有用和方便。
使用 Memphis 可以解决您在构建搜索架构时面临的大部分数据流控制问题。其中包括:
- 大量的数据源非常难以处理。
- 分析每个源的流数据。
- 由于缺乏中继、故障和监控而导致的消息丢失。
- 流式数据处理需要集成多个应用程序,这大大减慢了数据处理过程,无法实时分析数据。
- 难以部署、管理、保护、更新、集成和配置其他现有数据处理系统。
Memphis 使用生产者-消费者模式,并将控制您在搜索架构中使用的服务的整个数据流。
让我们列出孟菲斯的主要优势。
- 团队部署。在任何 Kubernetes 和 Docker 环境中本地运行,并从一开始就进行了全面优化。
- 弹性。开箱即用的死信队列、资源优化和事件恢复,无需更改代码。
- 使用方便。Memphis 有一个简单易用的用户界面,供数据工程师和开发人员实时排除故障和跟踪数据。
- 独特的模式控制。Memphis 通过内置的流数据转换提供独特、可靠、易于使用的模式控制。
使用 Elasticsearch 创建搜索索引
Elasticsearch 是一个允许您创建搜索索引的应用程序。它通常用于日志分析、全文搜索、智能安全系统、商业智能、持续进程监控等。
您可以使用 API 或使用其他工具(如 Logstash)将数据作为 JSON 文档发送到 Elasticsearch。然后 Elasticsearch 自动保存文档并在聚集索引中添加指向它的链接,包括可搜索性。您还可以使用 Elasticsearch API 查找和检索文档。
Elasticsearch 提供可水平扩展的搜索并支持多线程。此外,您可以使用多个不同的搜索字段并确定哪些值是记录与搜索匹配的最佳指标的优先级。
快速文件复制
云基础设施的发展和吞吐量的增加允许索引和搜索之间更好的隔离,而不会对索引延迟产生负面影响。这使得更有效和动态的缩放成为可能。
让我们来看看可伸缩架构是如何工作的。
- 索引虚拟机保留文件的本地副本。如果出现故障,将启动一台新机器,从云存储中下载文件。
- 新文件在索引过程中在内存中计算。
- 上传到云存储时,将大文件分成若干小段并行上传。
- 这些文件也本地存储在索引虚拟机的磁盘上。
- 发送数据后,搜索虚拟机下载所有文件(如下载云的情况,文件被分割成段并行下载)。
- 搜索使用新版本的数据。
这种搜索架构有一系列优点。
- 通过并行加载加速数据合并。
- 能够近乎实时地减少段大小和索引。
- 搜索操作和索引操作独立扩展,因为它们使用不同的虚拟机。
- 快速添加/删除虚拟机。
- 添加/删除额外的资源,无需长时间且昂贵的数据重新平衡。
- 能够使用新型功能,例如在不暂停索引的情况下使用异步过程更改单个索引的分片数(文件的部分)。
包起来
我们弄清楚了现代的、可扩展的搜索架构是如何工作的,以及它们的优缺点是什么。我们还介绍了搜索架构包含哪些主要服务以及它们的用途。此外,本文还描述了您在开发可伸缩搜索架构时可以使用的有用工具。
标签:搜索功能,Kubernetes,Memphis,Elasticsearc 来源: