Architecture summary

同步器

同步器是 vitrage 内部模块,它通过轮询请求提供 OpenStack 服务的快照(所有实体),或者,通过推送通知提供组成相同 OS 服务的实体的变更通知。

问题描述

启用 vitrage 并为了维护 OS 服务、Nagios 等的最新的视图,它会进行采样。

提议的变更

定期采样 OS 服务、Nagios 等,并在发生变化时生成最新的实体(与增量相反)

设计

与模块交互

获取所有通知
  • 实体类型列表

变更通知
  • 注册

    提供实体类型列表和一个回调函数,供同步器调用以发送信息,并发立即执行(对此函数的调用不会阻塞调用者),由 vitrage 图管理器完成

  • 推送通知

同步器响应
  • 列表-全部和通知响应包含实体

  • 每个实体必须包含:key parent/child key type timestamp? CRUD 操作 (新实体/更新/…) state (active/shutdown/…) project (role)

同步器插件

插件种类

消息总线插件
  • 通过 oslo-messaging 库注册消息总线通知

收集器插件
+-------------------------------------------------------------------------------------------------+
|                                                                                                 |
|       vitrage graph    ^                                                      ^                 |
|                        |                                                      |                 |
+-------------------------------------------------------------------------------------------------+
                         |                                                      |
+------------------------------------------------------------------------------------------------+
|                        |          synchronizer                                |                |
|                        |                                                      |                |
|                        |                                                      |                |
|               +--------+-----------------------+     collect          +-------+------------+   |
|               |                                |     notifications    |                    |   |
|               |     worker                     +---+-------------+    |  worker            |   |
|               |                                |   |             |    |                    |   |
|               +--------------------------------+   |             |    +------------------+-+   |
|                          notification              |             |          collect      |     |
|                                                    |             |          notifications|     |
|                                                    |             |                       |     |
| +------------------------------------------------------------+  +v----------+  +------------+  |
| |                         collector plugin         |         |  | msg bus   |  |  msg bus|  |  |
| |                                                  |         |  | plugin    |  |  plugin v  |  |
| |                                                  |         |  |           |  |            |  |
| |                                                  |         |  |           |  |            |  |
| |                                                  |         |  |           |  |            |  |
| |                                                  |         |  |           |  |            |  |
| |                                                  |         |  |           |  |            |  |
| |                                                  |         |  |           |  |            |  |
| |             +----------------------------+       |         |  |           |  |            |  |
| |    baseline:|hash0|hash1|hash2|hash3|... | <-----+         |  |           |  |            |  |
| |             +----------^-----------------+       |         |  |           |  |            |  |
| |                        |if                       |         |  |           |  |            |  |
| |                        |hash(item)!=hash1 ==>    |         |  |           |  |            |  |
| |                        |propagate item as a      |         |  |           |  |            |  |
| |                        |change notification      |         |  |           |  |            |  |
| |                        |                         |         |  |           |  |            |  |
| |            +-----------+---------------+         |         |  |           |  |            |  |
| |            |sampling  ^             <------------+         |  |           |  |            |  |
| |            +----------|----------------+                   |  |           |  |            |  |
| |                       |                                    |  |           |  |            |  |
| |                                                            |  |           |  |            |  |
| |                       |                                    |  |           |  |            |  |
| +------------------------------------------------------------+  +-----------+  +------------+  |
|                         |                                                                      |
+------------------------------------------------------------------------------------------------+
                          |
              +-----------+-------------------+
              |      OS service               |
              +-------------------------------+
  • 采样 OS 服务、Nagios 等。

  • 通过每个 OS 服务的 REST API

  • 收集方法:检索 OS 服务元素列表。为了:变更通知 - 作为定期收集最新快照的一部分,我们将使用此方法对不传播变更通知的 OS 服务进行收集。在自己的收集子进程中运行,如何发现快照收集后实体的变更,我们希望知道自上次快照以来哪个实体发生了变更,为了实现这一点,我们将维护一个基线 - 一个数据结构,其中包含每个 OS 服务实体(例如虚拟机实例)的 ID + 最后的收集时间戳或表示其最新状态的哈希值。通过将最新的元素快照与基线进行比较,我们将知道要为哪个实体传播通知。为揭示此功能的服务的增量收集,对于变更通知,这是一个简单的情况,变更通知直接传递给注册者。

  • 部署 - 作为库

消费者流程

  • 新插件
    编写 my_plugin.py

    my_plugin(synchronizer.BasePlugin): … 在 conf 文件中注册 my_plugin 类路径,安装包含 my_plugin.py 的 egg,重启 vitrage 服务

  • 初始配置
    • 配置 nova、heat 等,以便向 vitrage 发送消息总线通知(监听器从队列中删除消息总线通知的消费)

    • 配置活动实体类型

    • 配置消息总线凭据,用于消息总线监听器

    • 配置 Nagios 凭据

  • 注册“变更通知” - 对于流式变更通知,在同步器初始化时,消费者将提供返回通知的队列,同步器初始化时将生成子进程,定期调用“获取全部”以向图提供最新的快照。

备选方案

数据模型影响

待定

REST API 影响

待定

版本影响

待定

其他最终用户影响

部署者影响

待定

开发者影响

待定

Horizon 影响

实现

负责人

待定

工作项

待定

依赖项

待定

测试

单元测试 - Tox 集成测试 - Tempest

文档影响

待定

参考资料

待定