【搜索引擎Solr】Solr:提高批量索引的性能

几个月前,我致力于提高“完整”索引器的性能。我觉得这种改进足以分享这个故事。完整索引器是 Box 从头开始创建搜索索引的过程,从 hbase 表中读取我们所有的文档并将文档插入到 Solr 索引中。

我们根据 id 对索引文档进行分片,同样的文档 id 也被用作 hbase 表中的 key。我们的 Solr 分片公式是 id % number_of_shards。mapreduce 作业扫描 hbase 表,通过上述分片公式计算每个文件的目标分片,并将每个文档插入相应的 solr 分片中。这是在过去几年中为我们提供良好服务的初始模型的示意图:

ece497b61f7459f6fdb827a74d8e143c.png

所有 mapreduce 作业都与所有分片对话,因为每个分片的数据分布在所有 hbase 区域中。该作业是仅地图作业,没有减少作业。hbase 表扫描以及更新请求都在映射器中完成。


在每个映射器中,都有一个批处理作业的共享队列;和一个 http 客户端共享池,它们从队列中获取作业并将其发送到相应的分片。每个单独的文档都不会直接插入到队列中。相反,需要在同一个分片上索引的文档在插入队列之前会一起批处理(当前默认值为 10)。队列是有界的,当它已满时,文档生产者必须等待才能扫描更多行。

c42e2d0f844759c35ef9171440296622.png

如果所有 Solr 分片继续以一致且一致的速度*摄取文档,则该系统以稳定的速度运行。但是,Solr 时不时地会将内存中的结构刷新到文件中,这种 I/O 可能会导致一些索引操作暂时变慢。在这个阶段,集群不提供查询服务,所以这不是问题。


如果分片的总数为 n,并且给定分片的间歇性慢索引速率的概率为 p,则:

  • P(至少 n 个分片中的一个很慢)= P(恰好一个分片很慢)+ P(正好两个分片很慢)+ ... + P(所有 n 个分片都很慢)

要么

  • P(至少一个分片很慢)= 1 - P(没有一个分片很慢)

  • P(n 个分片中至少有 1 个很慢)= 1 — (1-p)ⁿ

如果我们假设对于给定的时间间隔 p = 0.01,这是 P 的图表(集群中至少有一个分片很慢):

f227cb38dd33a12d9aa548ee6d2ab869.png

这意味着要在更多分片上获得良好的索引性能,我们需要隔离一个分片的瓶颈,以免影响其他分片的索引。我的第一个尝试是增加工作人员池,这样如果一些工作人员由于速度慢而被卡在一个分片上,那么其余工作人员可以继续处理队列。这有所帮助,但仍然有可能让所有或许多工人在选择工作时陷入困境,这些工作会间歇性地进入缓慢的分片。在这种情况下,文档生产者线程将不会创建新文档,因为队列已满,并且所有工作人员都无法继续进行,因为他们正在等待缓慢的工作完成。在我的第二次尝试中,我为每个分片(在每个映射器上)创建了单独的队列和工作人员,这确保了如果一些分片很慢,那么其余分片不必闲置,因为他们的工作人员将继续阅读队列中的作业并将它们发送以进行索引。最终,正在呼吸的碎片将再次开始更快地索引,而其他一些碎片可能会开始缓慢响应等等。这极大地改善了系统的总流量。

c5cd04ef095a70248b70fa9a0b4ae32e.png

这是具有较旧并发模型的 39 台主机的图表。该作业在运行三天后崩溃。即使在崩溃之前,它的表现也不一致。此外,分片的平均索引速度低于我们过去看到的总分片较少的情况。

e651f30b524642d3c19f487fdf857a5a.png

这是在具有新并发模型的同一组主机上执行的相同工作,它的性能要好得多且更一致:

11dbbccadd4bc43e6d0149a56a63b1b8.png

y 轴上的单位是每秒读取次数。它增加了一倍多。Box 拥有近 500 亿份文档**,通过改进,完整索引器能够在不到两天的时间内完成此索引阶段。
但是,这种新模型也有其缺点,例如:

  • 此模型在针对同一分片的工作人员之间没有通信。因此,当一个分片响应缓慢时,来自其他并行运行的映射器的工作人员继续向它发送请求(并且失败,然后重试),即使一个或多个工作人员(在其他映射器中)已经确定该分片很慢。

  • 由于每个映射器为每个分片分配一个固定长度的队列,因此设计不会扩展到超过一定数量的分片;因为队列的内存需求将超过映射器的堆大小。


