通知调度器过滤器¶
https://blueprints.launchpad.net/oslo?searchtext=notification-dispatcher-filter
Oslo.messaging 缺乏过滤它发送到端点的通知的能力。本规范建议在将消息分发到端点之前启用过滤过程。
问题描述¶
目前,oslo.messaging 会盲目地将通知分发到所有已注册的端点。只有在端点接收到消息后,我们才能进行过滤并决定端点是否应该处理这些通知。可以在将消息分发到端点之前提前做出此决定,以避免将消息发送到将忽略它们的端点所带来的开销。
例如,在 Ceilometer 中,多个端点连接到通知监听器。每个端点可能只处理拾取到的通知的一个子集。我们目前在端点级别过滤是否继续处理通知,但这种过滤很容易在甚至将其分发到端点之前完成。
提议的变更¶
建议的解决方案是在调度器中添加一个 NotificationFilter。当 oslo.messaging 将消息分发到端点时,它将首先通过过滤器,并检查消息是否符合过滤器中定义的标准。可以使用正则表达式针对消息的所有一级属性进行过滤:context、publisher_id、event_type、metadata 和 payload。由于 context、metadata 和 payload 是字典值,因此可以为它们定义多个约束。
一个示例过滤器如下
filter = NotificationFilter(
publisher_id='^compute.*',
context={'tenant_id': '^5f643cfc-664b-4c69-8000-ce2ed7b08216$',
'roles': 'private'},
event_type='^compute\.instance\..*',
metadata={'timestamp': 'Aug'}.
payload={'state': '^active$'})
备选方案¶
我们继续在端点级别进行过滤。
Impact on Existing APIs¶
无。
安全影响¶
无。
性能影响¶
没有,但它可以减少分发的负载。
Configuration Impact¶
无。
开发人员影响¶
开发者现在可以在定义端点时添加过滤器。
class NotificationEndpoint(object):
filter = NotificationFilter(publisher_id='^compute.*')
Testing Impact¶
单元测试就足够了,因为该功能仅限于调度器。间接地说,在 Ceilometer 中实现时,将通过 tempest 进行测试。
实现¶
负责人¶
- 主要负责人
sileht
- 其他贡献者
gordc
里程碑¶
完成目标里程碑:kilo-1
工作项¶
添加带有单元测试的调度器过滤器
更改 Ceilometer 中的过滤器以使用新的过滤器。
孵化¶
无。
采用¶
Ceilometer,但似乎是其他监听器也会使用的通用功能。
库¶
oslo.messaging。
预计 API 稳定¶
无。
文档影响¶
无。
依赖项¶
无。
参考资料¶
代码审查:http://review.openstack.org/#/c/77886/
注意
本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode