Elasticsearch 通过多机制组合保障读写一致性,针对高并发场景优化设计,具体实现如下:
一、写入一致性控制
1.1 一致性级别参数(consistency)
写操作时指定分片确认数量,确保数据可靠同步:
quorum(默认):多数分片(主+副本)确认成功,公式:int( (主分片数 + 副本数) / 2 ) + 1
all:所有分片确认(强一致,性能较低)
one:仅主分片确认(弱一致)
活跃分片等待(wait_for_active_shards)指定写操作前需可用的最小分片数(如设为 all 需全部在线),避免写入不可用分片。
二、并发冲突解决
2.1 乐观锁与版本控制
文档自带 _version 字段,更新时校验客户端提交版本号:
若匹配则更新并递增版本号
若冲突则拒绝操作(返回 409 错误)
新版本推荐使用 if_seq_no(序列号)和 if_primary_term(主分片任期)替代 _version,精确控制基于最新状态的更新。
PUT /index/_doc/1?if_seq_no=5&if_primary_term=1
{ "data": "new_value" }
三、实时性保障
3.1 刷新策略(refresh_interval)
默认 1 秒刷新一次内存数据到可搜索状态,可通过参数调整:
?refresh=true:写入后强制立即刷新(性能损耗大)
?refresh=wait_for:写入后等待刷新完成再响应(平衡实时性与性能)
读取偏好设置(preference)
查询时指定 preference=_primary,强制从主分片读取最新数据,避免副本延迟导致脏读。
四、分布式协同机制
4.1 主分片权威性
所有写操作仅由主分片处理,再同步至副本分片。
4.2全局检查点(Global Checkpoint)
标记所有分片已确认同步的操作序列号,加速故障恢复时的数据一致性校验。
4.3 主分片切换保护
通过递增的 Primary Term 标识主分片任期,避免脑裂场景下数据冲突。