zoukankan      html  css  js  c++  java
  • [译]ES读写文档时shard-replication模型

    官网页面:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-replication.html

    本文是对官网页面的粗糙译文,哈哈,方便自己理解。

    shard: 分片

    replication: 副本

    引言

      ES的索引被划分成多个分片,并且每个分片可以有多个拷贝,当对索引作出更新(如添加、删除文档)操作时,需要保持分片与其副本同步。保持分片及其拷贝信息同步和提供读服务我们称之为数据副本模型。

      数据副本模型基于主-备模型,需要从分片拷贝组中找出一个分片作为主分片,其他的作为副本分片。主分片承担索引操作主要的入口,负责校验操作并保证其正确性。若主分片接受索引操作,它也要负责将这些操作复制到它的副本分片上。

    写模型

      ES的索引操作首先要确定涉及的索引分片组,确定之后,在内部这个操作会被转发到分片组的主分片上,主分片校验操作,并转发到组内的副本分片上。可能有一些副本分片处于离线状态,主分片没有必要把操作发送到所有的副本分片上。替代方案是,ES的主节点维护一个列表,记录可靠的副本分片,主分片只需要把操作发送到列表中的副本分片即可。

      主分片执行以下基本流程:

    1. 验证操作,如果有错误则拒绝;
    2. 在本地执行操作,若域数据有问题,则拒绝;
    3. 转发操作到队列中的其他副本分片,若有多个,则并发发送;
    4. 其他副本分片执行操作并响应主分片,主分片确认队列中所有副本分片成功执行,并响应客户端。

    失败处理

      在执行的过程中,主分片可能出错。这时,集群主节点会从分片列表中选出新的主分片,这个操作被转发到主分片继续执行。错误的分片会被移除副本队列,主节点会重新拷贝一份分片,并更新集群状态信息。

    读模型

      当一个节点收到读请求时,它会转发到所有包含相关分片的节点上,收集节点的响应并响应客户端。

      读索引基本流程如下:

    1. 解析读请求到相关索引分片上;
    2. 从每个相关的分片所在组中,选取一个可用的副本分片,一般情况下,会在副本列表中进行轮询;
    3. 把读请求发送到选定的副本分片上;
    4. 合并查询结果并响应。

    失败处理

      当副本查询失败时,协调节点会选取所在组的其他副本节点来执行查询。

    阅读参考:

    [1] https://www.elastic.co/blog/tracking-in-sync-shard-copies

    [2] https://codingexplained.com/coding/elasticsearch/understanding-replication-in-elasticsearch

    [3] https://codingexplained.com/coding/elasticsearch/understanding-sharding-in-elasticsearch

    [4] https://codingexplained.com/coding/elasticsearch/introduction-elasticsearch-architecture

  • 相关阅读:
    H
    饭卡(0 1背包)
    J
    H
    E
    3991: [SDOI2015]寻宝游戏
    CF 1051 F. The Shortest Statement
    CF 643 E. Bear and Destroying Subtrees
    4567: [Scoi2016]背单词
    4946: [Noi2017]蔬菜
  • 原文地址:https://www.cnblogs.com/wmx3ng/p/8064135.html
Copyright © 2011-2022 走看看