fasionchan

读万卷书,行万里路,品万味肴,撸万行码。

监控系统(主动)

架构

Checker

Checker主动监控任务执行节点,负责:连接到Arbiter并接收任务配置(插件名和参数); 根据配置从pip下载插件包;加载插件类并完成实例化;根据调度参数不断调度插件(执行)。

为了充分利用多核机器的处理能力,每个Checker采用多进程模式,每个处理进程负责调度一小部分任务:

由于任务数量巨大,需要实现并发探测。可行的手段包括:异步框架(gevent)或者多线程。 为了照顾插件用户的编写成本,采用最经典的线程模型:

每个处理进程起n执行线程,从就绪队列(ActiveQ)中抢任务(插件实例)并执行(调用探测函数)。 执行完毕后,将任务重新放回等待队列,由调度线程决定何时重新进入就绪队列(PendingQ)。

调度线程从等待队列取任务,根据下次调度时间放进最小堆,并监视堆顶任务。 如果堆顶任务调度时间小于等于当前时间,将其取出并放进就绪队列,以此循环。

消息线程负责将插件调度结果(指标&状态)提交到消息队列集群(MQ)。

管理线程负责将收到的任务配置实例化(下载插件包/加载代码类/类实例化),并放进等待队列(PendingQ)。 与此同时,将所有旧任务标注为取消状态,调度线程/执行线程后续将对其进行销毁。

Comments