聊一聊Elasticsearch的基本原理与形成机制

1、搜索引擎的基本原理

通常搜索引擎包括:数据采集、文本分析、索引存储、搜索等模块,它们之间的协作流程如下图:
在这里插入图片描述

  1. 数据采集模块负责采集需要搜索的数据源。

  2. 文本分析模块是将结构化数据中的长文本切分成有实际意义的词,这样用户把切分出来的词作为搜索条件就可以搜索到对应的文本了。

  3. 索引存储模块是将采集到的数据按着定义好的结构写入到索引。

    搜索引擎的索引数据是根据倒排索引来组织的。倒排索引中保存了每个词在索引中所在文档的编号以及文档中的所在位置,如下图: 在这里插入图片描述

  4. 搜索模块是根据用户的输入找到索引中匹配的文档。

2、Elasticsearch集群是如何形成的(形成机制)

2.1、主节点、主候选节点、投票配置

在讲ES集群如何形成(形成机制)之前,需要先介绍几个重要的概念:主节点、主候选节点、投票配置。

  1. 主节点(master node):每个集群有且只有一个主节点,主节点作为整个集群的管理者,维护着整个集群的元数据,当集群内的节点数量发生变化时更新集群状态并将状态发布给集群中的其他节点。同时还负责分片的分配。
  2. 主候选节点(master-eligible node):有权参与主节点选举的节点,即主节点的候选人名单。
  3. 投票配置(voting configuration):可参与投票的节点名单(即有投票权的节点)。通常与主候选节点的列表一致。在选举主节点的时候,只有得到投票配置中半数节点投票的节点才能称为主节点。

如果把主节点选举看成美国大选的话,那么主节点就是总统,主候选节点就是总统候选人,而投票配置就是选民,得到半数选民支持的总统候选人将成为下一任总统。

2.2 一个全新的Elasticsearch集群形成所经历的步骤

一个全新的ES集群启动的时候,需要通过集群节点的引导来把各自孤立的节点统一起来对外提供服务。这个集群节点的引导分为以下四个步骤:

  1. 初始化投票配置

    确定主候选节点的列表,并将主候选节点列表写入投票配置。

  2. 选举主节点

    有投票配置中的主候选节点发起主节点的选举,当超过一半的主候选节点达成一致,则主节点选举成功。

  3. 发现集群的其他节点

    节点尝试和节点上配置的主候选节点列表中节点进行连接,如果成功连接了则发起加入集群的申请,主节点确认连接成功后将该节点加入到集群中并修改集群的状态,然后将集群的最新状态发布到集群中的各个节点上。

    这里需要注意的是:节点上的配置的主候选节点列表中可能没有主节点,但是没关系,能通过列表中的节点间接的找到主节点,也同样让主节点将当前节点加入到集群中。

  4. 集群中的所有节点发现完毕后,就可以对外提供统一的服务了。

2.3 集群状态的发布过程

ES集群中的主节点更新完集群状态后,会将新的状态发布到集群中的其他节点上,这个过程有两个阶段:

  1. 预提交阶段:主节点将最新的集群状态发布给各节点,各节点接收到状态数据后保存到本地并向主节点发送确认响应。如下图: 在这里插入图片描述
  2. 正式提交阶段:如果主候选节点中中有一半的节点返回确认响应成功,那么将进入正式提交阶段。主节点通知所有节点应用最新的集群状态,每个节点应用最新的集群状态后,还会再向主节点发送最终确认响应。当所有的确认响应都成功时,本次状态发布完成。如下图:
    在这里插入图片描述

集群状态的发布是有时间限制的,如果主节点不能在规定时间内(默认为30秒)将集群状态发布成功,则需要重新选举出一个新的主节点。如果某个非主节点无法在规定时间内(默认为90秒)返回给主节点最终的确认响应,则主节点会认为该节点已经掉线,会将该节点从集群中移除。

主节点和非主节点会保持周期性的相互联系,即相互发送心跳检测包。如果某个非主节点多次心跳检测失败,则主节点会认为该节点已掉线,并将该节点从集群中移除。如果主节点掉线,则需要通过投票配置来选出一个新的主节点。

3、参考文献

  • 《Elasticsearch数据搜索与分析实战》——王深湛

上一篇:《聊一聊Elasticsearch的一些基本信息》
下一篇:《聊一聊Elasticsearch的索引的分片分配机制》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm 导入本地包目录

PyCharm 是最新版 声明一下是野路子 现在我工程目录下有个 gen-py 文件夹,这是我 thrift 编译出来的 Python 依赖包 使用的话,我们可以在代码里加入系统路径 sys.path.append("./gen-py/") 但是这样写,PyCharm 没有提示&#…

80端口被进程 System PID=4 IIS导致的解决方法

是因为80端口被IIS占用。解决办法打开IIS管理器,然后停止:

异步4位计数器(Quartus与Modelsim联合仿真)

异步计数器(也称为ripple-through counter)的特点是每一位触发器的输出作为下一位触发器的时钟输入,因此计数速度会因为级联触发器的传播延迟而受到限制。这种计数器的最大工作频率通常低于同步计数器。 一、电路符号 输入信号:时…

若依cloud版集成微信扫码登录-绑定篇

