论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
云原生
›
Elasticsearch架构原理快速了解
Elasticsearch架构原理快速了解
缠丝猫
论坛元老
|
2024-10-4 04:57:49
|
显示全部楼层
|
阅读模式
楼主
主题
1007
|
帖子
1007
|
积分
3021
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
目录
一、ES的简单了解
(一)直面Elasticsearch
(二)Elasticsearch和关系型数据库的对比
二、基本概念回顾
(一)索引、文档、字段的概念
(二)映射
(三)集群和节点
(四)分片和副分片
(五)DSL
三、架构原理
(一)节点职责
(二)主分片和副分片
(三)路由盘算
Routing值
路由盘算公式
路由的目的
路由的自界说和灵活性
案例举例
(四)ES写文档的过程
(五)ES读文档的过程
四、基本问题的反思
(一)ES是怎样提升数据的高可用性的呢?
(二)ES怎样提升服务的高并发性能呢?
干货分享,感谢您的阅读!
一、ES的简单了解
(一)直面Elasticsearch
Elasticsearch(通常简写为ES)是一个开源的分布式搜索和分析引擎,它被设计用于快速、及时地搜索和分析大规模数据。以下是对Elasticsearch的简单了解:
分布式搜索引擎:Elasticsearch是一个分布式体系,它可以在多个节点上运行,允许你存储和搜索大量的数据。这使得它非常适合处置惩罚日志、文档、地理空间数据等各种类型的信息。
文本搜索:Elasticsearch是一个强大的文本搜索引擎,它可以高效地搜索和匹配文本数据。它支持全文搜索、模糊搜索、多字段搜索等功能,使得用户可以轻松地构建搜索引擎、保举体系和数据分析应用。
及时性:Elasticsearch支持及时搜索,这意味着当你添加、更新或删除文档时,你可以立刻在搜索结果中看到变化,这对于监控、日志分析和及时报告非常有用。
多种数据类型支持:Elasticsearch不但支持文本数据搜索,还支持地理空间数据、数值数据、日期和时间数据等多种数据类型的搜索和分析。
弹性和可扩展性:Elasticsearch是弹性的,你可以根据必要添加或删除节点,以顺应不停增长的数据和负载。它还具有自动分片和复制机制,以确保数据的高可用性和可扩展性。
RESTful API:Elasticsearch提供了一个易于使用的RESTful API,使得与其交互变得简单。你可以使用HTTP请求来实行各种操纵,比方索引文档、实行搜索查询、管理索引和节点等。
生态体系:Elasticsearch是Elastic公司的一个产物,它是ELK(Elasticsearch、Logstash和Kibana)堆栈的一部分,用于日志收集、分析和可视化。此外,有丰富的插件和工具,可以扩展Elasticsearch的功能。
Elasticsearch在多个领域中都有广泛的应用,包罗搜索引擎、日志和变乱数据分析、业务智能、监控和仪表板制作等。无论是构建及时搜索引擎照旧分析大规模数据,Elasticsearch都是一个非常有代价的工具。
更多基本的了解可以见ES初识学习与简单实践总结-CSDN博客。
(二)Elasticsearch和关系型数据库的对比
Elasticsearch和关系型数据库是两种差别类型的数据存储体系,它们在数据模子、用途和功能上有一些显著的区别。以下是Elasticsearch和关系型数据库的对比:
数据模子
:
Elasticsearch
:Elasticsearch是一个面向文档的分布式搜索引擎。它的数据模子基于文档,每个文档是一个包含了JSON格式数据的独立单元。文档可以属于差别的索引,每个文档可以具有差别的结构。
关系型数据库
:关系型数据库使用表和行的结构来存储数据。表必要界说模式(Schema),全部行都必须遵循雷同的结构。
查询语言
:
Elasticsearch
:使用DSL(Domain-Specific Language)进行查询,这是一种结构化的查询语言,特殊适用于全文搜索、及时数据分析和地理空间查询。
关系型数据库
:通常使用SQL(Structured Query Language)进行查询,适用于结构化数据的查询和操纵。
搜索和全文检索
:
Elasticsearch
:专注于全文搜索和复杂查询,支持分词、模糊搜索、短语匹配等高级搜索功能。
关系型数据库
:虽然关系型数据库也可以进行搜索,但不如Elasticsearch在全文搜索和复杂搜索方面高效。
及时性
:
Elasticsearch
:支持及时索引,可以在文档添加、更新或删除时立刻反映变化。
关系型数据库
:通常更适用于批处置惩罚和事务性操纵,及时性可能较低。
可扩展性
:
Elasticsearch
:具有良好的横向扩展性,可通过添加更多的节点来处置惩罚大规模数据和高负载。
关系型数据库
:通常更适用于单节点或垂直扩展,横向扩展性较差。
数据同等性
:
Elasticsearch
:在分布式环境中夸大性能和及时性,可能捐躯了同等性。它使用分片和副本来进步可用性,但在网络分区等环境下可能会出现数据不同等。
关系型数据库
:通常夸大ACID(原子性、同等性、隔离性、长期性)事务,确保数据同等性。
用途
:
Elasticsearch
:适用于全文搜索、及时日志分析、监控、数据分析、地理信息体系(GIS)等必要高级搜索和及时性的应用。
关系型数据库
:适用于事务性应用、数据管理、企业应用等传统的关系型数据存储需求。
总的来说,Elasticsearch和关系型数据库在用途上有差异,选择取决于你的详细需求。通常环境下,Elasticsearch更适合必要全文搜索和及时性的应用,而关系型数据库更适用于事务性和结构化数据管理。偶然候,也可以将它们联合使用,根据需求选择最合适的工具。
二、基本概念回顾
当使用Elasticsearch时,有一些基本概念是很重要的,下面是一些ES基本概念的回顾:
(一)索引、文档、字段的概念
当使用Elasticsearch时,明确以下核心概念非常重要:索引(Index)、文档(Document)和字段(Field)。以下是对这些概念的详细先容和明确:
索引(Index)
概念
:索引是Elasticsearch中的一个逻辑容器,用于构造和存储相干的文档数据。它类似于关系数据库中的表,但更灵活。
明确
:可以将索引看作是一个大型数据集的容器,用于存储相似类型的数据。比方,你可以创建一个名为"products"的索引,用于存储产物信息。
文档(Document)
概念
:文档是存储在索引中的基本数据单元,通常以JSON格式表示。每个文档代表了一个独立的数据记载。
明确
:文档类似于关系数据库中的一行记载。比方,在"products"索引中,每个文档可以代表一个产物,包罗产物的名称、描述、价格等信息。
字段(Field)
概念
:字段是文档中的数据项,它们包含了文档的详细信息。每个字段都有一个名称和一个对应的值。
明确
:在一个文档中,每个字段代表了一个属性或特性,比方,一个产物文档可以包含字段如“productName”、“productDescription”、“price”等,每个字段存储相干信息。
综合起来,可以将这些概念视为构造和存储数据的条理结构:
一个
索引
可以包含多个
文档
,这些文档代表了差别类型的数据。
每个
文档
包含多个
字段
,每个字段存储文档的详细数据。
这种条理结构的弹性和灵活性使得Elasticsearch非常适合处置惩罚大规模、异构数据,并且具有强大的搜索和分析功能。通过明确这些概念,你可以更好地构造、检索和分析你的数据。
(二)映射
映射(Mapping)是Elasticsearch中的一个重要概念,它用于界说索引中文档的结构和字段的属性。映射指定了每个字段的数据类型、怎样分析文本、是否存储原始数据等信息。以下是关于映射的详细先容:
字段的数据类型
:映射确定了每个字段的数据类型,比方文本、数值、日期、布尔值等。指定精确的数据类型有助于Elasticsearch精确地索引和搜索数据。
分析器(Analyzer)
:对于文本字段,映射可以指定使用哪种分析器来处置惩罚文本数据。分析器决定了怎样将文本拆分成词条,以及怎样处置惩罚这些词条,比方小写化、删除停用词等。
存储选项
:映射可以指定是否将字段的原始值存储在索引中。存储原始值可以进步检索性能,但会占用更多的存储空间。
多值字段
:映射允许你指定字段是否可以包含多个值,这对于数组或多选字段非常有用。
日期格式
:对于日期字段,映射可以界说日期的格式,以确保精确的日期解析和排序。
自界说字段属性
:你还可以在映射中界说自界说字段属性,比方字段的权重、是否可搜索、是否可排序等。
嵌套对象
:映射允许你在文档中包含嵌套对象,这些对象可以具有本身的字段和映射。
映射的精确界说对于Elasticsearch的性能和数据质量非常重要。它确保了索引中的文档被精确地存储和检索,并允许实行高级的搜索和分析操纵。通常,映射可以自动创建,但在必要更精细的控制时,也可以手动界说映射。
(三)集群和节点
在Elasticsearch中,集群(Cluster)和节点(Node)是两个核心的概念,用于管理和处置惩罚数据。以下是有关集群和节点的详细表明:
集群(Cluster)
概念
:集群是一个或多个节点的集合,它们协同工作以存储和处置惩罚数据。集群是Elasticsearch的最高级别的构造单元。
用途
:集群用于处置惩罚大规模数据,提供高可用性和容错性。它允许将数据分布在多个节点上,从而实现数据的程度扩展和负载均衡。
特点
:集群有一个唯一的名称,它可以包含恣意数目的节点。集群中的节点可以加入或离开,使得集群可以动态调解以顺应差别的负载。
节点(Node)
概念
:节点是集群中的单个实例,它可以是物理服务器或假造呆板。每个节点是一个独立的Elasticsearch实例,具有本身的配置和角色。
用途
:节点用于存储数据和实行搜索操纵。每个节点负责管理分配给它的数据分片,并响应来自客户端的查询请求。
特点
:每个节点有一个唯一的名称,可以配置为具有差别的角色,比方主节点(Master Node)、数据节点(Data Node)、和谐节点(Coordinator Node)等。差别的角色决定了节点的功能。
集群是多个节点的集合,用于协同工作以存储和处置惩罚数据,提供高可用性和扩展性。节点是集群中的独立实例,负责详细的数据存储和搜索任务。
(四)分片和副分片
在Elasticsearch中,分片(Shard)和副本分片(Replica Shard)是关于数据存储和可用性的重要概念。它们允许你将数据分散存储在多个节点上,以进步性能和容错性。
分片(Shard)
概念
:分片是将索引中的数据分割成更小的部分的方式。每个索引可以分成多个主分片,这些主分片之间是独立的数据单元。
用途
:分片用于程度扩展数据存储和搜索性能。当索引的大小凌驾单个节点的处置惩罚本领时,分片使得数据可以分布在多个节点上。
特点
:默认环境下,每个索引有5个主分片。你可以在创建索引时指定分片的数目,但一旦创建,分片数目就不能更改。
副本分片(Replica Shard)
概念
:副本分片是主分片的精确复制。每个主分片可以有零个或多个副本分片。副本分片包含了主分片的完备拷贝。
用途
:副本分片用于进步数据的可用性和容错性。假如主分片丢失或不可用,副本分片可以顶替它,确保数据不会丢失。
特点
:副本分片的数目可以在索引创建后随时更改,以进步可用性和性能。通常,每个主分片至少有一个副本。
分片和副本分片是Elasticsearch中用于数据管理和可用性的关键概念。分片允许程度扩展数据,副本分片提供了数据的冗余和容错性。
一个分片的主分片和副分片分别存储在差别的盘算机上,如上图为一个三个节点的集群,某索引设置了3个主分片,每个主分片分配了两个副分片,P表示该分片的主分片,R表示该分片的副分片,P和R后面的数字表示其编号。在极端环境下,当有一个节点时,假如索引的副分片个数设置大于1,则体系只分配主分片,而不会分配副分片。
(五)DSL
在Elasticsearch中,DSL代表"Domain-Specific Language"(领域特定语言),它是一种用于构建和实行复杂查询的结构化查询语言。DSL允许用户以非常灵活和精确的方式界说搜索和分析操纵。DSL是Elasticsearch查询的核心组成部分,用于与Elasticsearch进行交互,从而检索和操纵数据。
DSL查询通常以JSON(JavaScript Object Notation)格式编写,因此它是一种使用JSON语法的查询语言。DSL查询由一个或多个查询子句组成,这些子句界说了搜索的条件、过滤条件、聚合操纵等。以下是DSL查询中常见的一些查询子句和其作用:
Match Query
:用于实行全文搜索,根据文本匹配度对文档进行排序。
Term Query
:用于精确匹配字段的值,不实行分析。
Range Query
:用于匹配指定范围内的数值或日期字段。
Bool Query
:允许组合多个查询子句,使用布尔逻辑(AND、OR、NOT)来构建复杂的查询。
Filter
:用于精确过滤文档,不影响文档的相干性排序。
Aggregations
:用于实行数据分析操纵,比方汇总、平均值、求和、直方图等。
Nested Query
:用于在嵌套文档中实行查询。
Geo Queries
:用于地理位置数据的查询,如地理坐标和地理形状。
DSL查询非常强大且灵活,允许根据详细的搜索和分析需求构建高级查询。它是Elasticsearch的一个关键特性,用于创建强大的搜索引擎和数据分析应用。通过构建复杂的DSL查询,可以精确地检索和分析数据,以满足差别的用例和业务需求。
三、架构原理
Elasticsearch的架构原理允许用户构建高性能、可扩展、及时的搜索和分析体系。然而,分布式体系的管理和维护可能具有一定的复杂性,必要谨慎规划和配置,以确保数据的完备性和性能。
(一)节点职责
Elasticsearch中的节点可以饰演差别的职责,根据其角色和配置,以下是常见的ES节点职责分析:
主节点(Master Node)
主要职责
:主节点负责集群的管理和和谐,包罗索引和分片的创建、删除、重新分配等。它还负责维护集群状态信息。
配置特点
:通常,一个集群中只有一个主节点,但可以有多个备用主节点以提供冗余和高可用性。
数据节点(Data Node)
主要职责
:数据节点负责存储索引数据和实行搜索操纵。它们存储分片的副本,以提供高可用性。数据节点也负责处置惩罚文档的索引和删除操纵。
配置特点
:一个集群可以有多个数据节点,详细数目取决于集群规模和性能需求。
和谐节点(Coordinator Node)
主要职责
:和谐节点不存储数据,但负责接收来自客户端的搜索和查询请求,然后将请求分发到适当的数据节点。这有助于减轻数据节点的负载。
配置特点
:可以在大型集群中引入和谐节点,以处置惩罚大量的搜索请求。
候选主节点(Candidate Master Node)
主要职责
:候选主节点是潜伏的主节点候选者,当主节点失败时可以自动接管主节点的角色。它们有本领成为主节点,但不会主动参与主节点的选举。
配置特点
:通常,每个节点都是候选主节点,但只有一个会成为活动主节点。
差别的节点角色和配置允许Elasticsearch在差别的用例和环境中发挥其强大的搜索和分析本领。根据需求和性能目标,可以选择配置适当数目和类型的节点,以构建高性能、高可用性的ES集群。
主节点(Master Node)、数据节点(Data Node)和和谐节点(Coordinator Node)三种节点类型通常是Elasticsearch集群中的核心节点,它们协同工作以实现数据存储、搜索和和谐
。
为了降低Elasticsearch集群的负载并更好地处置惩罚大量搜索请求,可以配置某些节点作为专门的和谐节点。这些和谐节点不负责存储数据,而是负责接收来自客户端的搜索和查询请求,并将这些请求转发到包含实际数据的数据节点上。
配置和谐节点
:
创建和谐节点配置文件
:起首,创建一个新的Elasticsearch配置文件,通常可以在集群中的节点上创建一个新的配置文件。
配置节点类型
:在配置文件中,指定节点的类型为"coordinating-only"。这告诉Elasticsearch这是一个专门的和谐节点,不会存储数据。
node.master: false
node.data: false
node.ingest: false
复制代码
配置其他设置
:根据必要,可以配置其他节点设置,如网络绑定、HTTP端口等。
启动节点
:使用配置文件启动和谐节点。确保节点成功加入集群。
和谐节点的作用分析
:
负载均衡
:和谐节点的主要作用是分发搜索和查询请求到数据节点,从而实现负载均衡。这有助于减轻数据节点的负担,特殊是在处置惩罚大量并发请求时。
减少网络开销
:和谐节点可以减少客户端与数据节点之间的网络开销。客户端只需与和谐节点通信,和谐节点负责将请求发送到适当的数据节点,然后将结果返回给客户端。
隔离查询层和数据层
:和谐节点的存在将查询逻辑与数据存储分开,使得可以更容易管理和调解每个层的性能和资源。
进步安全性
:和谐节点可以用作防火墙前端,允许你在和谐节点上实行访问控制和安全策略,以掩护数据节点免受未经授权的访问。
和谐节点在Elasticsearch集群中起到非常重要的作用,特殊是在大规模集群和高并发环境中。它们可以有用降低数据节点的负载,进步集群的性能和可伸缩性。配置和谐节点是一种智能的方式来优化Elasticsearch集群的性能和资源利用率。
(二)主分片和副分片
Elasticsearch为了支持分布式搜索和进步高可用性,采用了以下机制:
数据分片:索引被分成多个分片,每个分片可拥有零个或多个副本。这些分片和副本分散在差别的节点上,增强了数据的可用性和并发性能。
主分片和副本:每个分片包罗一个主分片和其可能的多个副本分片。主分片负责存储数据,副本分片提供冗余和高可用性。假如主分片所在节点宕机,某个副本分片将晋升为主分片以继续提供服务。
这种分布式结构允许Elasticsearch在多个节点上同时实行搜索和查询操纵,进步了性能和吞吐量。此外,副本分片确保数据的冗余性,防止了单点故障。当主分片不可用时,体系可以或许敏捷切换到副本分片,确保数据的持续可用性。这些机制一起使得Elasticsearch成为一款强大的分布式搜索和分析引擎。
我们再次将视角拉回到上面的简单集群,假如node1发生故障宕机,集群感知到分片0的主分片P0将要丢失,此时集群会立刻将其他节点(如node3)上的分片0对应的副分片R0作为主分片P0进行服务。集群中由node2和node3对外提供服务,全部的分片相干的服务不受影响。
假如node1恢复了服务并加入集群中,由于在node1上还保留有分片0的数据,此时node1上的分片P0会变成副分片R0,在此期间缺失的数据会通过node3上的主分片P0进行补充。并且node1上的分片R1和R2也会分别从node3和node2上对应的P1和P2分片上补充数据,如下图所示:
当客户端对某个索引的请求被分发到ES的和谐节点时,和谐节点会将请求进行转发,转发的对象是包含这个索引的全部分片的部分节点。和谐节点中有一份分片-节点路由表,该表主要存放分片和节点的对应关系。和谐节点采用轮询算法,选取该索引的主/副分片所在的节点进行请求转发。一个索引的主分片设定后就不能再修改,假如想继续提升索引的并发性能,则可以增长索引的副分片个数,此时和谐节点会将这些副分片加入轮询算法中。
(三)路由盘算
Elasticsearch的路由盘算是指确定文档应该存储在哪个主分片上的过程。路由盘算使用一个叫做routing的值来决定文档的归属,然后将文档路由到相应的主分片。
Routing值
routing 是一个用户或应用程序界说的值,通常用于标识文档应该被路由到哪个主分片。
routing 可以是任何字符串或数字,通常是与应用程序中的特定逻辑相干的标识符,比如用户ID、产物ID、地理位置等。
客户端在写入文档时可以明确指定 routing 值,也可以让Elasticsearch根据文档内容自动盘算。
路由盘算公式
Elasticsearch使用以下路由盘算公式来确定文档的路由目标主分片:
shard = hash(routing) % number_of_primary_shards
hash(routing) 表示对 routing 值进行哈希盘算,以得到一个哈希码。
% number_of_primary_shards 表示取哈希码与主分片数目取模的结果,从而确定目标主分片的编号。
路由的目的
路由的目的是将文档均匀地分布到索引的各个主分片上,以实现数据的分散存储和负载均衡。
良好的路由策略可以确保索引数据在差别主分片上的分布较为均匀,避免了数据倾斜,进步了性能和可扩展性。
路由的自界说和灵活性
客户端可以根据应用程序的需求自界说 routing 值,以控制文档的路由。
Elasticsearch还支持使用自界说的路由盘算器,允许应用程序界说更复杂的路由策略,以满足特定的业务需求。
总之,Elasticsearch的路由盘算机制允许根据文档的 routing 值将数据路由到适当的主分片上,以实现数据的分布式存储和负载均衡。当一个文档必要被写入Elasticsearch索引时,路由盘算用于确定该文档应该存储在哪个主分片上。
案例举例
以下是一个示例,以资助更清晰地明确路由盘算的工作原理:
假设有一个名为 "user" 的索引,它有5个主分片(number_of_primary_shards为5)。如今,我们要将一个用户的信息文档写入到这个索引中,并使用用户的ID来作为 routing 值。用户ID可以是任何字符串或数字,但为了示例简化,我们使用数字:
文档信息
:
用户ID: 12345
文档内容: 用户名、电子邮件等用户信息
路由盘算
:
我们使用以下路由盘算公式来确定文档的目标主分片:
shard = hash(routing) % number_of_primary_shards
在示例中,用户ID为12345,所以 routing 值就是12345。接下来,我们将盘算哈希值:hash(12345),得到一个哈希码。假设哈希码为3,然后我们取哈希码与主分片数目5取模:3 % 5,结果为3。
结果
:
根据路由盘算,文档应该路由到主分片3上。和谐节点将该写入请求发送到负责主分片3的数据节点,然后数据节点存储该文档。
通过这个路由盘算过程,Elasticsearch确保文档被均匀地分布到索引的各个主分片上,实现了数据的分散存储。这有助于进步性能、负载均衡和高可用性,由于数据存储在差别的节点上,同时也确保了数据冗余,以应对节点故障。这是Elasticsearch分布式架构的核心部分。
(四)ES写文档的过程
当Elasticsearch的和谐节点接收到客户端发送的写入文档请求,它会实行以下关键步骤来确保文档的成功写入:
1.路由盘算
和谐节点起首实行路由盘算,这是通过一定的路由算法来确定文档应该存储在哪个主分片上。
路由盘算通常使用文档的routing值来盘算目标主分片,确保文档被分配到精确的位置。
2.写入主分片
和谐节点将写入请求转发到目标主分片所在的数据节点。目标主分片负责实际存储文档。
数据节点将文档写入主分片的Lucene索引,确保文档的长期化存储。
3.主分片副本同步
假如索引配置了副本分片,主分片在写入后会将数据同步到全部副本分片所在的节点。这确保了数据的冗余性和高可用性。
同步操纵确保即使某个节点发生故障,数据仍然可用。
4.写入确认
一旦主分片和全部副本分片都成功写入文档,数据节点会向和谐节点发送写入确认。
和谐节点知道文档已经成功写入索引。
5.响应客户端
和谐节点将写入成功的确认信息发送给客户端,以通知客户端文档已经成功写入索引。
完全同等性
Elasticsearch确保写入操纵的完全同等性。这意味着只有在主分片和全部副本分片都成功写入后,写入操纵才会被确认为成功。这确保了数据的可靠性。
高可用性
主分片和副本分片的机制确保了数据的高可用性。即使在节点故障的环境下,数据仍然可以从副本分片中检索。
这个过程确保了文档的安全写入和长期存储,同时保障了数据的高可用性和同等性。Elasticsearch的写入操纵是其分布式性能和可用性的核心组成部分,支持及时数据的索引和检索。
上图中,一个包含3个节点的ES集群,假设索引中只有3个主分片和6个副分片,客户端向节点1发起向索引写入一条文档的请求,在本次请求中,节点1被称为和谐节点。节点1判断数据应该映射到哪个分片上。假设将数据映射到分片1上,由于分片1的主分片在节点2上,因此节点1把请求转发到节点2上。节点2接收客户端的数据并进行存储,然后把请求转发到副分片1所在的节点1和节点3上,当全部副分片所在的节点全部完成存储后,和谐节点也就是节点1向客户端返回成功标记。
(五)ES读文档的过程
Elasticsearch读取文档的过程相对简单,但仍然包罗几个关键步骤,下面是这个过程的详细分析:
1.客户端发起读取请求
当客户端必要检索一个或多个文档时,它会向Elasticsearch集群中的任何一个节点发送读取请求。
请求通常包罗索引名称、文档ID以及任何其他检索条件。
2.路由盘算
接收读取请求的节点会实行路由盘算,以确定文档存储在哪个主分片上。这通常使用文档的routing值来盘算目标主分片。
3.读取主分片
一旦目标主分片确定,节点将读取请求转发到拥有该主分片的数据节点。
数据节点从主分片的Lucene索引中检索文档数据。
4.返回文档数据
数据节点将检索到的文档数据返回给和谐节点,然后和谐节点将其通报给客户端。
客户端接收到文档数据后,可以对其进行处置惩罚或显示。
5.数据同等性和高可用性
Elasticsearch确保读取操纵的数据同等性。这意味着只有在主分片上的数据被读取后,读取操纵才会返回成功。
假如主分片不可用,Elasticsearch会自动从副本分片中选择一个来满足读取请求,以确保数据的高可用性。
6.查询处置惩罚
(可选)
在读取文档时,客户端可以使用查询条件来筛选文档,比方实行全文搜索或过滤文档。
Elasticsearch支持强大的查询语言和过滤器,允许客户端定制检索条件。
7.近及时性
读取操纵通常是近及时的,文档数据会尽快对外可见。但必要注意,在某些环境下,由于分片的同步延迟,可能会存在短暂的延迟。
8.负载均衡
Elasticsearch的和谐节点负责将读取请求路由到精确的主分片上,以实现负载均衡和高性能的检索操纵。
查询请求可以在多个节点上并行实行,以进步响应速度。
总之,Elasticsearch的读取文档过程涉及路由盘算、数据检索和返回,以及数据同等性和高可用性的保障。这使得Elasticsearch成为一个强大的及时数据检索引擎,支持在大规模数据集上实行复杂的查询操纵。
上图所示,一个包含3个节点的ES集群,假设索引中只有3个主分片和6个副分片,客户端向节点1发起向索引获取文档的请求,在本次请求中,节点1被称为和谐节点。节点1判断数据应该映射到哪个分片上。假设将数据映射到分片1上,分片1有主/副两种分片,分别在节点2、节点1和节点3上。假设此时和谐节点的轮询算法选择的是节点3,那么它会将请求转发到节点3上,然后节点3会把数据传输给和谐节点,也就是节点1,最后由节点1向客户端返回文档数据。
四、基本问题的反思
(一)ES是怎样提升数据的高可用性的呢?
Elasticsearch通过多种方式提升数据的高可用性,以确保数据在集群中的长期性和可用性。以下是一些关键的机制和策略,ES用来进步高可用性:
分片和副本
Elasticsearch将每个索引分别为多个分片(Shard),这些分片可以分布在差别的节点上,以实现数据的程度分割和负载均衡。
每个分片都可以配置多个副本分片(Replica Shard),这些副本分片存储了分片的复制,确保了数据的冗余性。假如主分片不可用,副本分片可以顶替它,保证数据的可用性。
主从架构
Elasticsearch的集群通常包罗一个主节点(Master Node)和多个数据节点(Data Node)。主节点负责管理集群的元数据,包罗索引和分片的创建和重新分配。数据节点负责存储和处置惩罚数据。
主节点选举机制确保了在主节点故障时可以或许选举出新的主节点,从而保持集群的可用性。
节点冗余性
Elasticsearch支持配置多个主节点、数据节点和和谐节点,以提供节点级别的冗余性。假如一个节点故障,其他节点可以继续处置惩罚请求。
仲裁节点(Voting-Only Node)用于进步主节点选举的可靠性,防止脑裂问题。
故障检测和自动恢复
Elasticsearch具有内置的故障检测机制,可以检测到节点的故障或不可用性。
当节点不可用时,Elasticsearch会自动重新分配分片和副本,以将数据从不可用节点中恢复到其他可用节点上。
数据长期性
Elasticsearch会将索引数据长期化到磁盘,确保数据在节点重启或瓦解后不会丢失。
定期的快照和备份策略可以资助掩护数据的长期性,并支持灾难恢复。
数据恢复策略
当新节点加入集群或旧节点重新加入集群时,Elasticsearch使用数据恢复策略来高效地将数据重新分配到节点上,以加快数据的可用性。
总之,Elasticsearch通太过片和副本、主从架构、节点冗余性、故障检测和自动恢复、数据长期性等多种机制来进步数据的高可用性。这使得Elasticsearch适用于构建可靠的分布式搜索和分析体系,即使在节点故障或网络问题的环境下,也可以保持数据的可用性和同等性。
(二)ES怎样提升服务的高并发性能呢?
Elasticsearch可以通过一系列优化和配置来提升其服务的高并发性能,确保可以或许快速响应大量的查询请求。以下是一些进步Elasticsearch高并发性能的关键策略和方法:
公道分片设计
:
确保索引的分片数目公道。假如分片数目太少,可能无法充分利用集群中的节点;假如分片数目太多,会增长集群管理的复杂性。
根据数据量和查询负载来确定分片数目,避免分片过多或过少。
节点扩展和负载均衡
:
随着负载的增长,可以扩展集群,添加更多的数据节点和和谐节点,以增长处置惩罚本领。
使用负载均衡器来分发查询请求,确保它们均匀分布到差别的节点上,减轻单个节点的压力。
使用副本分片
:
副本分片提供了数据的冗余和负载均衡。每个主分片可以有多个副本,这些副本可以处置惩罚读请求,从而进步读取性能。
注意,增长副本分片会增长存储需求,因此必要根据资源和需求来均衡。
查询优化
:
使用Elasticsearch的DSL查询语言构建高效的查询,避免不须要的查询和过滤操纵。
使用查询缓存来缓存频仍实行的查询,以减轻查询负载。
数据模子优化
:
映射(Mapping)的设计对性能有重要影响。选择合适的数据类型、分析器和索引选项可以进步搜索性能。
使用近及时(Near Real-Time)索引设置来实现快速的数据可用性。
分布式搜索和聚合
:
使用Elasticsearch的分布式搜索功能,允许查询在全部节点上并行实行,进步搜索性能。
避免在查询中实行大量的聚合操纵,由于它们可能会消耗大量盘算资源。
监控和性能调解
:
使用监控工具来监视集群性能,包罗CPU、内存、磁盘和网络使用环境。
根据监控数据对集群进行性能调解,比方增长节点、调解分片设置等。
硬件优化
:
选择性能强大的硬件,特殊是对于数据节点,包罗高速CPU、大内存、快速磁盘等。
使用固态硬盘(SSD)来进步磁盘性能,以加速读写操纵。
查询预热
:
预热(Warm-Up)查询可以在启动集群或重新加载索引后实行,以使缓存和查询性能优化达到最佳状态。
数据压缩和编码
:
使用数据压缩和编码技术来减小索引的存储占用,进步数据传输服从。
通过以上策略和方法,可以有用进步Elasticsearch的高并发性能,确保它可以或许应对大规模和高负载的查询请求,同时保持稳定性和可伸缩性。要注意的是,性能调优是一个持续的过程,必要根据实际需求和监控数据进行不停优化和调解。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
缠丝猫
论坛元老
这个人很懒什么都没写!
楼主热帖
【设置ssh免密不起作用?彻底搞懂密钥 ...
关于Servlet的补充知识
kubernetes之镜像拉取策略ImagePullSec ...
MySQL 8.0 新特性梳理汇总
【云原生】Docker 进阶 -- 构建自定义 ...
java如何编写增强for循环呢? ...
基于C#+unity的2D跑酷闯关对战冒险游戏 ...
常见开发模型-敏捷开发与瀑布开发模型 ...
在chatGPT的帮助下成功从Rancher中删除 ...
超融合技术入门:怎样轻松把握这一技术 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
程序人生
容器及微服务
Oracle
Mysql
物联网
移动端开发
网络安全
Java
分布式数据库
快速回复
返回顶部
返回列表