Vitrage 模板并行评估

https://blueprints.launchpad.net/vitrage/+spec/parallel-evaluation

目前 Vitrage 顺序处理和评估传入事件。虽然顺序处理是必要的,但对于单个事件的模板评估是独立的,可以并行化。挑战在于由单个进程持有的 NetworkX 内存图,这阻止了并行性,可以通过创建维护图克隆的评估器工作进程来解决。

问题描述

每次图的变化都会触发对所有相关模板条件的评估,因此事件处理的运行时间取决于加载的模板数量。

  • 处理器接收事件,来自数据源或评估器队列

  • 处理器更新图

  • 触发评估器运行相关模板

  • 评估可能会导致事件写入评估器队列

上述流程在单个线程中的内存 NetworkX 图上运行

Problem description

提议的变更

将添加一个或多个评估器工作进程到 vitrage-graph 服务。这些进程维护自己的图实例。一个新的组件评估器管理器管理与评估器工作进程的通信。对于处理器导致的每次图变化,它都会请求评估器管理器通知所有评估器工作进程,从而使这些进程持有相同的图克隆。每个评估器工作进程运行一部分模板,将其结果写入评估器队列。

流程如下

  • 处理器接收事件,来自数据源或评估器队列

  • 处理器更新图

  • 触发评估器管理器,通过 N 个多进程队列将事件发送到 N 个评估器工作进程,然后等待它们的确认信号

  • 每个评估器工作进程更新自己的图

  • 在每个评估器工作进程中,触发评估器运行一部分模板

  • 评估可能会导致事件写入评估器队列

Proposed change

备选方案

数据模型影响

REST API 影响

版本影响

其他最终用户影响

部署者影响

每个评估器工作进程持有内存实体图的克隆,因此内存消耗会随着配置的工作进程数量增加而增加。

开发者影响

Horizon 影响

实现

负责人

主要负责人

idan-hefetz

其他贡献者

工作项

  • 处理器不应持有 ScenarioEvaluator

  • 创建 EvaluatorManager

  • 创建 EvaluatorWorker

  • 修改 graph.py 中的 main

  • 修改 GraphService 以处理这些更改

  • 选择将任务分配给工作进程的最佳方式

依赖项

测试

实现将由额外的单元测试覆盖

文档影响

参考资料