Elasticsearch 的分布式架构原理:通俗易懂版

devtools/2025/3/4 16:46:12/

Elasticsearch 的分布式架构原理:通俗易懂版

Lucene 和 Elasticsearch 的前世今生

Lucene 是一个功能强大的搜索库,提供了高效的全文检索能力。然而,直接基于 Lucene 开发非常复杂,即使是简单的功能也需要编写大量的 Java 代码,并且需要深入理解其底层原理。

Elasticsearch(简称 ES)构建在 Lucene 之上,隐藏了 Lucene 的复杂性,提供了简单易用的 RESTful API 和 Java API,同时支持多种语言的 API 访问,使得搜索引擎的开发变得更加容易。

Elasticsearch 是什么?

Elasticsearch 主要有以下特点:

ES 的核心概念

近实时(Near Realtime,NRT)

Elasticsearch 是一个近实时(NRT)的搜索引擎,意味着:

  1. 从写入数据到数据可以被搜索到,会有一个小延迟(通常 1 秒左右)。
  2. 通过 ES 进行搜索和分析可以在秒级时间内返回结果。

集群(Cluster)

一个 Elasticsearch 集群由多个节点组成,每个节点所属的集群由配置决定。对于中小型应用来说,刚开始一个集群通常只有一个节点。

节点(Node)

  • 节点是 ES 集群中的一个实例,每个节点都有一个唯一的名称。
  • 默认情况下,节点会自动加入名为 elasticsearch 的集群。
  • 只要启动多个 ES 实例,它们就会自动组成一个集群。

文档(Document)和字段(Field)

  • **文档(Document)**是 ES 中最小的数据单元,类似于数据库中的一行记录。
  • **字段(Field)**是文档中的数据字段,类似于数据库中的列。
  • ES 以 JSON 格式存储文档。

示例:

{"product_id": "1","product_name": "iPhone X","product_desc": "苹果手机","category_id": "2","category_name": "电子产品"
}

索引(Index)

  • 索引(Index)是一组具有相似结构的文档集合,类似于数据库中的 表(Table)
  • 例如,一个 product_index 可能存储所有商品的相关信息。

⚠ 过时概念:Type

在 Elasticsearch 7.x 及以上版本中,type 概念已被移除,所有索引只能有一个 type

以前,type 用于对一个索引内的数据进行分类,比如:

  • product_index 下可以有 electronicsclothing 两个 type,分别存储电子产品和服装产品的数据。
  • 但在 ES 7.x 及以上版本中,这种分类方式已不再支持,建议使用不同的索引来存储不同类别的数据。

分片(Shard)

  • 单台服务器无法存储海量数据,ES 通过 分片(Shard) 机制将索引拆分成多个部分,并分布在多台服务器上。
  • 优点:
    1. 扩展能力:可以存储更多数据。
    2. 提高查询性能:查询时多个分片可以并行执行,提高吞吐量。

注意:

  • 每个分片(Shard)本质上是一个独立的 Lucene 索引。
  • 在创建索引时,需要指定分片数量,后续不能更改。

副本(Replica)

  • 副本(Replica) 用于提高数据的可用性和查询性能。
  • 副本的作用:
    1. 高可用性:如果主分片(Primary Shard)所在节点宕机,副本(Replica Shard)可以接管,防止数据丢失。
    2. 负载均衡:多个副本可以分担查询压力,提高查询速度。

默认配置:

  • Primary Shard(主分片):默认 5 个,创建索引时确定,无法修改。
  • Replica Shard(副本分片):默认 1 个,可以随时调整。
  • 最小的高可用配置:需要至少 2 台服务器,确保每个副本分布在不同的节点上。

示意图:

索引 -> 分片(Shards)-> 主分片(Primary Shard)& 副本分片(Replica Shard)

ES vs 传统数据库对比

Elasticsearch关系型数据库
Index(索引)数据库(Database)
Document(文档)行(Row)
Field(字段)列(Column)

总结

Elasticsearch 通过 分片(Sharding)+副本(Replication) 机制,实现了 分布式存储高可用性,同时提供了 近实时搜索 的能力,使得它成为大数据搜索和分析的主流选择。

在现代互联网公司,Elasticsearch 主要用于 日志分析、全文搜索、业务分析、推荐系统 等场景。如果你在面试中遇到 ES 相关问题,理解这些基本概念,可以帮助你更好地应对面试挑战。


http://www.ppmy.cn/devtools/164053.html

相关文章

机器翻译与语音识别技术:推动人机交互的新篇章

在数字化时代,语言不仅是人类交流的基本工具,也是连接不同文化和国家的桥梁。随着科技的飞速发展,机器翻译与语音识别技术作为语言处理领域的两大核心技术,正逐步改变着人类与计算机之间的交互方式。本文将深入探讨这两种技术的原…

C语言机试编程题

编写版本:vc2022 目录 1.求最大/小值 2.求一个三位数abc,使a的阶乘b的阶乘c的阶乘abc 3.求2/1,3/2,5/3,8/5,13/8,21/13,的前20项和 4.求阶乘 5.求10-1000之间所有数字之和为5的…

基于Selenium的Python淘宝评论爬取教程

文章目录 前言1. 环境准备安装 Python:安装 Selenium:下载浏览器驱动: 2. 实现思路3. 代码实现4. 代码解释5. 注意事项 前言 以下是一个基于 Selenium 的 Python 淘宝评论爬取教程,需要注意的是,爬取网站数据应当遵守…

DeepSeek能画流程图吗?分享一种我正在使用的DeepSeek画流程图教程

‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​​​‌​‌​‍‌​​‌​​‌​‍‌​‌‌‌‌​​‍‌​‌​‌‌​​‍‌​​​‌‌‌‌‍‌​‌‌​‌‌‌‍‌‌​​‌​‌​‍‌​​‌‌​‌‌‍‌​​​‌​‌​‍‌​‌‌‌​‌‌‍‌‌​​‌‌‌‌‍‌​‌‌‌​​​‍‌…

Java中使用FFmpeg拉取RTSP流

在Java中使用FFmpeg拉取RTSP流并推送到另一个目标地址是一个相对复杂的任务,因为Java本身并没有直接处理视频流的功能。但是,我们可以借助FFmpeg命令行工具来实现这个功能。FFmpeg是一个非常强大的多媒体处理工具,能够处理音频、视频以及其他…

深度学习重要论文阅读笔记 ResNet (2025.2.26)

文章目录 问题背景数据预处理神经网络模型模型性能知识点积累英语单词积累 问题背景 随着神经网络变得更深(层数变多),模型的训练过程也会变得更加困难。当神经网络的深度增加,就会出现梯度消失和梯度下降现象,妨碍模…

LeetCode 解题思路 3(Hot 100)

解题思路: 初始化指针: 左指针指向数组起始位置,右指针指向数组末尾。计算当前面积: 左右指针相遇前所围成的矩形面积。​更新最大面积: 比较当前面积与已知最大面积。​移动指针: 移动较高指针无法获得更…

从头开始学SpringMVC—04文件处理拦截器异常处理执行流程

1)文件上传和下载 2)拦截器的使用 3)异常处理器 4)执行流程分析 目录 1.文件上传和下载 1.1文件下载 1.2文件上传 ①添加依赖: ②在SpringMVC的配置文件中添加配置: ③控制器方法: 2.拦截…