跳转到: 导航, 搜索

Trove

使命宣言

OpenStack 开放源代码数据库即服务使命:为关系型和非关系型数据库引擎提供可扩展且可靠的云数据库即服务配置功能,并不断改进其功能完善且可扩展的开源框架。

描述

Trove 是 OpenStack 的数据库即服务。它被设计为完全运行在 OpenStack 上,旨在允许用户快速轻松地利用关系型或非关系型数据库的功能,而无需承担处理复杂管理任务的负担。云用户和数据库管理员可以根据需要配置和管理多个数据库实例。最初,该服务将侧重于提供高性能的资源隔离,同时自动化复杂的管理任务,包括部署、配置、补丁、备份、恢复和监控。

设计

Trove 被设计为在 Nova 实例中支持单个租户数据库。由于 Trove 通过 API 与其他 OpenStack 组件进行交互,因此对 Nova 的配置没有任何限制。更详细的架构信息可以在 这里 找到

trove-api

trove-api 服务提供了一个 RESTful API,支持 JSON 和 XML,用于配置和管理 Trove 实例。

  • 一个 RESTful 组件
  • 入口点 - Trove/bin/trove-api
  • 使用由 Trove/etc/trove/api-paste.ini 配置的 WSGI 启动器
    • 定义了过滤器管道;token 认证、速率限制等。
    • 定义了 trove 应用的 app_factory 为 trove.common.api:app_factory
  • API 类(一个 wsgi Router)将 REST 路径连接到适当的控制器
    • 控制器的实现位于相关的模块(versions/instance/flavor/limits)中,位于 service.py 模块中
  • 控制器通常将实现重定向到 models.py 模块中的一个类
  • 此时,使用另一个组件(TaskManager、GuestAgent 等)的 api 模块通过 RabbitMQ 发送请求

trove-taskmanager

trove-taskmanager 服务负责实例配置、管理实例生命周期以及对数据库实例执行操作等繁重的工作。

  • 一个监听 RabbitMQ 主题的服务
  • 入口点 - Trove/bin/trove-taskmanager
  • 作为 RpcService 运行,由 Trove/etc/trove/trove-taskmanager.conf.sample 配置,该文件定义 trove.taskmanager.manager.Manager 作为管理器 - 基本上,这是通过队列到达的请求的入口点
  • 如上所述,来自另一个组件的请求通过 TaskManager 的 api 模块使用 _cast() 或 _call()(同步/异步)将请求推送到 MQ,并将方法名称作为参数
  • Trove/openstack/common/rpc/dispatcher.py- RpcDispatcher.dispatch() 通过类似于反射的方式在 Manager 中调用适当的方法
  • Manager 然后将处理重定向到 models.py 模块中的一个对象。它从相关的类加载一个对象,并带有上下文和 instance_id
  • 实际处理通常在 models.py 模块中完成

trove-guestagent

guestagent 是在客户实例内运行的服务,负责管理和执行数据库上的操作。Guest Agent 监听消息总线上的 RPC 消息并执行请求的操作。

  • 与 TaskManager 类似,它作为一个监听 RabbitMQ 主题的服务运行
  • GuestAgent 运行在每个 DB 实例上,并使用一个专用的 MQ 主题(标识为实例的 ID)
  • 入口点 - Trove/bin/trove-guestagent
  • 作为 RpcService 运行,由 Trove/etc/trove/trove-guestagent.conf.sample 配置,该文件定义 trove.guestagent.manager.Manager 作为管理器 - 基本上,这是通过队列到达的请求的入口点
  • 如上所述,来自另一个组件的请求通过 GuestAgent 的 api 模块使用 _cast() 或 _call()(同步/异步)将请求推送到 MQ,并将方法名称作为参数
  • Trove/openstack/common/rpc/dispatcher.py- RpcDispatcher.dispatch() 通过类似于反射的方式在 Manager 中调用适当的方法
  • Manager 然后将处理重定向到 dbaas.py 模块中的一个对象(通常)。
  • 实际处理通常在 dbaas.py 模块中完成

源代码仓库

安装和部署