熟悉了es路由规则以后,再来看一下document的增删改查的原理.
场景
现在有3个es节点在一个集群内, 有3个primary shard 对应的replica数量是1 就是说有3个 primary shard 和3个replica,总共6个shard, 现在有个客户端要创建一个document到es中
增删改操作
客户端随便选择一个node,然后将请求发送到node上去, 因为任意一个node都知道document应该存在哪个shard上,所以请求发给哪一个都是一样的.
比如图中,请求节点到达node1了,那node就成为了coordinate node(协调节点),协调节点通过我们之前说到的路由公式,来计算这个document应该在哪个shard上面,然后将请求发送到这个节点上去, 比如应该放到shard2 中, shard2在自己本地创建document,创建倒排索引,创建完毕后会将数据同步到他对应的replica上去
写入完毕 同步数据到replica完成后,通知协调节点,然后协调节点返回响应给客户端
查询操作
客户端先发送一个查询请求到任意的一个node上去
如图,
请求发到node1 上去后node1就成为了coordinate node(协调节点) ,协调节点对document进行路由,路由之后就知道document在哪个primary shard上了,对于读请求,不一定就将请求转发到primary shard上去,因为replica shard也可以承担读请求的
es采用round-robin随机轮询算法在primary shard以及其所有replica中随机选择一个,让读请求负载均衡.
然后对应的shard去查询,将查询结果返回给协调节点,协调节点最后响应给客户端
特殊情况
如果查询的document还在建立索引的过程中,这个时候只有primary shard上有,任何一个replica shard上都没有,此时如果请求路由到replica shard上可能会导致无法读取到document,但是document完成索引建立 将数据同步到replica shard上之后,就都有了