创建表格发布中间件¶
https://blueprints.launchpad.net/congress/+spec/table-publishing-middleware
为了降低其他项目向 Congress 发布 DSE(扩展的 DSE)数据的门槛,创建中间件以尽可能自动化该过程。
问题描述¶
目前 Congress 会定期轮询它所管理的服务的状态以获取其数据。如果服务仅在数据发生变化时将数据发送到 Congress,那将是更好的选择。例如,与其让 Congress 每分钟轮询一次 Nova 的服务器列表,不如让 Nova 在创建新服务器、删除现有服务器或更新现有服务器时将其服务器信息发送到 Congress。
oslo.messaging 已经可以实现项目之间发布数据,但目前这种机制的使用率不高。
提议的变更¶
解决这个问题意味着使其他项目向 Congress 发送数据比使用 oslo.messaging 更容易。此更改将包括中间件,可能通过 oslo 提供,它会将底层数据库表的所有更改发布到总线。此外,它将发送的不是整个表,而是表上发生的变化(delta)。它将与现有的 oslo.db 紧密集成,以便现有项目无需进行任何代码更改;他们只需要包含和配置代码即可。
需要一种同步机制:Congress 首先拉取所有数据,然后需要从那时起在总线上发布 delta。发送到总线上的 delta 将包括时间戳,允许 Congress 将初始数据拉取与 delta 同步。
备选方案¶
另一种选择是进行单独的努力,例如 oslo.publish_tables,它与 oslo.db 的集成度不高。这种方法的优点是,即使是不使用 oslo.db 的项目(甚至 OpenStack 之外的项目)也可以利用该代码。这种方法的缺点是,已经使用 oslo.db 的项目需要编写和维护大量用于发布数据的专用代码——这种方法迄今为止收效甚微。
也许我们会发现我们可以以很少的额外工作来实现这两种方法,但此规范的主要目标是与 oslo.db 的紧密集成。
策略¶
无
策略操作¶
无
数据源¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
此规范的目标是提高其他项目利用 oslo.messaging 提供的通知机制的能力。
其他最终用户影响¶
无
性能影响¶
使用此代码的项目性能影响将是最小的,因为只有命中数据库的 delta 才会发布到总线。此外,由于每个项目都可以配置发布到总线的表,因此项目所有者可以调整任何可能的性能影响。
其他部署者影响¶
在配置中间件时,我们建议一个关键配置选项:应该发布到总线的表。
开发者影响¶
无
实现¶
负责人¶
- 主要负责人
<launchpad-id 或 None>
- 其他贡献者
<launchpad-id 或 None>
工作项¶
编写基本中间件功能
将其集成到 oslo.db 中
将其安装到现有服务中,例如 Nova。
独立文档
依赖项¶
enable-delta-driven-datasources:启用 datasources/DatasourceDriver 类连接到发送 delta 的数据源。
测试¶
单元测试基本功能
Tempest 测试 o 验证配置为发布的表的更改是否实际发布 o 验证配置为不发布的表的更改是否未发布
文档影响¶
需要在 oslo 中提供基本中间件的文档。需要更新 oslo.db 的文档
参考资料¶
无