将策略结果发布到 DSE 消息总线

https://blueprints.launchpad.net/congress/+spec/publish-policy-results-to-bus

为策略引擎实现订阅功能。也就是说,每当 DSE 上的实体订阅策略引擎表时,策略引擎应将该表的结果发布到消息总线。该实现应利用触发机制,该机制是另一规格的主题。

问题描述

目前,数据源驱动程序遵循表的发布/订阅范例。策略引擎从数据源订阅所需表,数据源根据需要发布信息。

但是,在某些用例中,DSE 消息总线上的其他实体(不一定是“数据源”)希望订阅策略中定义的表。

  • 构建概念验证,其中外部服务会收到策略违规通知并做出相应反应,为了方便起见,将其实现为 DSE 消息总线上的另一个实体。

  • 可互操作的策略引擎,将它们的监控结果发布到总线,供其他策略引擎消费。

提议的变更

每当策略引擎收到对特定表的订阅请求时,例如 ‘alice_policy:error’,策略引擎就会为该触发器注册一个触发器。当触发器触发时,它会将该表的内容发布到消息总线。

每当策略引擎收到对特定表的取消订阅请求时,策略引擎就会删除该表的触发器。

订阅/取消订阅功能应在 policy/dse_policy.py:DseRuntime 中实现。

由于表可能很大,因此将这些表的增量变化发布到总线是有意义的,就像数据源一样。执行此操作的数据源驱动程序的功能可以在 datasource_driver.py:DatasourceDriver.prepush_processor 中找到。

为了实现增量发布,我们应该研究创建 dse/deepsix.py:DeepSix 的子类,该子类包含 prepush_processor 功能,并让 DatasourceDriver 和 DseRuntime 都从它继承,而不是从 DeepSix 继承。

备选方案

策略引擎可以将整个表发布到总线。缺点是具有频繁小变化的表会产生大量的无用总线流量。优点是,如果订阅者接收到整个表,编写起来可能会更简单。如果确实如此,我们可以始终构建从增量变化计算整个表的便捷函数。

策略

N/A

策略操作

N/A

数据源

N/A

数据模型影响

N/A

REST API 影响

N/A

安全影响

N/A

通知影响

N/A

其他最终用户影响

N/A

性能影响

性能会受到影响,但不会比触发器造成的影响更大。触发器需要计算增量变化;然后,该增量变化将简单地发布到消息总线。发布速度很快(尤其是与计算表的内容及其增量变化相比)。

其他部署者影响

N/A

开发者影响

N/A

实现

负责人

主要负责人

<launchpad-id 或 None>

其他贡献者

<launchpad-id 或 None>

工作项

  • 创建包含增量发布功能的 DeepSix 子类,并让 DatasourceDriver 和 DseRuntime 从该子类继承,而不是从 DeepSix 继承

  • 修改 DseRuntime,以便每条订阅消息都设置适当的触发器。

  • 修改 DseRuntime,以便每条取消订阅消息都删除适当的触发器。

依赖项

  • 需要触发器:policy-engine-triggers

测试

订阅策略引擎表、对这些表进行更改并验证总线上发送了适当增量变化的非 tempest 测试就足够了。

文档影响

不需要——我们只是让策略引擎实现与数据源驱动程序相同的接口。

参考资料

N/A