推送型 DataSource 驱动

https://blueprints.launchpad.net/congress/+spec/push-type-datasource-driver

问题描述

目前 DataSource 驱动通过轮询每个数据源来检索所有云服务的相关信息。轮询的目的是定期监控云服务。因此,Congress 无法在云服务发生更改后立即注意到更改。这意味着策略违规行为不会在 Congress 轮询到更改之前被检测到。此外,Congress 调用服务的 API 来获取表格的数据,因此数据源表格的模式取决于 API 响应的内容。

在监控领域,世界上已经存在大量开发完善的监控系统。这些系统能够在云服务发生更改后立即发出通知。并且这些监控系统可以检测到 Congress 无法检测到的许多云服务更改。

Congress 应该将通知作为 DataSource 来接收,因为这有助于 Congress 比现在更快地计算策略违规行为,并且也使我们能够定义各种策略和规则。

提议的变更

BP 中提出的更改如下:

  1. 创建 PollingDataSourceDriver 和 PushedDataSourceDriver 类。当前的

    DataSourceDriver 具有 2 个功能。一个是将数据转换为数据源表格并将其发送到策略引擎。另一个是从数据源轮询数据。我们应该将轮询功能分离到另一个类中,该类是 DataSourceDriver 的子类,命名为 PollingDataSourceDriver。然后我们创建 PushedDataSourceDriver,它是 DataSourceDriver 的子类,并从监控系统接收数据。

  2. 创建 HttpReceiverDriver 子类或 OsloMsgReceiverDriver 子类

    这两个驱动程序都是 PushedDataSourceDriver 的子类,并通过类名中包含的协议接收数据源信息。DataSourceDriver 必须在自身内部维护数据源状态,因此这些类将支持两种数据接收方法。一种是每次推送时接收所有状态数据。另一种是仅接收表示状态中哪些行被删除或添加的增量数据,类似于 REST API。

    首先,BP 将根据需要使用 PushedDatasourceDriver 的用例选择并实现其中一种。

作为首次实现,存在一些限制:

  • 表格定义

    理想情况下,PushedDataSourceDriver 应该允许管理员通过 Congress API 更改数据源名称、表格名称、模式等。在首次实现中,PushedDataSourceDriver 将协议名称定义为数据源名称。然后管理员可以在另一个 Python 文件中定义一个转换器。在当前架构中,路径通过创建数据源 API 调用中的“config”键设置。在分布式架构中,路径通过每个数据源驱动程序的一个配置文件设置。

备选方案

另一种选择是允许 Congress 通过 API 调用添加和删除行。API 是 REST API,因此好处是创建和删除方法都已经开发完成。但是,这种方法存在以下缺点。首先,所有请求都需要身份验证才能推送数据。这意味着所有数据源都必须与 Keystone 授权相关联。其次,根据每个 API 的目的很难划分网络分段。如果 Congress 启用 API 以检索数据源,则数据源接收器将暴露给用户。

策略

示例:定义一个表格,显示与主机故障相关的服务名称

由监控系统检测到。

假设:监控系统通过 http 推送数据。col_1 表示

监控系统检测到某些故障的主机名称。col_2 表示故障类型。

host_failures(host):-

http:table(col_1=host, col_2=”nic_error”)

host_failures(host):-

http:table(col_1=host, col_2=”disk_error”)

failure_effected_service(service, host) :-

nova:service(host_name=host, service=service), host_failures(host=host)

策略动作

N/A

数据源

添加新的数据源模型和表格。

数据模型影响

N/A

REST API 影响

通过 API 创建新的数据源名称、表格名称和表格模式是未来的工作。这意味着此功能不在本次 BP 的范围内。

安全影响

它使其他人能够将数据源行推送到数据源驱动程序。如果恶意用户故意发送数据,可能会导致不受欢迎的策略违规行为。

通知影响

N/A

其他最终用户影响

N/A

性能影响

PushedDataSourceDriver 在从监控系统接收到更改时会通知状态更改。如果系统频繁发送通知,可能会导致 Congress 忙于计算策略表格。

其他部署者影响

  • 添加列数的配置

  • 由于“安全影响”部分中描述的原因,默认情况下禁用 PushedDataSourceDriver

开发者影响

N/A

实现

负责人

主要负责人

muroi-masahito

其他贡献者

工作项

  1. 创建 PollingDataSourceDriver 子类,并将 DataSourceDriver 类中与轮询相关的方法提取到新的驱动程序中

  2. 创建 PushedDataSourceDriver 子类

  3. 创建 HttpReceiverDriver 或 OsloMsgReceiverDriver

依赖项

N/A

测试

  • 添加与新类相关的单元测试

  • 如果可能,添加使用推送数据在规则中的 tempest 场景测试

文档影响

如果文档中描述了列表,则将更新数据源列表。