Openstack trove探究(2)——Trove的当前架构

背景

这是本系列的第二篇,主要关注Trove的当前架构。

Trove的当前架构图

Openstack trove探究(2)——Trove的当前架构_第1张图片

Trove的当前架构说明

trove-api

     提供REST风格的API,支持json和xml,程序源代码入口在trove/cmd/api.py。API server与两个组件通信,所有复杂的异步任务它都交给taskmanager去完成,有些信息它会直接从trove的后端DB中获得。

     根据其配置文件api-paste.ini,可以看到起最终APP的入口是:trove/common/api.py,这就是整个trove除了version和extension外所有资源对象操作的总入口。在API类中明确定义了url和处理的controller的路由关系,非常的清晰。

trove-taskmanager

     负责配置数据库虚拟机实例,管理数据库虚拟机实例的生命周期和执行这对数据库虚拟机实例的各种操作.监听消息队列服务器的RPC service,程序源代码入口在trove/cmd/taskmanage.py。需要特别注意:trove-taskmanager是一个有状态的服务,它负责组织复杂的业务流程。如果在有状态的处理流程当中,taskmanager挂了,则任务就被认为失败。

trove-guestagent

运行于数据库虚拟机实例的内部,负责管理和实际执行对数据库管理程序的任务。guestagent在消息总线上监听RPC消息,执行要求的操作。程序源代码入口在trove/cmd/guest.py。每一种数据库都有与之对应的不同的guestagent,显而易见,redis的guestagent和mysql的guestagent的行为不可能是一样的。

trove-conductor

      负责从guestagents收集状态信息然后将其写入Trove的后端数据库,其与guestagent交互基于RPC实现。这个组件的引入就是为了实现这样的目的,即db instance内的gusestagent不应直接与trove的后端数据库相连。程序源代码入口在trove/cmd/conductor.py。从目前的代码看,这个组件就两个功能函数:
  • def heartbeat(self, context, instance_id, payload, sent=None)
     上报DBinstance的心跳和状态信息,如NEW to BUILDING to ACTIVE
  • def update_backup(self, context, instance_id, backup_id, sent=None, **backup_fields)
     更新当前backup的状态信息,如当前状态,已备份的大小,类型和校验情况

规划中的改进

Openstack trove探究(2)——Trove的当前架构_第2张图片

    将Trove-conductor作为访问trove后端数据库的唯一入口,所有模型的数据库CRDU操作都依靠他来完成。openstack很多服务组件都有这样的设计倾向,如nova,都想将db的操作隔离出来,就我目前的了解,这样做的好处是可以将服务的后端DB与应用层隔离,后端DB可以运行在另一个网络中,实现网络隔离,除conductor外的所有组件都不能直接访问到DB所在的网络。

参考链接

https://wiki.openstack.org/wiki/TroveArchitecture
http://www.mirantis.com/blog/the-present-and-the-future-of-openstack-trove-architecture/
http://www.mirantis.com/blog/improving-trove-architecture-design-conductor-service/


你可能感兴趣的:(openstack)