32.es读请示内部分发原理
当客户端发送一次读请求时,大致会经过以下几个步骤
1、客户端发送一个请求过去,es的一个node接收到这个请求(随机的node),这个node就被es内部分配成coordinating node(协调节点)
2、coordinate node对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮询算法,在primary shard以及其所有replica中随机选择一个,让读请求负载均衡
3、接收请求的node处理实际读请求,将请示的document返回给coordinate node
4、coordinate node接收到实际处理读请求的node所返回的document后,将该document返回给客户端。
其他说明:
1、对于读请求,不是将所有的请求全部转发到primary shard上,而是部分在primary shard 上,一部分在replica shard 上,这样可以让服务器达到负载均衡。
2、coordinate node对读请求的document进行路由分发之后就知道这个document在那个shard中。
3、round-robin随机轮询算法会尽量让各个parimary shard和replica shard 承担数量相同的请求,从而达到负载均衡。
4、因为任意node都知道每个document在那个node上,所以对客户端来说,可以选择任意节点,所以在进行请求时并未指定节点,由es随机分配。
5、特殊情况:document如果还在建立索引过程中,可能只有primary shard有此document,任何一个replica shard都没有此document,此时可能会导致无法读取到document,但是document完成索引建立之后,primary shard和replica shard就都有了此document,就可以完成读取。
32.es读请示内部分发原理的更多相关文章
- 30.es增删改内部分发原理
当客户端发送一次请求时,大致会经过以下几个步骤 (1)客户端发送一个请求过去,es的一个node接收到这个请求(随机的),这个node就被es内部分配成coordinating node(协调 ...
- 8. 理解ZooKeeper的内部工作原理
到目前为止,我们已经讨论了ZooKeeper服务的基础知识,并详细了解了数据模型及其属性. 我们也熟悉了ZooKeeper 监视(watch)的概念,监视就是在ZooKeeper命名空间中的znode ...
- 【ElasticSearch】ES 读数据,写数据与搜索数据的过程
ES读数据的过程: 1.ES客户端选择一个node发送请求,该请求作为协调节点(coordinating node): 2.corrdinating node 对 doc id 对哈希,找出该文档对应 ...
- 【转】在企业内部分发 iOS 应用程序
(via:破船之家,原文:Provision iOS IPA App for In-House Enterprise Distribution) 在企业内部分发 iOS 应用程序非常复杂.经过努力 ...
- iOS企业开发者账号实现内部分发
前言 上个月由于公司开发的棋牌类游戏接近尾声,需要大量的苹果测试机来支持,之前只有一个公司开发者账号,每添加新的测试机都需要添加一次UDID,做了不少无用功,再加上本身外包性质的公司导致客户方面频繁更 ...
- Redis有序集内部实现原理分析(二)
Redis技术交流群481804090 Redis:https://github.com/zwjlpeng/Redis_Deep_Read 本篇博文紧随上篇Redis有序集内部实现原理分析,在这篇博文 ...
- Flask源码分析二:路由内部实现原理
前言 Flask是目前为止我最喜欢的一个Python Web框架了,为了更好的掌握其内部实现机制,这两天准备学习下Flask的源码,将由浅入深跟大家分享下,其中Flask版本为1.1.1. 上次了解了 ...
- 4000余字为你讲透Codis内部工作原理
一.引言 Codis是一个分布式 Redis 解决方案,可以管理数量巨大的Redis节点.个推作为专业的第三方推送服务商,多年来专注于为开发者提供高效稳定的消息推送服务.每天通过个推平台下发的消息数量 ...
- ES读写数据的工作原理
es写入数据的工作原理是什么啊?es查询数据的工作原理是什么?底层的lucence介绍一下呗?倒排索引了解吗? 一.es写数据过程 1.客户端选择一个node发送请求过去,这个node就是coordi ...
随机推荐
- JavaScript的代码库
JavaScript的代码库 本文主要是汇集了一些JavaScript中一些经常使用代码.方便以后查找和复用. javascript框架: <script language="java ...
- 阻尼滑动--能够滑动过度的ScrollView(OverScrollView)
贴上一个我自己用过的阻尼滑动的ScrollView,像QQ里面那种滑动效果,尽管不是我写的,可是我认为还能够,贴出来做个记录,实用到的时候免得到处去找. 代码例如以下: /* * Copyright ...
- 3.4 存储简单数据的利器——Preferences
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...
- rancher导入k8s集群后添加监控无数据
1.日志报错 rancher导入k8s集群后添加监控无数据,rancher日志报错: k8s.io/kube-state-metrics/pkg/collectors/builder.go:: Fai ...
- golang 随机数/域名校验
//随机数生成要用到的 const letterBytes = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ...
- 【转】SQL SERVER 主体,已同步
转自郭大侠博客: https://www.cnblogs.com/gered/p/10601202.html 目录 SQL SERVER 基于数据库镜像的主从同步... 1 1.概念... 2 1. ...
- iOS网络——NSURLCache设置网络请求缓存
今天在看HTTP协议,看到了response头中的cache-control,于是就深入的研究了一下.发现了iOS中一个一直被我忽略的类——NSURLCache类. NSURLCache NSURLC ...
- js弹出层的写法实例
点击后弹出界面,通过判断浏览器长宽自动设定页面宽度和登陆页面位置. <style> /*遮罩层 弹出层*/ .mask { width: 100%; background-color: r ...
- easyui combobox的增加全选解决方案
1.解决方案背景: 项目中偶然需要用到easyui的combobox的组件,但是本组件自己没有包含全选的api事件.搜索了一些解决方案,但是不是很符合,后来发现是因为所使用的版本不一致所导致的.项 ...
- Boost-QT兼容问题:#define FUSION_HASH #
使用原始的MSVC10+QT48很长时间,需要把PCL升级到新的版本,不再使用自行编译的PCL1.7.2版本. 在使用MSVC2012的时候,使用MSVC12-的PCL1.8.0版本,出现了一个不大不 ...