面試官:想了解 ES 的底層原理,不再只關注業務層面了。
解答:
這里的索引文檔應該理解為文檔寫入 ES,創建索引的過程。
文檔寫入包含:單文檔寫入和批量 bulk 寫入,這里只解釋一下:單文檔寫入流程。
記住官方文檔中的這個圖。
第一步:客戶寫集群某節點寫入數據,發送請求。(如果沒有指定路由/協調節點,
請求的節點扮演路由節點的角色。)第二步:節點 1 接受到請求后,使用文檔_id 來確定文檔屬於分片 0。請求會被轉
到另外的節點,假定節點 3。因此分片 0 的主分片分配到節點 3 上。
第三步:節點 3 在主分片上執行寫操作,如果成功,則將請求並行轉發到節點 1
和節點 2 的副本分片上,等待結果返回。所有的副本分片都報告成功,節點 3 將
向協調節點(節點 1)報告成功,節點 1 向請求客戶端報告寫入成功。
如果面試官再問:第二步中的文檔獲取分片的過程?
回答:借助路由算法獲取,路由算法就是根據路由和文檔 id 計算目標的分片 id 的
過程。
1shard = hash(_routing) % (num_of_primary_shards)