当前位置: 首页 > article >正文

ElasticSearch 是如何实现分布式的?

ElasticSearch 是如何实现分布式的?

如果你正在准备技术面试,或者想深入理解 ElasticSearch(简称 ES)是如何实现分布式的,这篇文章将用通俗易懂的方式来讲解。

1. 为什么需要分布式搜索?

在互联网行业,搜索是一个重要的功能,像电商网站搜索商品、社交平台搜索用户、企业内部搜索文档等,几乎所有大型系统都依赖高效的搜索功能。

最早,搜索引擎主要依赖 Lucene,这是一个强大的搜索库。但 Lucene 本身并不支持分布式,它更适合单机环境。随着数据量越来越大,单机搜索性能不够用了,于是出现了基于 Lucene 的分布式搜索引擎,比如 ElasticSearch(ES)。

今天,大部分公司都在用 ES 作为搜索引擎,因此 ES 也成了面试中的高频考点。常见的一个问题是:ElasticSearch 是如何实现分布式的?

2. ES 的分布式架构

ElasticSearch 采用 分布式架构,意味着它可以运行在多台机器上,并把数据分散存储到不同的服务器中,实现横向扩展,提高搜索性能和可靠性。

可以用一个快递公司来类比 ES 的分布式架构:

  • 索引(Index)相当于仓库:一个索引存储的是某类数据,比如订单数据。
  • 分片(Shard)相当于多个快递站点:数据会被拆分存储到不同的 shard 里,每个 shard 只存一部分数据,类似于不同的快递站点各自负责一部分快递。
  • 副本(Replica)相当于备用仓库:每个 shard 都有副本,如果某个 shard 发生故障,系统可以用副本数据继续提供服务,不影响搜索功能。

3. ES 里的核心概念

为了更清楚地理解 ES 的架构,我们用 MySQL 来类比:

ElasticSearch 概念MySQL 类比解释
Index数据库中的一张表存储某一类数据,如订单数据、用户数据等
Type(已废弃)表中的分类字段ES 7.x 以后已移除,之前用于区分类似的数据
Mapping表的结构定义每个字段的数据类型
Document表中的一行数据ES 里存储的最小数据单元
Field表中的字段每个文档由多个字段组成

举个例子:

假设我们有一个订单索引 order_idx,存储所有的订单数据,相当于 MySQL 里的一张 order 表。
每条订单数据是一个 Document,里面包含订单 ID、商品名称、价格等多个 Field

4. ES 的分片(Shard)机制

ElasticSearch 之所以能高效处理大规模数据,关键在于它的 分片(Shard)机制

假设你是快递公司的老板,有 300 万个包裹要送,如果让一个快递员送完所有包裹,肯定忙不过来。但是如果把 300 万个包裹拆分到 3 个快递站,每个快递站各自负责 100 万个包裹,送快递的效率就大大提升了。

ES 也是同样的道理:

  • 一个索引(Index)可以拆分成多个分片(Shard)。
  • 每个分片存储一部分数据,多个分片分布在不同的服务器上。
  • 查询时,ES 可以同时在多个分片上并行处理请求,提高搜索性能。

例如:

  • 你有 3T 订单数据,拆分成 3 个 shard,每个 shard 存 1T 数据。
  • 如果数据增长到 4T,可以新建一个 4 个 shard 的索引,重新分配数据。

5. 主分片(Primary Shard)和副本分片(Replica Shard)

为了保证数据可靠性,ES 采用了 主分片(Primary Shard)+ 副本分片(Replica Shard) 机制。

5.1 主分片(Primary Shard)

  • 负责数据的存储和查询。
  • 当你向 ES 写入数据时,数据会先存到主分片。

5.2 副本分片(Replica Shard)

  • 作为主分片的备份,存储相同的数据。
  • 当主分片宕机时,ES 可以用副本分片来继续提供服务,保证高可用。

比如:

  • 你的 ES 集群有 3 个主分片,每个主分片都有 1 个副本。
  • 那么 ES 实际上会有 6 个 shard(3 个主分片 + 3 个副本分片)。
  • 如果一台服务器宕机,数据仍然可用。

6. Master 节点和故障恢复

ElasticSearch 采用 主节点(Master)+ 数据节点(Data Node) 架构,保证集群的正常运行。

  • Master 节点:负责管理整个集群,比如索引创建、分片分配、主从切换等。
  • Data 节点:负责存储数据和执行搜索查询。

6.1 Master 节点的选举

如果 Master 节点宕机,ES 会自动选举一个新的 Master,保证集群不会崩溃。

6.2 故障恢复机制

假设某台服务器宕机,导致主分片不可用,ES 会:

  1. 让副本分片(Replica Shard)切换成新的主分片(Primary Shard)。
  2. 等宕机的服务器恢复后,重新分配副本分片。

这个机制确保即使服务器故障,ES 也能继续提供搜索和数据存储服务。

7. 结语

ElasticSearch 作为分布式搜索引擎,核心原理就是 数据分片 + 副本存储 + 主节点管理

简单来说,ES 就像一个高效的快递网络,把数据拆成多个小块(Shard),分发到不同的服务器上,同时保持数据的副本,确保高性能和高可用。

如果你在面试中被问到 ES 的分布式架构,可以用上面这个类比来回答,相信面试官会对你的理解能力印象深刻!


http://www.kler.cn/a/567761.html

相关文章:

  • JavaScript基础 -- 函数
  • Hue Load Balance配置
  • C++Primer学习(4.8位运算符)
  • FFT算法详解与STM32实战应用:从原理到代码实现
  • Electron一小时快速上手
  • 算法-数据结构(图)-弗洛伊德算法复现(Floyd)
  • Java数据结构第十五期:走进二叉树的奇妙世界(四)
  • 深入解析Java字符串:常量池、内存管理与StringBuilder、StringBuffer操作类指南
  • 安全传输,高效共享 —— 体验FileLink的跨网文件传输
  • ARM32汇编 -- align 指令说明及示例
  • 翻译: 深入分析LLMs like ChatGPT 二
  • An Efficient Anti-Interference Imaging Technology for Marine Radar 论文阅读
  • 泰康在线:以数字金融为基,跑赢互联网保险新时代
  • LeetCode 热题 100_寻找两个正序数组的中位数(68_4_困难_C++)(二分查找)(先合并再挑选中位数;划分数组(二分查找))
  • 【文献阅读】A Survey on Hardware Accelerators for Large Language Models
  • 广东专插本-政治毛泽东思想学习笔记
  • golang部分语法介绍(range关键字,函数定义+特性,结构体初始化+结构体指针/方法)
  • [STM32]从零开始的STM32 BSRR、BRR、ODR寄存器讲解
  • 【实战】使用PCA可视化神经网络提取后的特征空间【附源码】
  • 《深度剖析:生成对抗网络中生成器与判别器的高效协作之道》