elasticjob选主分析
选主分析
选主入口调用栈
1.1 通过调用栈分析,发现elasticjob为每个任务都创建一个JobSchuduler作业调度对象,而在JobScheduler对象的初始化会为每个Job选举一个主节点选主的作用:分配作业分片项
重点分析如何选主:JobNodeStorage#executeInLeader
3.1 通过上图可知,ejob通过curator-recipes的LeaderLatch进行选主(下面会详细分析)
基于zookeeper的分布式锁实现选举作业主节点
- 通过在Zookeeper上写入主节点的实例信息来进行标记主节点的信息
1.1 先判断Zookeeper上主节点不存在时再进行写入主节点标记,两步操作无法保证原子性 - 使用分布式锁让多个进程进行排队,先获取锁的节点先执行主节点标记写入操作
- 基于Zookeeper实现分布式锁的原理
3.1 选举核心代码在LeaderLatch#reset
(1)在latchPath下创建临时有序节点,节点内容为serverId,并设置异步回调
(2)创建临时有序节点后,进入回调方法获取目录(/simpleJob/leader/election/latch)子节点
(3)获取字节点后进入其回调方法,对子节点列表进行选主校验LeaderLatch#checkLeadership
3.2 LeaderLatch#checkLeadership解析
3.2.1 对子节点列表进行排序
3.2.2 判断当前节点在字节点的位置
(1)如果等于0,则判定是持有锁的节点,可以执行选主业务(其实就是在zk对应的作业leader/instance节点下写入当前实例信息来标记当前节点为主节点)
(2) 如果大于0,则监听其前一个节点的删除事件,再进行上述checkLeadership判断是否加锁
避免羊群效应( herd effect)
把锁请求者按照后缀数字进行排队,后缀数字小的锁请求者先获取锁。如果所有的锁请求者都watch锁持有者,当代表锁请求者的znode 被删除以后,所有的锁请求者都会通知到,但是只有一个锁请求者能拿到锁。这就是羊群效应。为了避免羊群效应,每个锁请求者watch 它前面的锁请求者。每次锁被释放,只会有一个锁请求者会被通知到。这样做还让锁的分配具有公平性,锁定的分配遵循先到先得的原则
分片分析
- 分片入口调用栈
- 重点分析shardingIfNecessary方法
2.1 如果leader正在选举,红色标记方法将会阻塞,直到领导选举成功。并且判断该节点是否为主节点,不是直接return
elasticjob选主分析相关推荐
- 分布式系统选主怎么玩
来自:架构之美 分布式系统为了保证其可靠性,一般都会多节点提供服务,各别节点的故障不会影响系统的可用性.对于分布式的存储系统来说,在保证可用性的同时,数据的可靠性(不丢失)也是其要解决的核心问题.目前 ...
- redis cluster集群选主
redis 选主过程分析 当slave发现自己的master变为FAIL状态时,便尝试进行Failover,以期成为新的master.由于挂掉的master可能会有多个slave.Failover的 ...
- lazada选品怎么做,东南亚母婴玩具类目选品分析
东南亚电商市场近年来快速发展,如何让国货商品畅销东南亚,是众多Lazada商家不断探索的课题.那商家如何在lazada上面做好选品,博主这里针对母婴玩具类目来做个选品分析,让商家快速在东南亚打开市场. ...
- ZAB协议选主过程详解
说明 ZAB 协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的一致性协议.基于该协议,ZooKeeper 实现了一种主从模式的系统架构来保持集群中各个副本之间的数据一致性. ZAB ...
- raft协议 MySQL 切换_Raft 协议实战系列(二)—— 选主
注:本文原创,转载请标明出处. 欢迎转发.关注微信公众号:Q的博客. 不定期发送干货,实践经验.系统总结.源码解读.技术原理. 本文目的 笔者期望通过系列文章帮助读者深入理解Raft协议并能付诸于工程 ...
- 【Elasticsearch】留意Elasticsearch 7.x 可能无法选主的问题
1.概述 转载:留意Elasticsearch 7.x 可能无法选主的问题 Elasticsearch 7.x 选举算法改为基于 Raft 的实现,与标准 Raft 相比,最大的区别是允许选民可以投多 ...
- Zookeeper选主过程,理论和源码结合,还看不懂给你发红包
文章目录 前言 1.节点角色 2.选举过程 2.1 胜出的条件 2.2 比较的规则 3.代码逻辑综述 4.源码分析 结语 前言 Zookeeper作为Dubbo生态的默认注册中心,得到了非常的普遍的应 ...
- 《叶问》38期,MGR整个集群挂掉后,如何才能自动选主,不用手动干预
当集群中所有节点都宕机后,集群再次启动后,能否自动选主 1.MGR集群所有节点都宕机后,集群重启,能否自动选主和启动MGR服务 这是个来自群友的问题. 首先,MySQL服务利用 systemd 即可实 ...
- Zookeeper,etcd,consul内部机制和分布式锁和选主实现的比较
我的另外3篇文章分别介绍了Zookeeper,etcd,consul是如何实现分布式锁和选主的.本文想比较一下Zookeeper.etcd.consul内部机制有哪些不同,他们实现锁和选主的方式相同和 ...
最新文章
- 神经网络如何学习的?
- HihoCoder#1051:补提交卡
- S/4HANA for Customer Management里的搜索分页处理
- 【C/C 】浅谈C/C 中函数指针与回调函数
- Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1
- 新公司入职56天后的面谈小结
- apk 泊车摄像头_【精】申精,两厢黑色嘉年华安装导航摄像头倒车影像作业,俺系小黑...
- 免费的caj转word批量转换方法
- 原生js获取元素非行内样式属性的方法
- 【软件测试】测试人,我们35岁焦虑怎样破?
- CSP201912-3化学方程式
- 利用人脸微笑数据集训练识别模型,完成对人脸图片微笑识别
- 以下html标记语言表示网页标题的标记是,第8章 HTML标记语言.ppt
- android listview 导航条,Android侧边导航栏+ListView基础实践
- 隐藏在今日头条百亿市值背后的算法:巨大可能与现实困境
- unicode汉字内码表(转)
- 创业者2012必看十大文章(6)
- 你还在用vscode吗,赶快扔了吧.惨重的教训!!
- SQL经典案例(学生表,课程表,选课表,教师表) 练习
- 如何屏蔽博客园中的Google广告
热门文章
- 4.1.7 OS之文件共享(索引节点-硬链接、符号链接-软链接)
- 关于Tomcat调用Weblogic容器Ejb T3协议
- Linux下配置ip地址
- oracle 数据库定时自动备份
- Java 静态方法与非静态方法
- 【Java】接口练习题
- R语言安装包报错:package ‘EDASeq ’ is not available for Bioconductor version ‘3.15‘
- 基于可视化 BI 工具 DataEase 制作第七次人口普查数据分析大屏
- 用 Visual Studio Code 做基于 .NET MAUI 跨平台移动应用开发
- SM4分组密码算法介绍