前言
es 就像是个黑盒,如果你不了解其中的内部原理,你还能干啥?你唯一能干的就是用 es 的 api去做最基本的读写数据了。要是出点什么问题,你啥都不知道,那还能指望你做什么呢?
所以为了能更深入的去了解es内部构造及解决使用过程中出现的问题,知道es最底层的工作原理就显得尤为重要了,那么接下来我将展开说说其底层的工作原理是怎样的。
es 写数据过程
- 客户端选择一个 node 发送请求过去,这个 node 就是
coordinating node
(协调节点)。 coordinating node
对 document 进行路由,将请求转发给对应的 node(有 primary shard)。- 实际的 node 上的
primary shard
处理请求,然后将数据同步到replica node
。 coordinating node
如果发现primary node
和所有replica node
都搞定之后,就返回响应结果给客户端。
es 读数据过程
可以通过 doc id
来查询,会根据 doc id
进行 hash,判断出来当时把 doc id
分配到了哪个 shard 上面去,从那个 shard 去查询。
- 客户端发送请求到任意一个 node,成为
coordinate node
。 coordinate node
对doc id
进行哈希路由,将请求转发到对应的 node,此时会使用round-robin
随机轮询算法,在primary shard
以及其所有 replica 中随机选择一个,让读请求负载均衡。- 接收请求的 node 返回 document 给
coordinate node
。 coordinate node
返回 document 给客户端。
es 搜索数据过程
es 最强大的是做全文检索,就是比如你有三条数据:
java真好玩儿啊
java好难学啊
j2ee特别牛
复制代码
你根据 java
关键词来搜索,将包含 java
的 document