前言


继前一篇文章关于task被overload分配到zk上的流程分析,那么MiddleManager又是如何获取到zk上的task信息并启动Peon来真正运行起task的呢?

上图


overload将task信息放到zk上之后,middleManager会有监听管理器WorkerTaskMonitor, 该监听管理器会启动一个操作zk的类PathChildrenCache来持续监听zk相关路径下的信息变动。                     middlemanager获取到task后,对task进行反序列化形成task对象放入WorkerTaskMonitor管理的一个map中并开始提交关于运行task的任务。在运行task之前会更新zk相关路径下关于该task的状态供overload关注。

middlemanager会启动一个线程组装java启动进程的参数,然后通过一个可以创建子进程的工具java.lang.Process来启动java进程。

上代码


首先从WorkerTaskMonitor进入,此类的start()方法是middleManager的入口, 一方面初始化各种组件并创建线程启动,另一方面启动关于监听zk路径的任务持续监测有无新的task被分配到当前middleManager上。

进入监听zk的方法,当发现有task信息后会触发childEvent()方法, 第一步就是先将task信息进行反序列化成task对象,然后发布task.

在发布task的方法中,检查该task的状态,判断是否运行或者完成。并将task信息本地持久化。然后启动新的线程去创建peon.

调用TaskRunner来发布task, 此处的TaskRunner是ForkingTaskRunner, 是启动middlemanager是注入的。和overload使用的RomoteTaskRunner不同。ForkingTaskRunner用于fork一个子进程即Peon的。然后更新下task的状态到zk以及缓存中。

在ForkTaskRunner的run方法中提交了一个线程进行异步组装关于启动Peon的参数以及其他准备工作。最后由java.lang.Process类提交一个进程。该方法中组装的参数比较多,下面只截取部分看下流程。

至此Peon已经启动起来了,当然了,在这个过程中有很多关于状态的记录判断工作没有展开详述。只是将这个大体的流转框架描述了一下。

然后Peon启动后会注入ExecutorLifecycle开始运行,以及SingleTaskBackgroundRunner提交了一个线程去调用task的运行。

进入SingleTaskBackgroundRunnerCallable之后就能真正的看到task的执行地方了。task启动的过程的一级如何读取数据形成segment的过程在下一篇描述。

END

Druid middleManager如何获取task信息并启动Peon进程相关推荐

  1. Python获取磁盘使用信息,python获取GPU信息,python根据进程号获取进程信息,pynvml 获取GPU信息,psutil 获取进程信息,系统信息等

    一.工具:psutil模块 psutil是一个跨平台模块,试用相应方法可以直接获取计算机CPU,内存,磁盘,网络等资源使用情况:可以使用我们学习知识与这模块用来做系统监控,性能分析:如果大家熟悉Lin ...

  2. Android之如何获取手机程序列表以及程序相关信息并启动指定程序

    效果图: 程序列表: 启动程序,获取程序信息: 代码如下: 创建一个AppInfo类来表示应用程序 <pre name="code" class="java&quo ...

  3. kill -3 获取threaddump信息---转载

    有些Java应用服务器是在控制台上运行,如Weblogic,为了方便获取threaddump信息,在weblogic启动的时候,会将其标准输出重 定向到一个文件,用"nohup ./star ...

  4. ios获取设备信息总结

    本文转载至 http://blog.csdn.net/decajes/article/details/41807977 1.获取设备的信息 [objc] view plaincopy UIDevice ...

  5. socket 获取回传信息_Luat系列官方教程5:Socket代码详解

    文章篇幅较长,代码部分建议横屏查看,或在PC端打开本文链接.文末依然为爱学习的你准备了专属福利~ TCP和UDP除了在Lua代码声明时有一些不同,其他地方完全一样,所以下面的代码将以TCP长连接的数据 ...

  6. java读取对象失败_jsp exception对象获取异常信息

    获取异常信息的exception对象 exception内置对象用来处理JSP文件执行时发生的所有错误和异常.exception对象和Java的所有对象一样,都具有系统的继承结构,exception对 ...

  7. crashdumpandroid_Android 中Crash时如何获取异常信息详解及实例

    Android 中Crash时如何获取异常信息详解 前言: 大家都知道,Android应用不可避免的会发生crash,无论你的程序写的多完美,总是无法完全避免crash的发生,可能是由于Android ...

  8. 微信公众号开发之授权获取用户信息

    微信开发交流群:148540125 系列文章参考地址 极速开发微信公众号 欢迎留言.转发.打赏 项目源码参考地址 点我点我--欢迎Start 前几篇文章已讲完如何导入项目,如何启动配置项目,如何成为开 ...

  9. Eureka获取注册信息

    本文来说下Eureka获取注册信息 文章目录 Eureka-Client获取信息 启动获取 定时器获取 获取注册信息 全量获取 增量获取 合并数据 Eureka-Server接收请求 控制器接收请求 ...

最新文章

  1. 数字营销,带动汽车销量增长
  2. C1之路 | 备考C1
  3. python中mat函数_python matplotlib中的subplot函数使用详解
  4. 鼠标linux驱动安装失败,win7插入鼠标提示未能成功安装设备驱动程序怎么办
  5. iOS 数据持久化 NSUserDefault
  6. $(document).ready(function(){}),$().ready(function(){})和$(function(){})三个有区别么
  7. python django 网页 html \n不换行
  8. linux chmod 命令理解
  9. Android主备域名切换实施方案(Ping工具Demo)
  10. python实现3d建模工具_Python实现3D建模工具
  11. 高级Bash脚本编程指南——一本深入学习shell脚本艺术的书籍
  12. simulink入门
  13. 软件开发工具【十四】 之 常用建模工具
  14. 在Excel中输入身份证号码的方法或批量改为文本格式
  15. jQuery漂浮横幅图片广告代码
  16. 通过Docker安装L2TP
  17. :Pearl Pairing
  18. word恢复忘记保存的文档
  19. LoRa Gateway 笔记 3.1.3 帮助程序 util_pkt_logger 进行 LoRa 空口抓包
  20. [渝粤教育] 中原工学院 互换性与测量技术基础 参考 资料

热门文章

  1. 基于SSH+MySQL+Bootstrap的高校实验室预约管理系统
  2. mariadb ROW格式复制下从库结构变更引发1677错误
  3. php 调用微信支付的时间戳,前端调用微信支付接口
  4. The First :使用Anaconda+pycharm学习图像处理
  5. 为什么要进行数据标准化?
  6. 小米笔记本 wifi 频繁断开重连 解决方案
  7. 【英语演讲】Simulation Test 模拟测试
  8. HTTP (RESTful) API 响应时间分析及SLA定义
  9. 查看wifi连接路由器的MAC地址
  10. Ubuntu系统切换五笔输入法