面试题答案
一键面试ElasticSearch GET API 基本路由机制
- 文档ID路由:当使用GET API获取文档时,ElasticSearch首先根据文档的ID来计算路由值。具体公式为
shard = hash(document_id) % number_of_primary_shards
。其中,hash
函数对文档ID进行哈希运算,number_of_primary_shards
是索引创建时指定的主分片数量。这个计算结果决定了文档应该存储在哪个分片上,GET请求也会被路由到对应的分片所在的节点。 - 副本分片选择:如果主分片不可用,ElasticSearch会从该文档的副本分片中选择一个来提供数据。副本分片的选择通常基于负载均衡的原则,尽量选择负载较轻的副本分片,以提升读取性能。
该机制有助于优化分发的原因
- 数据定位精准:通过文档ID进行路由,能够快速且精准地定位到文档所在的分片。因为哈希算法的特性,相同ID的文档始终会被路由到相同的分片,使得数据读取具有确定性,减少了不必要的查找开销。
- 负载均衡:在副本分片选择时采用负载均衡策略,避免了请求集中在某一个或几个副本分片上,从而提升了整个集群的读取性能和稳定性。不同节点上的副本分片都能分担读取请求,充分利用了集群资源。
- 高可用性:即使主分片出现故障,也能从副本分片中获取数据,保证了数据的可获取性。这种基于主副分片的冗余机制与路由机制相结合,增强了系统在面对节点故障等异常情况时的健壮性。