Elasticsearch 读写流程深度解析

article/2025/6/27 9:33:59

在数据驱动的数字化浪潮中,Elasticsearch 凭借其毫秒级搜索响应与水平扩展能力,已成为现代数据架构的核心引擎。本文将深入剖析其读写流程的设计思想、实现细节与工程权衡,揭示这一分布式系统的精妙架构。


一、 架构基石:分布式设计的精妙平衡

1.1 分片(Shard)机制:数据水平扩展的核心
  • 分片本质:每个索引被拆分为多个独立的分片(默认 5 个),每个分片是一个完整的 Lucene 索引实例
  • 路由算法:文档通过 shard = hash(_routing) % number_of_primary_shards 定位目标分片
  • 动态扩容:通过 Split API 可对分片二次拆分,实现存储容量倍增
1.2 副本(Replica)设计:高可用的双重保障
  • 数据冗余:每个主分片可配置多个副本(默认 1 个),物理存储在不同节点
  • 读写分离:副本分片可处理读请求,提升系统吞吐量(通过 preference 参数控制)
  • 故障转移:主分片异常时,Master 节点自动触发副本晋升(Raft 协议选举)
1.3 节点角色:去中心化的协作网络
节点类型核心职责资源隔离建议
Master Node集群状态管理/分片分配低CPU/中内存
Data Node存储数据/执行读写操作高CPU/高内存/高IO
Coordinating Node请求路由/结果聚合中CPU/高网络带宽
Ingest Node数据预处理(Pipeline 执行)中CPU/中内存

设计权衡:通过角色分离避免单点瓶颈,但增加运维复杂度(需专用 Master 节点防脑裂)


二、 写入流程:可靠性与实时性的精密协作

2.1 数据写入流程图

在这里插入图片描述

