????????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 標識主分片任期,避免腦裂場景下數據沖突。