前言 集成微信扫码登录的话,需要把项目的账号和微信账号进行绑定,然后才可以进行扫码登录 本篇内容是项目绑定微信 还需要申请一个微信开放平台账号 微信公众平台申请(测试平台)-CSDN博客 平台的项目回调接口可以先不写&…

鸿蒙应用App测试-通用测试

注意:大家记得学完通用测试记得再学鸿蒙专项测试 鸿蒙应用App测试-专项测试(DevEco Testing)-CSDN博客 注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得…

Linux 配置JDK

文章目录 一、下载Oracle-JDK1.1、如何正确的下载JDK二、配置JDK环境变量2.1 环境变量配置2.1.1、修改vim /etc/profile 添加jdk的路径一、下载Oracle-JDK 1.1、如何正确的下载JDK 首先我要安装的是oracle-jdk,这个时候什么地方都不要去,就去oracle的官网,然后找到,jdk的下…

springBoot 自动配置与starter

目录 一、自动配置 Springboot实现自动配置的核心机制 Conditional的作用是什么? 如何自定义自动配置? 步骤 例子分析 自动配置的优先级 如何禁用特定的自动配置? 二、starter 如何理解Spring Boot中的starter? 如何自…

Json 类型与多值索引 — OceanBase 4.3.2 AP 功能体验

本文来自 2024年OceanBase技术征文大赛——“让技术被看见 | OceanBase 布道师计划”的用户征文。也欢迎更多的技术爱好者参与征文,赢取万元大奖。和我们一起,用文字让代码跳动起来! 参与2024年OceanBase技术征文大赛>> MySQL在5.7.8…

Spark on YARN:Spark集群模式之Yarn模式的原理、搭建与实践

Spark 的介绍与搭建:从理论到实践-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 目录 一、Spark on YARN 的优势 (一&#…

java后端工程师转行AI大模型岗,工作、自我提升两不误!

随着技术的不断进步,人工智能(AI)已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域,如Java,转向人工智能领域,今天小编和大家一起来探讨Java开发者是否可以转型到人工智能&a…

Rust-宏编程

巴山楚水凄凉地,二十三年弃置身。 怀旧空吟闻笛赋,到乡翻似烂柯人。 沉舟侧畔千帆过,病树前头万木春。 今日听君歌一曲,暂凭杯酒长精神。 ——《酬乐天扬州初逢席上见赠》唐刘禹锡 【哲理】翻覆的船只旁仍有千千万万的帆船经过&a…

leetcode912.排序数组的题解

题目描述: 题目要求在不使用任何内置函数的情况下解决问题,时间复杂度为 O(nlog(n))。 笔者使用了快速排序,但是直接使用最原始的快速排序,有些特殊的测试用例会超时。 1)如果数组本身基本有序,则使用原始…

TikTok品牌出海:从“流量为王”到“价值为王”

随着市场竞争的加剧,品牌逐渐意识到,仅仅依靠流量已不足以在海外市场立足,必须实现从“流量为王”到“价值为王”的转变。本文Nox聚星将和大家探讨品牌如何与TikTok达人合作,在海外市场中建立长期稳定的品牌形象。 一、品牌出海的…

纯血鸿蒙系统 HarmonyOS NEXT自动化测试实践

1、测试框架选择 hdc:类似 android 系统的 adb 命令,提供设备信息查询,包管理,调试相关的命令ohos.UiTest:鸿蒙 sdk 的一部分,类似 android sdk 里的uiautomator,基于 Accessibility 服务&…

Kafka 可观测性最佳实践

Kafka 概述 Kafka 是由 LinkedIn 开发一个分布式的基于发布订阅模式的消息队列,是一个实时数据处理系统,可以横向扩展。与 RabbitMQ、RockerMQ 等中间件一样拥有几大特点: 异步处理服务解耦流量削峰 监控 Kafka 是非常重要的,因…

《XGBoost算法的原理推导》12-13树的叶子节点权重w和映射关系q 公式解析

本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 我们重新定义一颗树,包括两个部分: 叶子结点的权重向量 w w w;实例 -> 叶子结点的映射关系 q q q(本质是树的…

电商API:开启电商新时代的关键钥匙

一、电商API:定义与发展 电商API,即应用程序编程接口,是连接不同软件系统的桥梁,在电商领域中发挥着至关重要的作用。电商API的发展历程可以追溯到20世纪90年代,当时电子商务刚刚兴起,企业开始意识到通过A…

C++__XCode工程中Debug版本库向Release版本库的切换

Debug和Release版本分别设置编译后,就分别得到了对应的lib库,如下图: 再生成Release后如下图:

消费疲软下,家居品牌如何利用营销实现新的突围与增长?

在消费疲软的大环境下,家居品牌面临着前所未有的挑战与机遇。尤其以耐消品为主的家居行业,也受到一定程度影响——有效需求不足导致产能过剩,营销乏力,市场竞争开始变得激烈,不少家居品牌正在面临业绩压力。家居品牌如…

连985都没有面试机会 二本就更没戏了:瞎说,这就是三年高考的意义

最近有二本同学在直播里说:“看到很多面经说,连985同学都没有面试机会,而且是零offer。那我们二本就更没戏了。” 其实这种言论是在瞎扯。 我们一直在强调校招是分层的。 现在学生太多了,而且招聘对学历是有要求的。比如大厂的…