ES架构模型

南墨1年前技术文章596

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会从物理上移除。


相关文章

MongoDB的MMAPv1存储引擎

 在MongoDB 3.0之前,默认存储引擎为MMAPv1。从MongoDB 4.0开始,MMAPv1存储引擎开始被遗弃。MMAPv1是基于内存映射文件的原始存储引擎。一、journal1、将数据写入...

分布式存储-GlusterFS

分布式存储-GlusterFS

一、分布式存储介绍我们知道NAS是远程通过网络共享目录, SAN是远程通过网络共享块设备。那么分布式存储你可以看作拥有多台存储服务器连接起来的存储输出端。把这多台存储服务器的存储合起来做成一个整体再通...

PG的多版本并发控制(二)

PG的多版本并发控制(二)

二、 PG数据库DML操作的相关概念xmin、xmax、cmin、cmax是每个数据行tuple上的隐藏字段,主要用于区别不同事务以及相同事务内tuple的行版本。在了解这四个参数概念前,我们首先需要...

kubernetes dashboard

kubernetes dashboard

1、背景Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。你可...

CDP实操--配置KNOX SSO(五)

CDP实操--配置KNOX SSO(五)

1.1配置Atlas的SSO身份验证在Knox SSO的topology里配置Knox与LDAP集成认证如下,并重启Knox服务role=authenticationauthentication.na...

ES运维(三)架构与规划(阿里云)

ES运维(三)架构与规划(阿里云)

1、 阿里云Elasticsearch架构图阿⾥云Elasticsearch和Kibana容器化运⾏在ECS中,监控agent(独⽴进程)负责收集监控指标,通过SLS发送给云监控完成监控报警。实例之间...

发表评论    

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