ES架构模型

作者:南墨

1.整体架构

Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速、近实时地存储、搜索和分析大量数据。它通常用作支持具有复杂搜索功能和需求的应用程序的底层引擎/技术。Elasticsearch服务的主要组成部分如图3-1所示。

对Elasticsearch Nodes进行了种类划分:EsMaster、EsNode1~9和EsClient。在安全模式下Elasticsearch具备基于用户/角色划分的安全认证与鉴权功能。

集群服务职责规划:

  1. Master:Elasticsearch的主节点,负责Master选举和集群管理。
  2. Node:Elasticsearch的数据节点,负责数据索引和搜索。
  3. ZooKeeper:服务维护安全模式下Elasticsearch集群的认证与鉴权等相关信息。

本文重点关注的是Elasticsearch写入索引和查询数据的性能问题,基于以上的组件框架图,下面来了解一下Elasticsearch写入索引和查询索引数据的具体流程。

2. 索引流程

写入索引流程如图3所示。

过程描述:

  1. 客户端发送一个请求给任意节点,假设是Node 1。
  2. Node 1通过请求判断出该文档应该被存储的分片,假设是shard 0这个分片,因此Node 1会把请求转发到shard 0的primary shard P0存在的Node 3节点上。
  3. Node 3在shard 0的primary shard P0上执行请求。如果请求执行成功,Node 3并行地将请求发给shard 0的所有存在于Node 1和Node 2中的replica shard R0上。如果所有的replica shard都成功地执行了请求,那么将会向Node 3回复一个确认成功,当Node 3收到了所有replica shard的确认信息后,则向用户返回一个Success消息。

3. 查询流程

Elasticsearch查询流程分为两个阶段,即查询(query)阶段与提取(fetch)阶段。

查询阶段流程如图所示。

过程描述:

  1. 客户端发送一个检索请求给任意节点,假设是Node 3。
  2. Node 3将检索请求发送给该index中的每一个shard,此时会采取轮询策略,在primary shard及其所有replica shard中随机选择一个,让读请求负载均衡。每个shard在本地执行检索,并将结果排序添加到本地。
  3. 每个shard返回本地所记录的结果,发送给Node 3。Node 3将这些值合并,做全局排序。

查询阶段主要定位了所要检索数据的具体位置,而提取阶段的任务就是将这些定位好的数据内容取回并返回给客户端。提取阶段如下图所示。

过程描述:

  1. Node 3获取了所有待检索数据的定位之后,发送请求给与数据相关的shard。
  2. 每个收到Node 3请求的shard,将读取相关文档中的内容,并将它们返回给Node 3。
  3. 当Node 3获取到了所有shard返回的文档后,Node 3将它们合并成一条汇总结果,返回客户端。

4. 基本概念

Index:即索引,是Elasticsearch中一个逻辑命名空间,指向一个或多个分片,内部Apache Lucene实现索引中数据的读写。索引与关系数据库实例Database相当。一个Elasticsearch实例可以包含多个索引。

Type:文档类型,文档类型使得同一个索引中在存储结构不同的文档时,只需要依据文档类型就可以找到对应的参数映射信息,方便文档的存储。相当于数据库中的Table。一个索引对应一个文档类型。

Document:文档,是可以被索引的基本单位,特指最顶层结构或根对象序列化成的JSON数据。相当于数据库中的Row。一个类型包含多个文档。

Mapping:映射,用来约束字段的类型,可以根据数据自动创建。相当于数据库中的Schema。

Primary Shard:主分片,索引中的每个文档属于一个单独的主分片,主分片的数量决定了索引最多能存储多少数据。

Rreplica Shard:即复制分片,它是主分片的一个副本,可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。

Segments:Lucene index是由许多segments构成,每个segment都是一个write-once,read many times(类似于HDFS文件,写完后不可修改)。每个segment都是一个小的Lucene index。Segment merge就是利用多个小的segments来合并为一个大的、新的segment的过程,新的segment包含有旧的segments。每次merge消耗资源大,因为lucene要重写它。在删除docement的过程中,其实Lucene只是将该document标记为deleted,然后在segment merge的过程中,被标记为deleted的docment会从物理上移除。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

相关推荐
咩咩啃树皮6 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
大模型码小白7 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
CS创新实验室8 小时前
量子计算机的操作系统:原理、实践与经典架构之对比
架构·操作系统·量子计算
人间凡尔赛8 小时前
WAIC 2026 落幕,AI Agent 开发已进入 Harness 架构时代
人工智能·架构
极客侃科技9 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
晏宁科技YaningAI9 小时前
VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析
网络·人工智能·架构·系统架构·信息与通信
阿里云大数据AI技术10 小时前
更快、更稳、更省:揭秘阿里云 Elasticsearch 存算分离与弹性扩缩
elasticsearch
剑之所向10 小时前
前后端分离架构
架构
延凡科技10 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
ifenxi爱分析11 小时前
爱分析最新报告解读:AI数据基础设施与数据中台的区别
大数据·人工智能