2.2 底层存储引擎运作
  1. Translog 的可靠性设计

    • 追加写入:所有写操作立即追加到 translog(文件系统缓存)
    • 刷盘策略:每 5 秒执行 fsync(可配置 index.translog.durabilityrequest 强同步)
    • 分段滚动:translog 超过 512MB 时生成新文件(index.translog.generation
  2. Refresh:可搜索性的关键

    • 内存刷新:默认每 1 秒将 In-memory Buffer 转为 Lucene Segment
    • 实时性代价:高频 Refresh 增加 I/O 压力(可通过 index.refresh_interval 调整)
    • Segment 特性:不可修改(删除标记 .del 文件),只追加合并
  3. Flush:持久化与清理

    • 触发条件:Translog 大小超限(默认 512MB)或 30 分钟超时
    • 原子操作
      1. 调用 fsync 确保所有 Segment 落盘
      2. 清空 Translog(生成新空文件)
      3. 清空 Memory Buffer
  4. 段合并(Segment Merge)优化

    • 策略选择:TieredMergePolicy 分层合并(小段→中段→大段)
    • I/O 控制MergeScheduler 动态调节并发度(避免磁盘过载)
    • 优化效果:减少文件句柄数,提升查询性能

三、 读取流程:分布式查询的协同艺术

3.1 查询请求全链路解析

在这里插入图片描述

3.2 关键阶段技术细节
  1. Query 阶段(Scatter)

    • 分片选择:协调节点基于路由信息定位主/副本分片(负载均衡)
    • 本地搜索:各分片在 Lucene 倒排索引中检索(使用 SkipList 跳表加速)
    • 结果压缩:仅返回 DocID、Score、Sort Values(减少网络传输)
  2. Fetch 阶段(Gather)

    • 文档拉取:协调节点按排序结果向对应分片获取完整文档
    • 高亮处理:在数据节点重新运行查询生成高亮片段
    • 分页优化:通过 search_after 避免深度翻页性能劣化
3.3 性能加速机制
  1. 缓存体系

    缓存类型存储内容失效条件
    Query CacheFilter 上下文结果Segment 变更
    Request Cache聚合结果(hits=0 时)索引数据更新
    Fielddata Cache文本字段分词结果内存压力/LRU 淘汰
  2. 预加载优化

    • 文件系统缓存:Lucene 依赖 OS Page Cache 加速磁盘读取
    • 预热脚本:通过 index.store.preload 预载热点索引文件

四、 容错与一致性:分布式场景下的工程智慧

4.1 写入一致性模型
  • 配置策略:通过 wait_for_active_shards 控制最小成功副本数
    • all:所有副本确认(强一致,延迟高)
    • quorum:多数副本确认(推荐平衡点)
    • 1:仅主分片确认(弱一致,延迟低)
4.2 故障恢复流程
  1. 分片重分配:Master 检测到节点离线,启动副本提升
  2. 数据同步:新主分片从 Translog 恢复未刷盘数据
  3. 分段修复:通过 Checksum 校验 Segment 完整性

工程挑战:脑裂场景下的数据冲突通过版本号(_version)解决(乐观锁)


五、 深度优化:生产环境的最佳实践

5.1 写入性能调优
  • Bulk 批处理:单批次 5-15MB 数据(避免堆内存压力)
  • 线程池配置:调整 write 队列大小(thread_pool.write.queue_size
  • 磁盘隔离:SSD 部署热数据,SATA 存冷数据(Tiered Storage)
5.2 查询效率提升
  • 索引设计
    {"settings": {"number_of_routing_shards": 32,  // 为未来扩容预留"refresh_interval": "30s"       // 降低实时性要求场景},"mappings": {"properties": {"timestamp": { "type": "date", "doc_values": true } // 启用列存加速聚合}}
    }
    
  • 查询重构
    • 用 Filter 替代 Bool Query 的 Must 子句(利用缓存)
    • 避免通配符查询(wildcard),改用 N-gram 分词

结语:分布式系统的设计哲学

Elasticsearch 的卓越性能源于对三大矛盾的巧妙平衡:

  1. 实时 vs 吞吐:Translog 持久化与 Refresh 机制的协作
  2. 扩展性 vs 一致性:分片化存储与可调一致性模型
  3. 灵活性 vs 效率:DSL 的丰富表达能力与倒排索引/列存优化

其核心启示在于:所有分布式系统都是妥协的艺术。Elasticsearch 通过分层设计(Translog/Lucene Segment)、异步协作(副本复制)、智能调度(合并策略/缓存)等机制,在工程复杂度与性能之间找到了黄金平衡点。理解这些设计思想,不仅有助于优化 Elasticsearch 使用,更为构建任何大规模分布式系统提供了宝贵范式。

参考文档:https://cloud.tencent.com/developer/article/2398626


http://www.hkcw.cn/article/HNlSjNdjrL.shtml

相关文章

2024年第十五届蓝桥杯Scratch10月stema选拔赛真题——数字卡片排序

2024年第十五届蓝桥杯Scratch10月stema选拔赛真题——数字卡片排序 题目可点下面去处,支持在线编程~ 数字卡片排序_scratch_少儿编程题库学习中心-嗨信奥 程序演示可下下面去处,支持获取素材和源码~ 数字卡片排序-scratch作品-少儿编程题库学习中心-嗨…

基于遥感图像深度学习的海洋测深

知识星球:数据书局。打算通过知识星球将这些年积累的知识、经验分享出来,让各位在数据治理、数据分析的路上少走弯路,另外星球也方便动态更新最近的资料,提供各位一起讨论数据的小圈子 1. 摘要 沿海开发和规划面临的问题&#…

《使命召唤》防线失守:系列多款游戏被破解,黑客公开源代码 堡垒首次被突破

每当一款新游戏在PC平台发售,如果未使用Denuvo加密技术,破解者们就会竞相争夺首个破解该作品的机会。例如,《漫威蜘蛛侠 2》和《最后生还者 2》分别在发售后不到两分钟和一天内被破解。长期以来,《使命召唤》系列因其独特的数字版权管理技术和始终在线的网络连接而被视为难…

男子端午节爬野山迷路,还执意自己找路!27人冒雨搜山救援 公益救援彰显大爱

5月31日端午节,在北京房山的一处野山中,一名男子登山迷路却不想麻烦救援队,坚持要自己摸索下山。男子曾向警方询问下山道路,但拒绝了蓝天救援队的帮助。然而不久后,他再次联系救援队请求援助,称自己过于自信,但找不到路。尽管被困男子最初未请求救援,房山蓝天救援队出于…

中山漫展 女童暴露服装引争议

中山漫展 女童暴露服装引争议!6月1日,在广东中山漫展现场,观众看到两名女童身着暴露服装参加付费直播活动,纷纷提出质疑。微信公众号“中山博览中心”5月27日发文称,5月31日至6月1日10点-17点,将在中山博览中心前厅和综合展厅举行“2025中山AS24端午动漫嘉年华”活动。文…

前端八股之CSS

CSS 盒子模型深度解析与实战 一、盒子模型核心概念 Box-sizing CSS 中的 box-sizing 属性定义了引擎应该如何计算一个元素的总宽度和总高度 语法: box-sizing: content-box|border-box|inherit:content-box 默认值,元素的 width/height 不包含paddi…

渊龙靶场-sql注入(数字型注入)

1.开局请求抓包 测试点如上图,测试注入,存在注入。 2.查询列数 我们再查他多少列 ,最后测试为为2列。 3.查询回显位 发现均可以回显 4.查询表 插入语句查询表和数据库 union select database(),group_concat(table_name) FROM information_schema.t…

Linux内核体系结构简析

1.Linux内核 1.1 Linux内核的任务 从技术层面讲,内核是硬件和软件之间的一个中间层,作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。从应用程序的角度讲,应用程序与硬件没有…

ESP-IDF 离线安装——同时存在多个版本以及进行版本切换的方法

一、离线安装包的下载方法 ESP-IDF离线安装包下载链接 我下载了下面三个版本进行测试 二、离线安装包的安装方法 1.创建文件夹 创建ESP-IDF文件夹,并为不同版本的IDF分别创建一个文件夹,如下图所示 2.双击离线安装包(以5.0版本为例&am…

企业数实产业技术融合数据(2000-2024)

1943 企业数实产业技术融合(2000-2024) 数据简介 当前,高质量发展成为经济发展主赛道,新质生产力不仅是经济转型的关键力量 ,更是引领新兴战略性产业、提高国家竞争力的核心要素。在全球经济动荡格局中,发展新质生产力对推动高…

CANoe Trace中DLC和Data length的区别

✅ 1. DLC 与 Data Length 的区别 字段名含义备注DLC (Data Length Code)指示该 CAN 帧声明的数据长度(0~8)这是 报文头中的信息Data LengthCANoe 实际提取并显示的 Data 字节数量一般是 等于 DLC,但有例外(如下) ✅ …

简单了解string类的特性及使用(C++)

string的特性 string类不属于STL,它属于标准库 但由于它具有数据结构的特性,所以从归类的角度,可以将string类归类到容器里面去 在C标准库中,std::string 是一个特化的类型,实际上是 std::basic_string 的别名。std…

【stm32开发板】PCB模块化布局

一、DCDC电路布局规则 通顺 抗干扰 1.通顺 流过大电流的路径尽可能的短 2.抗干扰 可以在反馈线附近加过孔,增强抗干扰能力 二、PCB布局 1、将原理图转到PCB 2.点击应用修改 3.修改规则 将mm改成mil 将安全间距里的填充区域/泪滴的导线间距改为6,还…

【性能调优系列】深入解析火焰图:从基础阅读到性能优化实战

博客目录 一、火焰图基础:结构与阅读方法二、深入分析火焰图:关键观察点与性能瓶颈识别1. 识别最宽的函数块2. HTTP 请求处理分析3. 数据库操作分析4. 业务逻辑分析 三、性能优化实战:从火焰图到解决方案1. 线程池性能优化2. 数据库访问优化3…

AI智能体|扣子(Coze)搭建【合同/文档审查】工作流

你好,我是偶然!前段时间工作上发生了重大的调整,导致我停更超一周。 但在这段时间里,我也有了一些自己的职场上的感悟,下面我分享给你,再给你分享今天的智能体。 不要怕任何的人和事,为什么怕&a…

家政维修平台实战12搭建服务详情功能

目录 1 创建页面2 搭建布局2.1 搭建背景容器2.2 添加内容区域2.3 配置服务项目图片2.4 搭建标题和价格2.5 搭建服务详情 最终效果总结 上一篇我们介绍了服务规格的搭建过程,有了后台功能并且维护好数据之后,我们就可以开发服务详情页面了,先看…

回测效率提升500%!khQuant打板策略回测性能深度剖析——基于miniQMT的回测系统深度优化【AI量化第29篇】

我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现股票自动交易,目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统(KhQuant 是其核心框架)。 一、…

2025年上半年各地都发布了哪些电竞政策?虎牙Hyper电竞嘉年华引领新趋势

近日,2025虎牙Hyper电竞嘉年华正式宣布将于6月21日至22日在成都欢乐谷主题公园举行。这场盛会融合了电竞、文旅与乡村振兴,由新华社国家重点实验室主办,新华优品作为支持平台。活动不仅将呈现精彩的电竞比赛,还将通过直播展示乡村美景、特色农产品以及村民的热情好客。作为…

黄金直线拉升 国际金价跳空高开

6月2日,受特朗普关税政策影响,国际金价跳空高开,截至发稿前已经超过3340美元。今年以来,国际金价累计上涨约25.5%。截至当天上午10:30,各大银行和品牌金条价格普遍上涨,周生生、中国黄金、水贝等品牌的金条价格都有所上升。其中,周生生的涨幅最大,较前一天上涨了6元/克…

德约科维奇法网100胜 晋级八强续写辉煌

德约科维奇在法网男单1/8决赛中直落三盘击败英国名将诺里,顺利晋级八强。接下来他将与兹维列夫争夺四强席位。此前,德约科维奇五次对阵诺里均取得胜利。比赛中,德约科维奇首盘迅速破发并以6比2赢得第一盘。第二盘,尽管诺里一度领先,但德约科维奇迅速回破并以6比3再下一城。…