ES架构模型

南墨5个月前技术文章138

1.整体架构

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

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

集群服务职责规划:

1.       MasterElasticsearch的主节点,负责Master选举和集群管理。

2.       NodeElasticsearch的数据节点,负责数据索引和搜索。

2.       ZooKeeper:服务维护安全模式下Elasticsearch集群的认证与鉴权等相关信息。

image.png

 

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

2. 索引流程

写入索引流程如3所示。

image.png

 

过程描述:

1.       客户端发送一个请求给任意节点,假设是Node 1

2.       Node 1通过请求判断出该文档应该被存储的分片,假设是shard 0这个分片,因此Node 1会把请求转发到shard 0primary shard P0存在的Node 3节点上。

3.       Node 3shard 0primary shard P0上执行请求。如果请求执行成功,Node 3并行地将请求发给shard 0的所有存在于Node 1Node 2中的replica shard R0上。如果所有的replica shard都成功地执行了请求,那么将会向Node 3回复一个确认成功,当Node 3收到了所有replica shard的确认信息后,则向用户返回一个Success消息。

3. 查询流程

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

查询阶段流程如所示。

image.png

 

过程描述:

1.       客户端发送一个检索请求给任意节点,假设是Node 3

2.       Node 3将检索请求发送给该index中的每一个shard,此时会采取轮询策略,在primary shard及其所有replica shard中随机选择一个,让读请求负载均衡。每个shard在本地执行检索,并将结果排序添加到本地。

3.       每个shard返回本地所记录的结果,发送给Node 3Node 3将这些值合并,做全局排序。

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

图1-4 提取阶段流程

image.png

 

过程描述:

1.       Node 3获取了所有待检索数据的定位之后,发送请求给与数据相关的shard

2.       每个收到Node 3请求的shard,将读取相关文档中的内容,并将它们返回给Node 3

3.       Node 3获取到了所有shard返回的文档后,Node 3将它们合并成一条汇总结果,返回客户端。

4. 基本概念

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

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

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

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

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

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

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


相关文章

Hive小文件合并

hive 小文件合并一、参数配置:在Map输入的时候, 把小文件合并.-- 每个Map最大输入大小,决定合并后的文件数 set mapred.max.split.size=256000000; -...

NameSpaces状态一直为Terminating

NameSpaces状态一直为Terminating

问题描述删除ingress-nginx后发现ingress-nginx的命名空间一直为销毁中,大致查看了下发现命名空间中已经没有其他资源。该状态已经持续了十几个小时强制删除命名空间```Plain T...

数据湖技术之iceberg(六)Iceberg表数据组织与查询

数据湖技术之iceberg(六)Iceberg表数据组织与查询

1     Iceberg表数据组织与查询1) 下载avro-tools jar包由于后期需要查看avro文件内容,我们可以通过avro-tool.jar来查看...

压测实操--TestDFSIO压测hdfs读写方案

压测实操--TestDFSIO压测hdfs读写方案

TestDFSIO主要是对hdfs的I/O性能进行测试,通过使用MapReduce作业来完成测试,作为并行读写文件进行I/O性能测试。每个map任务用于读或写每个文件,map的输出用于收集与处理文件相...

PG的锁(三)

六、锁的维护6.1 锁相关参数deadlock_timeout(integer):默认1s,表示pg数据库仅对锁超时大于1s的情况进行死锁检测。log_lock_waits : 默认关闭,若打开该参数...

数据湖技术之iceberg(三)Iceberg数据存储格式

数据湖技术之iceberg(三)Iceberg数据存储格式

1  Iceberg数据存储格式1.1.  Iceberg术语l   data files(数据文件):数据文件是Apache Iceberg表真实存储数据的文...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。