Trove主要逻辑目前Trove支持用户创建一个数据库服务实例,在实例里可以创建多个数据库并进行管理。数据库服务实例目前通过Nova API来创建,然后同样通过Nova API创建一个Volume(未来通过Cinder API)作为存储,然后在Nova Instance里加载预定义的带有MySQL的Image来启动MySQL。此时用户在得到一个创建好的数据库服务实例以后可以通过API创建数据库并 且指定参数,Trove通过在数据库服务实例里的guest agent来完成相应的命令。下图是Trove处理请求的最主要流程。图1 Trove处理请求的主要流程
Trove的当前架构图2 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 ACTIVEdef update_backup(self, context, instance_id, backup_id, sent=None, **backup_fields)更新当前backup的状态信息,如当前状态,已备份的大小,类型和校验情况。
Trove规划中的改进架构将Trove-conductor作为访问trove后端数据库的唯一入口,所有模型的数据库CRDU操作都依靠他来完成。OpenStack很多服务组件都有这样的设计倾向,如nova,都想将db的操作隔离出来,这样做的好处是可以将服务的后端DB与应用层隔离,后端DB可以运行在另一个网络中,实现网络隔离,除conductor外的所有组件都不能直接访问到DB所在的网络。
Trove API初步解读下表列出了Trove 主要的API:

API解读:1.这里的datastore和datastore_version是指存储数据的数据库管理程序和它的版本。例如trove现在支持的数据库管理程序有MySQL、cassandra、mongodb,datastore就是指的是这些。而datastore_version是指这些数据库管理程序的版本,例如5.1,还是5.5之类的。这里可以看到对于datastore和datastore_version,只有查询操作,这也是很正常的,对于DBaaS的服务来说,也只能支持指定的若干数据库类型。这两个resource用来在create db instance的时候供用户选择。
2.flavor是从nova中获取的预先设定好的几种虚拟机规格,只提供查询操作,供用户选择。
3.configuration是指数据库程序配置文件中一堆的配置项,这些配置项由key-value的形式组成;而configuration_parameter是对配置项key的详细信息的记录,它包括配置参数的默认值、是否应该配置、是否可以动态生效以及数据类型是什么。 4.从API我们可以看到security group的操作中没有创建操作,这是因为数据库安全组的目前的设计原则决定的。trove对于security group的目前的设计是:每个数据库实例对应一个安全组,用户不能直接操作安全组,只能添加或删除安全组的规则。未来这个设计可能改变,同时会在加入默认的安全规则集。 5.数据库日志文件可以被保存并上传到swift上。

Trove系列(二)—Trove 的架构和流程介绍的更多相关文章

  1. Zookeeper系列二:分布式架构详解、分布式技术详解、分布式事务

    一.分布式架构详解 1.分布式发展历程 1.1 单点集中式 特点:App.DB.FileServer都部署在一台机器上.并且访问请求量较少 1.2  应用服务和数据服务拆分  特点:App.DB.Fi ...

  2. 软件架构系列二:Clean架构

    外圈的层次可以依赖内层,反之不可以:内圈核心的实体代表业务,不可以依赖其所处的技术环境. 这是著名软件大师Bob大叔提出的一种架构,也是当前各种语言开发架构.干净架构提出了一种单向依赖关系,从而在逻辑 ...

  3. 一:【nopcommerce系列】Nop整体架构的简单介绍,在看nop代码之前,你需要懂哪些东西

    首先,我看的是Nop 3.80,最新版 百度资料很多,Nop用到的主要的技术有: 1.Mvc,最新版用的是 5.2.3.0 2.entity framework 3.autofac 4.插件化 5.( ...

  4. Lucene系列二:Lucene(Lucene介绍、Lucene架构、Lucene集成)

    一.Lucene介绍 1. Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包.提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人 ...

  5. Postman系列二:Postman中get接口实战讲解(接口测试介绍,接口测试流程,头域操作)

    一:接口测试介绍 接口测试:就是针对软件对外提供服务的接口输入输出进行测试,以及接口间相互逻辑的测试,验证接口功能和接口描述文档的一致性. 接口测试好处:接口测试通常能对系统测试的更为彻底,更高的保障 ...

  6. [知识库分享系列] 二、.NET(ASP.NET)

    最近时间又有了新的想法,当我用新的眼光在整理一些很老的知识库时,发现很多东西都已经过时,或者是很基础很零碎的知识点.如果分享出去大家不看倒好,更担心的是会误人子弟,但为了保证此系列的完整,还是选择分享 ...

  7. struts2官方 中文教程 系列二:Hello World项目

    先贴个本帖的地址,免得其它网站被爬去了struts2入门系列二之Hello World  即 http://www.cnblogs.com/linghaoxinpian/p/6898779.html ...

  8. 一生挚友redo log、binlog《死磕MySQL系列 二》

    系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...

  9. 如何一步一步用DDD设计一个电商网站(二)—— 项目架构

    阅读目录 前言 六边形架构 终于开始建项目了 DDD中的3个臭皮匠 CQRS(Command Query Responsibility Segregation) 结语 一.前言 上一篇我们讲了DDD的 ...

随机推荐

  1. 【CF888G】Xor-MST Trie树(模拟最小生成树)

    [CF888G]Xor-MST 题意:给你一张n个点的完全图,每个点有一个权值ai,i到j的边权使ai^aj,求这张图的最小生成树. n<=200000,ai<2^30 题解:学到了求最小 ...

  2. Unity性能优化之Draw Call(转)

    Unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置.法线.UV等),索引(顶点如 ...

  3. iOS - APP审核Guideline 2.5.1被拒,使用了私有API

    最近iOS 审核被拒,说是使用了私有API:com.apple.springboard.lockcomplete 具体内容如下: 发件人 Apple . Performance: Software R ...

  4. Mac - Hexo+GitHub轻松搭建自己的博客

    Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页.官方文档传送门.Hexo的安装是个很快速简便的过程,但 ...

  5. 【巷子】---Mock---基本使用

    一.mock解决的问题 开发时,后端还没完成数据输出,前端只好写静态模拟数据.数据太长了,将数据写在js文件里,完成后挨个改url.某些逻辑复杂的代码,加入或去除模拟数据时得小心翼翼.想要尽可能还原真 ...

  6. PHP-FPM子进程过少解决办法

    /usr/local/php/var/log/php-fpm.log报一下错误 server reached pm.max_children setting (5), consider raising ...

  7. POJ-1458 Common Subsequence(线性动规,最长公共子序列问题)

    Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44464 Accepted: 18186 ...

  8. java 中的继承

    继承的概念 继承就是子类继承父类的特征和行为,使得子类具有父类得属性和方法. 继承得关键字:extends 语法格式:<modifier> class <name> [exte ...

  9. 计蒜客 31451 - Ka Chang - [DFS序+树状数组][2018ICPC沈阳网络预赛J题]

    题目链接:https://nanti.jisuanke.com/t/31451 Given a rooted tree ( the root is node $1$ ) of $N$ nodes. I ...

  10. SQL Fundamentals: 表的创建和管理(表的基本操作,闪回技术flashback,表结构修改)

    SQL Fundamentals || Oracle SQL语言 1.表的基本操作 (CREATE TABLE, DROP TABLE,TRUNCATE TABLE, RENAME tablename ...