首页 > 代码库 > trove design

trove design

trove的设计

高水平的描述

trove的目的是支持单租户数据库,在一个nova的实例中。没有限制nova是如何配置的,因为trove与其他OpenStack组件纯粹通过API。

 

Trove-api

trove-api服务提供一个支持JSON和XML的RESTful API提供和管理大量的实例。

REST-ful组件

入口点——Trove/ bin / trove-api

使用一个WSGI发射器配置,在Trove/etc/trove/api-paste.ini

定义过滤器的管道;authtoken,ratelimit等等。

定义app_factory ,为troveapp,当做 trove.common.api:app_factory

API类(wsgi路由器)电线其余路径到适当的控制器

实现控制器的相关模块(versions/instance/flavor/limits), 在service.py模块

控制器通常执行重定向到一个类的models.py模块

基于此点,一个api模块的另一个组件(TaskManager、GuestAgent等)通过RabbitMQ用于发送请求开始

Trove-taskmanager

trove-taskmanager服务的重点在于配置实例,实例的生命周期管理,并在数据库实例上执行操作。

 

RabbitMQ的监听服务

切入点Trove/bin/trove-taskmanager

运行由Trove/etc/trove/trove-taskmanager.conf.sample配置的RpcService,这trove.taskmanager.manager.Manager定义为管理者 - 基本上这是请求到达队列的切入点

如上所述,要求该组件被从另一个组件使用TaskManager的MQ api模块使用_cast()或_call()(同步/同步),把方法的名称作为参数

Trove/openstack/common/rpc/dispatcher.py- RpcDispatcher.dispatch()调用适当的方法在一些相当于管理的反射

然后管理处理重定向到一个对象的models.py模块。它加载对象的上下文,即instance_id相关类

实际处理通常是在models.py模块中

 

Trove-guestagent

guestagent是在客人实例运行时的服务,负责管理和执行操作在数据库自身。guestagent侦听RPC消息通过消息总线和执行所请求的操作。

 

类似于TaskManager的感觉作为一个服务运行,监听RabbitMQ。

GuestAgent运行在每个数据库实例,和使用一个专门的MQ主题(标识为实例的id)

入口点——Trove/bin/trove-guestagent

作为RpcService运行,配置来自Trove/etc/trove/trove-guestagent.conf.sample。定义了trove.guestagent.manager.Manager作为管理。基本上这是请求到达队列的切入点。

如上所述,要求该组件被从另一个组件使用GuestAgent的MQ api模块使用_cast()或_call()(同步/同步),把方法的名称作为参数

Trove/openstack/common/rpc/dispatcher.py- RpcDispatcher.dispatch()调用适当的方法在一些相当于管理的反射,然后管理处理重定向到一个对象从dbaas(通常).py模块。

实际处理通常在dbaas.py模块

 

Trove-conductor

Conductor是在主机上运行服务,负责从客人实例接收消息,更新主机的信息。例如,实例状态和当前备份的状态。与Conductor,客人实例不需要直接连接到主机的数据库。Conductor侦听RPC消息通过消息总线和执行相关的操作。

 

类似于它是一个guest-agent服务监听一个RabbitMQ。不同之处在于Conductor生存在主机,而不是客人。

Guest agents与Conductor的交流,通过将消息在cfg中声明,作为conductor_queue 主题。默认情况下,这是“trove-conductor”。

入口点——Trove/bin/trove-conductor

作为RpcService运行,配置在Trove/etc/trove/trove-conductor.conf.sample。定义了trove.conductor.manager.Manager作为管理。基本上这是请求到达队列的切入点。

与guestagent一样,请求被推到MQ使用_cast从另一个组件()(同步),通常的形式{“方法”:“< method_name >”,“参数”:{ <参数> } }

实际数据库更新工作是由trove/conductor/manager.py

“heartbeat”方法用于更新实例的状态。这是用来报告实例从NEW到BUILDING到ACTIVE等等。

“update_backup”方法改变一个备份的详细信息,包括其当前状态,备份的大小,类型和校验和。

 

 

 原地址:http://docs.openstack.org/developer/trove/dev/design.html

 

 

 

 

 

 

 

 

 

trove design