对于公有云计算平台来说,只有计算、网络与存储这三大服务往往是不太够的,在目前互联网应用百花齐放的背景下,几乎所有应用都使用到数据库,而数据库承载的往往是应用最核心的数据。此外,在大数据分析越来越盛行的背景下,对数据库的可靠便捷管理也变得更为重要。因此,DBase as a Service(DBaaS,数据库服务)也就顺理成章地成为了云计算平台为用户创造价值的一个重要服务。
对比Amazon AWS中各种关于数据的服务,其中最著名的是RDS(SQL-base)和DynamoDB(NoSQL),除了实现了基本的数据管理能力,还具备良好的伸缩能力、容灾能力和不同规格的性能表现。因此,对于最炙手可热的开源云计算平台Openstack来说,也从Icehouse版加入了DBaaS服务,代号Trove。直到去年底发布的Openstack Liberty版本,Trove已经经过了4个版本的迭代发布,目前已经成为Openstack官方可选的核心服务之一。本文将深入介绍Trove的原理、架构与功能,并通过实践来展示Trove的应用。
Trove的设计目标
“Trove is Database as a Service for OpenStack. It’s designed to run entirely on OpenStack, with the goal of allowing users to quickly and easily utilize the features of a relational or non-relational database without the burden of handling complex administrative tasks. ”这是Trove在官方首页上对这个项目的说明,有两个关键点。一个是从产品设计上说,它定位不仅仅是关系型数据库,而且还涵盖非关系数据库的服务。另一个是从产品实现上说,它是完全基于Openstack的。
从第一点可以看出Trove解决问题的高度已经超越了同类产品。因为我们从其他云计算平台对比去看,关系型和非关系型数据库都是由不同的服务去提供(比如AWS的RDS和DynamoDB),而且实现上也往往互相独立的系统,不仅UI不同,API也不一样。而Trove的目标是抽象尽可能多的东西,对外提供统一的UI和API,尽量减少冗余实现,提升平台内聚。只要具备了实例、数据库、用户、配置、备份、集群、主从复制这些概念,不管是关系型还是非关系型数据库,都能统一管理起来。从最新的Liberty版本发布的情况下,目前开源的主流关系型和非关系型数据库也得到了支持,比如Mysql(包括Percona和MariaDB分支)、Postgresql、Redis、MongoDB、CouchDB、Cassandra等等。不过根据官方的介绍,目前只有Mysql是得到了充分的生产性测试,其他的还处于实验性阶段。
而第二点完全基于Openstack的,可以说是一个较大的创新。试想,假设你是一个云计算服务商,如果现在要提供数据库服务,只需要在原有平台软件上升级与配置一下就行,其他什么都不需要,不需要采购数据库服务器硬件,不需要规划网络,不需要规划IDC,这是一种什么样的感觉?Trove完全构建于Openstack原有的几大基础服务之上。打个比喻类似于Google著名的Bigtable服务是构建于GFS、Borg、Chubby等几个基础服务之上。所以,Trove实际上拥有了云平台的一些基础特性,比如容灾隔离、动态调度、快速响应等能力,而且从研发的角度看,也大大减少了重复造轮子的现象。
Trove的架构介绍
实际上Trove的架构(最新版本)与Openstack Nova项目的架构是如出一辙,可以说是Nova的一个简化版。也是典型的Openstack项目架构风格。Trove所管理的各个数据库引擎的差异性主要体现在trove-guestagent的具体manager和strategies代码实现上。架构如图所示:
trove-api是接入层,轻量级请求通过在接入层直接处理或者通过直接访问guestagent处理,比如获取实例列表、获取实例规格列表等;而比较重的请求则通过message bus(Openstack默认实现是Rabbitmq)中转给trove-taskmanager进行调度处理。trove-taskmanager是调度处理层,主要是处理较重的请求,比如创建实例、实例resize等。
taskmanager会通过Nova、Swift的API访问Openstack基础的服务,而且是有状态的,是整个系统的核心。trove-conductor是guestagent访问数据库的代理层,主要是为了屏蔽掉guestagent直接对数据库的访问。
在Trove目前的实现中,一个数据库实例一一对映到一个vm,而guestagent也是运行在vm里面。vm镜像包含了经过裁剪的操作系统、数据库引擎和guestagent(镜像具体实现没有标准,数据库引擎和guestagent也都可以在vm启动时通过网络动态装载)。而实例所在分区的硬盘是通过Cinder提供的云硬盘。每个vm都会关联一个安全组防火墙,只允许数据库服务的端口通过(比如Mysql,默认是TCP 3306端口)。从这里可以看出,Trove创建数据库实例是非常灵活的,后期的调度也非常方便,这些都得益于Nova和Cinder。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