更具可扩展性的模型将涉及映射器和 Solr 分片之间的队列。并且应该有特定于分片的客户端,它们可能运行在分片的主机上,它将从队列中读取分片的文档并发送到 Solr 进行索引(通过 REST API 或 SolrJ)。
* Hbase 表扫描和文档生成器不是我们的瓶颈,因此我在这里只提到 Solr 索引性能。

本文https://architect.pub/solr-improving-performance-batch-indexing
讨论:知识星球【首席架构师圈】或者加微信小号【cea_csa_cto】或者加QQ群【792862318】
公众号

【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
35fd35279d013d7f3db975f2701bd9b0.jpeg
微信小号

【cea_csa_cto】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

71f102f85c356466c41c28e4ed1f3cda.jpeg

QQ群

【792862318】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

4aa6aeaf5cd566416e7a581f956fa8ad.jpeg

视频号【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

5caadcc40ad92655f49aebbada0f00db.jpeg

知识星球向大咖提问,近距离接触,或者获得私密资料分享。

4e337dfd04f737373780e642d6ce69f9.jpeg

喜马拉雅路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
知识星球认识更多朋友,职场和技术闲聊。知识星球【职场和技术】
微博【智能时刻】智能时刻
哔哩哔哩【超级架构师】

00251c9a40736524c0550c90cd02c1f5.jpeg

抖音【cea_cio】超级架构师

c5dead9eb42beeb9210ecece3dc82c9f.jpeg

快手【cea_cio_cto】超级架构师

9ce7ef266a0f889076ab315601882975.jpeg

小红书【cea_csa_cto】超级架构师

fdb41c477fd3dfb88fcf8f9d01891847.jpeg




谢谢大家关注,转发,点赞和点在看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/38224.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云原生之深入解析Flink on k8s的运行模式与实战操作

一、概述 Flink 核心是一个流式的数据流执行引擎,并且能够基于同一个 Flink 运行时,提供支持流处理和批处理两种类型应用。其针对数据流的分布式计算提供了数据分布,数据通信及容错机制等功能。Flink 官网不同版本的文档flink on k8s 官方文…

优秀的 RocketMQ 可视化管理工具 GUI 客户端

优秀的 RocketMQ 可视化管理工具 GUI 客户端 官网地址:http://www.redisant.cn/rocketmq 快速查看所有 RocketMQ 集群,包括Brokers、Topics和Consumers查看消费者订阅了哪些主题,以及消息队列被分配给了哪些消费者;当出现消息积…

黑客(网络安全)自学

