Vitrage 模板并行评估¶
https://blueprints.launchpad.net/vitrage/+spec/parallel-evaluation
目前 Vitrage 顺序处理和评估传入事件。虽然顺序处理是必要的,但对于单个事件的模板评估是独立的,可以并行化。挑战在于由单个进程持有的 NetworkX 内存图,这阻止了并行性,可以通过创建维护图克隆的评估器工作进程来解决。
问题描述¶
每次图的变化都会触发对所有相关模板条件的评估,因此事件处理的运行时间取决于加载的模板数量。
处理器接收事件,来自数据源或评估器队列
处理器更新图
触发评估器运行相关模板
评估可能会导致事件写入评估器队列
上述流程在单个线程中的内存 NetworkX 图上运行
提议的变更¶
将添加一个或多个评估器工作进程到 vitrage-graph 服务。这些进程维护自己的图实例。一个新的组件评估器管理器管理与评估器工作进程的通信。对于处理器导致的每次图变化,它都会请求评估器管理器通知所有评估器工作进程,从而使这些进程持有相同的图克隆。每个评估器工作进程运行一部分模板,将其结果写入评估器队列。
流程如下
处理器接收事件,来自数据源或评估器队列
处理器更新图
触发评估器管理器,通过 N 个多进程队列将事件发送到 N 个评估器工作进程,然后等待它们的确认信号
每个评估器工作进程更新自己的图
在每个评估器工作进程中,触发评估器运行一部分模板
评估可能会导致事件写入评估器队列
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
版本影响¶
无
其他最终用户影响¶
无
部署者影响¶
每个评估器工作进程持有内存实体图的克隆,因此内存消耗会随着配置的工作进程数量增加而增加。
开发者影响¶
无
Horizon 影响¶
无
实现¶
负责人¶
- 主要负责人
idan-hefetz
- 其他贡献者
无
工作项¶
处理器不应持有 ScenarioEvaluator
创建 EvaluatorManager
创建 EvaluatorWorker
修改 graph.py 中的 main
修改 GraphService 以处理这些更改
选择将任务分配给工作进程的最佳方式
依赖项¶
无
测试¶
实现将由额外的单元测试覆盖
文档影响¶
无
参考资料¶
无