Task与EA映射表
在controller中,维护一张Task与分析引擎的映射表,表示一个正在运行的任务与运行该任务的EA。其关系为<taskId, engineId>。该表需在controller中持久化,建议在DB中以一张新表的方式进行存储。
Controller重启(对任务的操作)
Controller的操作
- 对task表中状态为NEW的任务,task管理模块继续将其分配到engine中运行;
- controller的engine管理模块,收到分析引擎的第一个update-engine-info的调用时,对映射表中隶属于该engine的每个task:
- 调用task模块的restart接口,发送启动请求给分析引擎
分析引擎的操作
- 正常操作(在增加下面描述的机制的基础上)
分析引擎重启(对任务的操作)
Controller的操作
- controller的engine管理模块,收到分析引擎的第一个update-engine-info的调用时,对映射表中隶属于该engine的每个task:
- 调用task模块的restart接口,发送启动请求给分析引擎
分析引擎的操作
- 正常操作(在增加下面描述的机制的基础上)
Controller新增接口和处理机制
- 【机制】Controller的engine管理模块,(1)收到stop-engine的调用时,或(2)发现分析引擎失联时(连续3次没有收到心跳update-engine-info),对映射表中所有隶属于该engine的每个task:
- 调用task模块的stop接口,向原分析引擎发送停止任务运行的请求
- 重新分配engine,并调用task模块的restart接口,
- 从映射表中将该项删除
- 【接口】Controller提供查询特定分析引擎上所有运行任务的接口
- 【接口】Controller对特定任务进行restart的接口
分析引擎新增的处理机制
- 【机制】分析引擎对于接收到的新建任务的请求,如果对应taskId的任务正在运行,忽略该请求;否则,正常启动该任务
- 【机制】分析引擎对于接收到的停止任务的请求,如果对应taskId的任务没有在运行,忽略该请求;否则,正常停止该任务
- 【机制】分析引擎发现余Controller失联后(连续3次无法正常发送心跳update-engine-info),将所有运行的任务停止