ElasticSearch 数据读写

一、数据模型

1.1 PacificA 算法

ES 的数据副本模型基于主从模式,参考了 PacificA 算法。

PacificA 是一个通用、抽象的框架,而不是具体的算法,主要由两部分组成:

  • 存储管理:负责数据的读取和更新,采用多副本保证数据的可靠性和可用性。
  • 配置管理:对配置信息进行管理,通过 Paxos 维护配置信息的一致性。

基本结构包括:

  1. Replica Group:副本组,包括主和从副本。
  2. Configuration:配置信息,维护了副本组的信息,包括主副本是谁、副本位于哪个节点等。
  3. Configuration Version:配置的版本号。
  4. Serial Number:写操作序列号,每个主副本维护。
  5. Prepared List:写操作的准备序列。
  6. Committted List:写操作的提交序列。

副本策略

分片副本使用主从模式,写操作写主副本,主副本故障从从副本中选取新主副本。

数据写入流程:

  1. 写请求主副本节点,节点创建 UpdateRequest,并分配Serial Number,插入到 Prepared List。
  2. 主副本将 带着 SN 的UpdateRequest广播给从副本节点,从节点也插入 Prepared List ,然后返回 ACK。
  3. 主副本收到所有从副本的 ACK 后,将 UpdateRequest 放入 Committted List,表示提交。
  4. 同样把提交信息通知到从副本节点。

配置管理

存在一个全局配置管理器对所有副本组的配置进行管理,通过一致性算法和版本号解决一致性以及并发问题。

错误检测

主要应用于检测主副本情况,采用租约的机制:

  • 如果副本在租约期限内,未收到从副本节点的租约回复,则认为从副本异常,向全局配置管理器汇报,移除该副本,并且自己不再作为主副本。
  • 如果副本在租约期限内,未收到主副本节点的租约请求,则认为主副本异常,向管理器汇报,移除主副本,并自己提升为主副本。

1.2 ES 数据副本模型

ES 数据副本模型参照 PacificA 算法实现:

  • Master 负责维护索引元信息,类似配置管理器的角色。
  • 集群状态中的 routing_table 存储了所有索引、索引的shard、主分片、位于哪个节点等信息,类似副本组的功能。
  • ES 中有 Sequence Number 和 Checkpoint,类似 PacificA 的 Serial Number 和 Committed Point。

ES 一个索引会拆成多个分片,每个分片又有多个副本,对于文档的添加删除都是同步写的。

1.2.1 写入模型

写入过程会遵循以下基本流程:

  1. 请求到达协调节点,协调节点对操作进行验证合法性,失败则拒绝操作,然后会请求到对应主分片所在节点,每个shard都会在master结点里维护一个in-sync group。 每次写操作,都是先发给对应in-sync group里的主片(如果指定 routing 会根据该参数选择)。
  2. 主分片在本地执行操作,对操作合法性进行判断。(因为主分片本地会先执行,可能存在响应写入成功之前读取到更新的数据)。
  3. 如果执行成功会并行转发操作到所有副分片(主分片会维护需要同步的副分片列表)。
  4. 主分片等待所有副分片成功执行并返回ACK后,响应协调节点写入成功。

同步写入的过程,可能会出现一些异常情况:

  1. 主分片自身错误,会报告 Master,Master 提升一个副分片为主分片,并将对应操作交给副分片执行。
  2. 主分片同步转发操作到副分片,由于网络、硬件等问题,副分片没有返回 ACK,主分片会发送消息到 Master 剔除该副分片,并重新建立一个副分片。
  3. 同样主分片会根据副分片的响应来判断自己的状态,如果一个主分片存在分区或者其他异常情况,但仍继续处理读写操作,会收到副分片的拒绝响应,这时候会询问 Master 自己的身份来判断是否需要降级。

1.2.2 读取模型

读取过程遵循以下基本流程:

  1. 协调节点将读请求转发到相关的分片。
  2. 从分片中选取某个副本,可以是主副本也可以是从副本。
  3. 获取到数据到协调节点后,合并结果并给客户端响应。

在某个副本出现异常情况无法提供读能力,协调节点可以选择另一个副本读取,或者返回部分结果,可以在 _shards 字段分辨是否有副本读取失败。

  "_shards" : {
   
   
    "total" : 3,
    "successful" : 3,
    "skipped" : 0,</
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值