建议一:黑客七个等级 黑客,对很多人来说充满诱惑力。很多人可以发现这门领域如同任何一门领域,越深入越敬畏,知识如海洋,黑客也存在一些等级,参考知道创宇 CEO ic(世界顶级黑客团队 0x557 成员…

(转载)极限学习机(extreme learning machine, ELM)的回归拟合及分类(matlab实现)

单隐含层前馈神经网络(single-hidden layer feedforward neural network,SLFN)以其良好的学习能力在许多领域中得到了广泛的应用。然而,传统的学习算法(如BP算法等)固有的一些缺点,成为制约其发展的主要瓶颈。前馈神经网络大多采用梯度下降方法&#xff…

MSA【1】:Segment Anything Model for Medical Image Analysis: an Experimental Study

文章目录 前言1. Abstraction & Introduction1.1. Abstraction1.2. Introduction1.2.1. What is SAM?1.2.2. How to segment medical images with SAM? 2. Methodology2.1. SAM is used in the process of segmentation of medical images2.1.1. Semi-automated annotati…

【golang中的切片的相关知识点】[ ] slice

golang-切片 切片的定义和初始化切片的内存分析切片的操作获取长度和容量追加元素复制切片 切片的遍历切片的特性总结 Golang中的切片是一种灵活且强大的数据结构,它可以动态地增长和缩小。切片是基于数组的抽象,它提供了更方便的操作和更灵活的内存管理…

前端实现 DIV 高度只有100px,宽度只有100px ,我要在这个DIV放一个宽度200的DIV,左右拉动滚动条显示

<!DOCTYPE html> <html> <head><title>点击监听两组span标签</title><style>.outer-div {width: 100px;height: 100px;overflow-x: scroll;background-color: #abc1ee;}.inner-div {width: 200px;}/* 自定义滚动条样式 */.outer-div::-web…

MYSQL多表查询

创建学生表和分数表并插入相应数据 mysql> INSERT INTO student VALUES( 901,张老大, 男,1985,计算机系, 北京市海淀区); mysql> INSERT INTO student VALUES( 902,张老二, 男,1986,中文系, 北京市昌平区); mysql> INSERT INTO student VALUES( 903,张三, 女,1990,中…

我是怎么把win11一步一步变成Mac的

目录 【三指拖动】 【空格预览】 【切换Ctrl和Alt】 【使用Linux命令】 【其它】 之前很长一段时间在MacBook上面开发习惯了&#xff0c;然后因为一些原因现在换到了windows上面&#xff0c;不管是使用上还是系统上都很不习惯&#xff0c;因此做了一些改造&#xff0c;…

C++-把字符串转换成整数

题目来源&#xff1a;牛客网 题目描述&#xff1a; 将一个字符串转换成一个整数&#xff0c;要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0 数据范围&#xff1a;字符串长度满足 0≤n≤100 进阶&#xff1a;空间复杂度 O(1) O(1) &…

APP外包开发原生和H5的对比

在开发APP的技术中&#xff0c;除了原生开发外也可以使用H5框架来开发。原生开发的特点是质量高&#xff0c;用户体验更好&#xff0c;但成本高&#xff0c;适用于对质量要求高的APP项目。H5框架的特点是通用性较强&#xff0c;对开发人员的要求相对较低&#xff0c;成本也低&a…

Spring Boot中的@EnableWebSocketMessageBroker注解是什么,原理,以及如何使用

Spring Boot中的EnableWebSocketMessageBroker注解是什么&#xff0c;原理&#xff0c;以及如何使用 WebSocket是一种在Web浏览器和Web服务器之间进行双向通信的技术。在传统的HTTP通信中&#xff0c;客户端向服务器发送请求&#xff0c;服务器响应请求&#xff0c;然后关闭连…

ABAP调用阿里云接口-短信服务-HTTP协议及签名(abap版本)<转载>

原文链接&#xff1a;https://blog.csdn.net/xiefireworks/article/details/113037650 阿里云接口文档请参考官网地址 https://help.aliyun.com/document_detail/59210.html?spm5176.8195934.J_5834642020.5.11ba4378DLVi4O 此处仅介绍使用ABAP完成阿里云短信服务签名请求的…

感知网络安全态势是什么?感知网络安全态势如何实施

网络安全是当今社会中一个非常重要的话题。随着互联网的普及和信息技术的发展&#xff0c;网络安全问题日益突出。为了有效应对各种网络威胁和攻击&#xff0c;网络安全态势感知成为了一种关键的技术手段。 网络安全态势感知的定义 网络安全态势感知是指通过对网络环境中的各种…

如何升级iOS17/iPadOS17公测版?iOS17公测版升级教程

苹果官方发布了iOS 17/iPadOS 17系统首个公测版更新&#xff0c;其版本号及更新内容与iOS 17 beta 3一致&#xff0c;版本号为21A5277j。 对于想升级iOS 17/iPadOS 17 公测版的用户&#xff0c;可以参考本教程进行操作。 升级注意事项&#xff1a; 1. 为防止意外情况&#xf…

MySql数据库的学习

MySQL 是最流行的关系型数据库管理系统&#xff0c;在 WEB 应用方面 MySQL 是最好的 RDBMS&#xff08;Relational Database Management System&#xff1a;关系数据库管理系统&#xff09;应用软件之一。 参考博客&#xff1a;MySQL 教程 | 菜鸟教程 (runoob.com) 一、什么是…

Latex合并多个公式且居中

要求&#xff1a;1&#xff1a;多个公式居中对齐 2&#xff1a;多个公式组合只有一个编号。 结果类似于这一种&#xff1a; 代码&#xff1a;使用gathered可以。 \begin{equation}\begin{gathered}\vspace{0.6em}{E} {A(I)}\\\vspace{0.6em}{F} Conv(\sum_{i1}^3{M_i}) \\{…

微软开源了一个 助力开发LLM 加持的应用的 工具包 semantic-kernel

在首席执行官萨蒂亚纳德拉&#xff08;Satya Nadella&#xff09;的支持下&#xff0c;微软似乎正在迅速转变为一家以人工智能为中心的公司。最近微软的众多产品线都采用GPT-4加持&#xff0c;从Microsoft 365等商业产品到“新必应”搜索引擎&#xff0c;再到低代码/无代码Powe…

【RocketMQ】005-Docker 部署 RocketMQ

【RocketMQ】005-Docker 部署 RocketMQ 文章目录 【RocketMQ】005-Docker 部署 RocketMQ一、部署1、拉取镜像MQ 镜像可视化平台镜像 2、创建挂载目录创建 nameserver 挂载目录创建 broker 目录创建 broker 配置文件目录 3、编辑配置文件4、启动服务启动 nameserver启动 broker启…

Electron + vue 搭建桌面客户端

下载Electron 压缩包&#xff0c;放到本地 Electron 压缩包下载地址 cd ~/Library/Caches/electron