2023-06-03 11:44:16 81阅读
API endpoint(trove-api)本质上是一个HTTP的Web服务,具备处理鉴权、授权、与数据存储相关的基本命令和控制功能。根据数据库不同,API还有一些不同的扩展。
API Server与两个系统沟通——与Task Manager沟通,来处理复杂的异步任务;直接与Guest Agent沟通来处理简单的任务比如获取MySQL用户列表等,这部分操作均是同步的。API Server不做任何重大/复杂的事情,它的任务就是接收请求,将其转化为消息,校验它们,并将这些消息转发到任务管理器(Task Manager)和访客代理(Guest Agent)。
Trove/bin/trove-api
Trove/etc/trove/api-paste.ini
配置
trove.common.api:app_factory
提供给trove应用service.py
中models.py
中的一个类这部分组件仿照了Nova架构。Message Bus其实就是一个消息队列。
一个典型的消息传递事件从API服务器接收到用户的请求开始。API服务器认证用户确保用户具备执行响应命令的权限。对请求中涉及到的对象的可用性进行评估,如果可用,将请求路由到相关Worker的排队引擎。Workers不断根据自己的角色监听消息队列,当这种监听产生一个工作请求时,Worker将对该任务进行任务分配并开始执行。完成任务后,Worker将响应发送到消息队列,由API服务器接受并中继到始发用户的队列。在整个过程中,数据库记录根据需要会被查询、添加或者删除。
Task Manager(trove-taskmanager)就是干粗活累活的家伙,比如配置一台实例,管理实例生命周期和在实例上进行操作。任务管理器接收来自API Server的消息,通过同意消息进行响应,并开始执行任务。有几个复杂的任务,比如重新分配数据库规格和创建实例等,他们均需要通过HTTP请求调用OpenStack的服务,同时也需要轮询服务,知道实例变为活动状态,并且还向客户代理发送消息。任务管理器处理在多个分布式系统中发生的进程流。
任务管理器是有状态的,它在其系统内部运行复杂的流程。如果在状态处理期间任务管理器节点脱机,则操作将失败。任务流系统将最终实现为长时间运行运行的任务。(The Task Flow system will be eventually implemented for long running tasks.)
Trove/bin/trove-taskmanager
Trove/etc/trove/trove-taskmanager.conf.sample
配置文件进行配置,定义了trove.taskmanager.manager.Manager
作为manager,基本上这是通过队列到达的请求的入口点_cast()
或者_call()
(同步/异步)将对该组件的请求从另一个组件推送到MQ中,并放置方法命作为一个参数Trove/openstack/common/rpc/dispatcher.py
中的RpcDispatcher.dispatch()
通过反射的方式调用Manager中合适的方法models.py
模块中的一个对象,它使用context和instance_id从相关类加载一个对象models.py
中完成客户代理(Guest Agent,trove-guestagent)运行在客户实例内部,负责管理和执行数据存储本身的操作。它负责使数据存储在线,这可能是一个复杂的任务。热支持(Heat support)将来将成为Trove的默认配置和仪器引擎,从而减少了将数据存储库联机的任务。Guest Agent还通过Conductor(指挥器)向API Server发送心跳信息。
每个数据存储器都实现有一个客户端代理,负责为该数据存储器执行特定人物。比如Redis的客户代理行为与MySQL的客户代理行为就会不同。不过他们必须履行诸如创建和调整规格的基础操作。
Trove/bin/trove-guestagent
Trove/etc/trove/trove-guestagent.conf.sample
配置文件进行配置,定义了trove.guestagent.manager.Manager
作为manager,基本上这是通过队列到达的请求的入口点_cast()
或者_call()
(同步/异步)将对该组件的请求从另一个组件推送到MQ中,并放置方法命作为一个参数Trove/openstack/common/rpc/dispatcher.py
中的RpcDispatcher.dispatch()
通过反射的方式调用Manager中合适的方法dbaas.py
中dbaas.py
中完成指挥器(Conductor)是运行在宿主机上的饿一个服务,负责接收客户实例中的消息,并在宿主机上更新信息,比如,实例的状态和当前备份的状态。有了指挥器,用户的实例不需要直接连接到宿主机的数据库。指挥器通过Message Bus监听RPC消息,并执行相关的操作。指挥器与客户代理有些类似,因为它是一个监听RabbitMQ主题的服务,不同的是Conductor运行在宿主机上,而非客户实例内部。客户代理通过将消息放入配置的消息队列——conductor_queue,默认为trove-conductor
——来与指挥器进行信息交互。
Trove/bin/trove-conductor
Trove/etc/trove/trove-conductor.conf.sample
配置文件进行配置,定义了trove.conductor.manager.Manager
作为Manager{"method": "<method_name>", "args": {<arguments>}}
trove/conductor/manager.py
完成翻译自Trove wiki
2023-06-03 11:44:16 81阅读
API endpoint(trove-api)本质上是一个HTTP的Web服务,具备处理鉴权、授权、与数据存储相关的基本命令和控制功能。根据数据库不同,API还有一些不同的扩展。
API Server与两个系统沟通——与Task Manager沟通,来处理复杂的异步任务;直接与Guest Agent沟通来处理简单的任务比如获取MySQL用户列表等,这部分操作均是同步的。API Server不做任何重大/复杂的事情,它的任务就是接收请求,将其转化为消息,校验它们,并将这些消息转发到任务管理器(Task Manager)和访客代理(Guest Agent)。
Trove/bin/trove-api
Trove/etc/trove/api-paste.ini
配置
trove.common.api:app_factory
提供给trove应用service.py
中models.py
中的一个类这部分组件仿照了Nova架构。Message Bus其实就是一个消息队列。
一个典型的消息传递事件从API服务器接收到用户的请求开始。API服务器认证用户确保用户具备执行响应命令的权限。对请求中涉及到的对象的可用性进行评估,如果可用,将请求路由到相关Worker的排队引擎。Workers不断根据自己的角色监听消息队列,当这种监听产生一个工作请求时,Worker将对该任务进行任务分配并开始执行。完成任务后,Worker将响应发送到消息队列,由API服务器接受并中继到始发用户的队列。在整个过程中,数据库记录根据需要会被查询、添加或者删除。
Task Manager(trove-taskmanager)就是干粗活累活的家伙,比如配置一台实例,管理实例生命周期和在实例上进行操作。任务管理器接收来自API Server的消息,通过同意消息进行响应,并开始执行任务。有几个复杂的任务,比如重新分配数据库规格和创建实例等,他们均需要通过HTTP请求调用OpenStack的服务,同时也需要轮询服务,知道实例变为活动状态,并且还向客户代理发送消息。任务管理器处理在多个分布式系统中发生的进程流。
任务管理器是有状态的,它在其系统内部运行复杂的流程。如果在状态处理期间任务管理器节点脱机,则操作将失败。任务流系统将最终实现为长时间运行运行的任务。(The Task Flow system will be eventually implemented for long running tasks.)
Trove/bin/trove-taskmanager
Trove/etc/trove/trove-taskmanager.conf.sample
配置文件进行配置,定义了trove.taskmanager.manager.Manager
作为manager,基本上这是通过队列到达的请求的入口点_cast()
或者_call()
(同步/异步)将对该组件的请求从另一个组件推送到MQ中,并放置方法命作为一个参数Trove/openstack/common/rpc/dispatcher.py
中的RpcDispatcher.dispatch()
通过反射的方式调用Manager中合适的方法models.py
模块中的一个对象,它使用context和instance_id从相关类加载一个对象models.py
中完成客户代理(Guest Agent,trove-guestagent)运行在客户实例内部,负责管理和执行数据存储本身的操作。它负责使数据存储在线,这可能是一个复杂的任务。热支持(Heat support)将来将成为Trove的默认配置和仪器引擎,从而减少了将数据存储库联机的任务。Guest Agent还通过Conductor(指挥器)向API Server发送心跳信息。
每个数据存储器都实现有一个客户端代理,负责为该数据存储器执行特定人物。比如Redis的客户代理行为与MySQL的客户代理行为就会不同。不过他们必须履行诸如创建和调整规格的基础操作。
Trove/bin/trove-guestagent
Trove/etc/trove/trove-guestagent.conf.sample
配置文件进行配置,定义了trove.guestagent.manager.Manager
作为manager,基本上这是通过队列到达的请求的入口点_cast()
或者_call()
(同步/异步)将对该组件的请求从另一个组件推送到MQ中,并放置方法命作为一个参数Trove/openstack/common/rpc/dispatcher.py
中的RpcDispatcher.dispatch()
通过反射的方式调用Manager中合适的方法dbaas.py
中dbaas.py
中完成指挥器(Conductor)是运行在宿主机上的饿一个服务,负责接收客户实例中的消息,并在宿主机上更新信息,比如,实例的状态和当前备份的状态。有了指挥器,用户的实例不需要直接连接到宿主机的数据库。指挥器通过Message Bus监听RPC消息,并执行相关的操作。指挥器与客户代理有些类似,因为它是一个监听RabbitMQ主题的服务,不同的是Conductor运行在宿主机上,而非客户实例内部。客户代理通过将消息放入配置的消息队列——conductor_queue,默认为trove-conductor
——来与指挥器进行信息交互。
Trove/bin/trove-conductor
Trove/etc/trove/trove-conductor.conf.sample
配置文件进行配置,定义了trove.conductor.manager.Manager
作为Manager{"method": "<method_name>", "args": {<arguments>}}
trove/conductor/manager.py
完成翻译自Trove wiki