处理流程:   方法原型: (defn sync-processes [supervisor]) 函数说明: Supervisor是一个supervisor-data对象. 从local-state中获取LS_LOCAL_ASSIGNMENTS集合<port,Assignment>集合,保存到assigned-executors. 调用read-allocated-workers获取当前已经分配的Worker信息,<worker-id,<worker state,worker he…
Supervisor由三个线程组成,一个计时器线程和两个事件线程. 计时器线程负责维持心跳已经更新Zookeeper中的状态,还负责每隔一定的时间将事件线程需要执行的事件添加到其对应的队列中. 两个事件线程分别负责与Nimbus同步任务和根据任务变化同步管理Worker进程. 相关数据结构图:     同步Nimbus的事件线程 执行流程图:   方法原型: 1  (defn mk-synchronize-supervisor [supervisor sync-processes event-m…
Storm默认的任务调度器.实现如下: 1  (defn –prepare [this conf]) 2  (defn –schedule [this ^Topologies topologies ^Cluster cluster] 3  (default-schedule topologies cluster)) default-schedule 方法原型: 1  (defn default-schedule [^Topologies topologies ^Cluster cluster])…
启动流程图   mk-assignments 功能:对当前集群中所有Topology进行新一轮的任务调度. 实现源码路径: \apache-storm-0.9.4\storm-core\src\clj\backtype\storm\daemon\ nimbus.clj 方法原型: 1  defnk mk-assignments [nimbus :scratch-topology-id nil]   方法说明: 参数nimbus为nimbus-data对象,scratch-topology-id为…
启动流程图 mk-assignments 功能:对当前集群中所有Topology进行新一轮的任务调度. 实现源码路径: \apache-storm-0.9.4\storm-core\src\clj\backtype\storm\daemon\ nimbus.clj 方法原型: 1  defnk mk-assignments [nimbus :scratch-topology-id nil]   方法说明: 参数nimbus为nimbus-data对象,scratch-topology-id为提交…
任务调度接口定义: 1  IScheduler{ 2      // conf为当前nimbus的stormp配置 3  void prepare(Map conf); // 初始化 4  // topologyies表示集群中所有topology信息,cluster表示当前集群包括用户自定义调度逻辑事所需的所有资源(Supervisor.Solt.以及任务分配情况) 5  void schedule(Topologies topologies,Cluster cluster); 6  }:  …
Worker根据Topology的定义及分配到自身的任务情况,计算出发出的消息被那些Task接收,由于Worker上分配的任务可能被调整,因此Worker需要定时的更新这些连接信息. ZMQ连接信息更新 函数:mk-refresh-connections 方法原型: 1   (conf TASK-REGRESH-POLL-SECS) refresh-connections). 代码说明: 调用mk-halting-timer创建计时器,该代码在创建Worker数据时调用. 创建一个用于更新连接的…
使用Supervisor管理Linux进程 简介 Supervisor是一个C/S系统,它可以在类UNIX系统上控制系统进程,由python编写,提供了大量的功能来实现对进程的管理. 安装 sudo pip install supervisor 配置 安装完成 supervisor 之后,可以使用 “echo_supervisord_conf” 命令来生成样例配置文件 echo_supervisord_conf 默认 supervisor 会使用 /etc/supervisord.conf 作为…
在这里我选择redis作为celery异步任务的中间人,系统选择CentOS6.5 64位.redis.celery和supervisor的安装参见官方文档. 安装完毕后: 1, 创建celery的实例/home/user_00/learn/tasks.py文件 tasks.py: # -*-coding:utf-8-*- from celery import Celery, platforms app = Celery('tasks', backend='redis://localhost:6…
讲过一篇celery的,但是celery启动后并不是daemon的,在生产环境中这肯定是不可以的,那怎么办呢? 这就需要使用supervisor进行进程管理了,下面详细介绍. 一. supervisor是干什么的. supervisor是有Python语言编写的,基于linux操作系统的一款服务器管理工具,用以监控服务器进程的运行. supervisor要求管理的程序是非daemon程序,supervisord会帮你把他转换成daemon程序. 因此如果使用supervisor来管理nginx进…