面试题答案
一键面试- 主要组件:
- 主分片(Primary Shard):负责处理文档的写入操作,并协调副本分片(Replica Shard)的同步。
- 副本分片(Replica Shard):复制主分片的数据,提供高可用性和读负载均衡。
- 集群状态(Cluster State):包含集群的元数据信息,如节点信息、索引信息、分片分配等,用于各节点协调操作。
- 大致流程:
- 接收写入请求:客户端发送写入请求到集群中的任意一个节点,该节点称为协调节点(Coordinating Node)。
- 路由到主分片:协调节点根据文档的 ID,通过哈希算法计算出该文档应该被写入到哪个主分片,然后将请求转发到对应的主分片所在的节点。
- 主分片写入:主分片所在节点接收请求并写入数据,写入成功后,主分片会并行地将数据复制到其所有副本分片。
- 副本分片写入:副本分片接收到来自主分片的数据后进行写入操作。每个副本分片写入成功后,会向主分片发送确认消息。
- 确认响应:当主分片收到所有副本分片的确认消息后,认为此次写入操作成功,然后向协调节点返回成功响应。协调节点再将成功响应返回给客户端。
- 并发控制:
- 乐观并发控制:Elasticsearch 使用版本号来实现乐观并发控制。每个文档都有一个版本号,每次文档更新时版本号递增。当写入请求到达时,主分片会检查文档当前版本号与请求中携带的版本号是否匹配。如果匹配,则执行写入操作并递增版本号;如果不匹配,说明文档在其他地方已被修改,此次写入请求失败,客户端可以根据情况选择重试。
- 写入队列:每个分片(主分片和副本分片)都有一个写入队列,用于存储待处理的写入请求。当一个请求到达时,会被放入队列中按顺序处理,保证同一时间只有一个写入操作在分片上执行,避免并发写入冲突。