基于LibCloud的云代理系统设计与实现

2016-12-14 09:08黄志兰刘京松关天强陈楠
广东通信技术 2016年8期
关键词:镜像硬盘代理

[黄志兰 刘京松 关天强 陈楠]

基于LibCloud的云代理系统设计与实现

[黄志兰 刘京松 关天强 陈楠]

公有云服务市场竞争日趋激励,在行业、地域、功能、性能等方面呈现出多样性和复杂性,催生了云服务代理市场的繁荣。主流云服务代理以实现多个云平台的聚合和简单集成为主,能够为云消费者提供单点集中管理多云的服务。设计并实现了一个基于开源多云管理项目LibCloud的云代理系统,该系统聚合了OpenStack私有云、AWS公有云和天翼云,使得用户能够在同一界面操作这些云平台的云主机,简化了用户对不同云平台的使用。

云服务代理 云代理 multicloud libcloud

黄志兰

硕士,2007年毕业于中山大学,现就职于中国电信股份有限公司广州研究院,主要研究方向为SDN、云计算、IPv6。

刘京松

硕士,2011年毕业于宁波大学,现就职于中国电信股份有限公司广州研究院,主要研究方向为云计算。

关天强

本科学士,2014年毕业于中山大学,现就职于中国电信股份有限公司广州研究院,主要研究方向为云计算、SDN、OpenStack。

陈楠

2008年毕业于华南理工大学,获工学博士学位,现就职于中国电信股份有限公司广州研究院,ITU-T Q14/SG11联合报告人,Q18/SG13编辑人,主要研究方向包括SDN,NFV,服务器虚拟化、数据中心网络、管理平台技术等。

1 引言

云服务代理(CSB,Cloud Service Brokerage,简称云代理,Cloud Broker)[1]既是一种IT角色也是一种商业模式,在这种商业模式下,由中立的第三方厂商或者实体公司来为云消费者提供更加专业的、单点集中的多云管理服务,帮助云消费者以最有利的方式来采购、实施和管理云。云服务代理有3种模式,包括云服务的聚合(aggregation)、集成(integration)、或定制化(customization)代理。其中,聚合型云服务代理的实现最为简单,主要将多个云服务汇聚起来,单点提供给云消费者,实现对多个云服务的单点登陆、统一管理、统一计费、统一部署、SLA管理、客户支持等;集成则在聚合的基础上为云消费者提供云服务治理、网络集成、云间数据迁移等新的业务功能;定制化云代理最难实现,要求根据客户需求对现有云服务进行定制化开发,改变或者增加云服务功能[2]。目前主流的云服务代理主要实现汇聚和简单的集成功能。

云服务代理是一种复杂的云计算服务模型,涉及多云管理、云接口适配、云间网络互联、云间迁移、云间资源编排等众多类型的云技术。不同模式的云服务代理对底层技术的要求不相同,实现难度也各不相同。聚合型云服务代理的业务模型相对简单,对底层技术的要求也相对简单,要求具备多云单点集中管理的能力即可。

开源多云管理项目LibCloud[3],是Apache开源基金会旗下的顶级项目,被Scalr[4]等业界知名的云代理服务提供商所使用。它将不同云服务对外提供的操作整理和集合起来,形成针对云主机、块存储、负载均衡和DNS等资源和服务的通用操作,并将这些操作通过统一的API接口定义出来,封装成开源的Python库,具有简单、易用、跨平台支持良好等优点。目前支持AWS、OpenStack、Rackspace、Azure等超过30个不同的云服务提供商。

我们基于LibCloud设计和实现了一个聚合型云服务代理系统,该系统整合了OpenStack私有云、亚马逊公有云(AWS,Amazon Web Service)和天翼云,实现了对这些云服务的统一认证、统一管理和统一监控,使得云用户能够在单一界面操作不同云平台的云主机。

本文的余下部分将对云代理系统的设计与实现进行介绍,第2节介绍云代理系统的具体实现方案,第3节分析系统特色,第4节对现有工作进行总结。

2 云代理系统的实现方案

2.1功能设计

我们设计和实现了聚合型云服务代理系统,该系统围绕云主机服务为用户提供单点集中管理多云的功能,包括:云主机生命周期管理、云硬盘管理、镜像管理,以及单点登录、统一计费、统一监控等功能。云代理系统后端管理3朵云,分别是OpenStack私有云、亚马逊AWS和天翼云。

系统主体功能设计如图1所示。

图1 云代理系统功能结构

其中,认证模块由两部分组成,分别是云代理系统自身的用户管理模块,提供系统的注册、登录、退出等基本功能,以及云提供商账号管理模块,用于关联及管理AWS、天翼云、OpenStack云平台的登陆账号信息,实现不同云平台的单点登录。

云主机管理模块完成云主机的生命周期管理,包括:创建、删除、启动、停止、暂停等。云代理系统维护云主机的类型,包括云主机所属的IAAS平台。

镜像管理模块负责管理常用镜像,以避免每次使用镜像时对远端镜像库的检索。

云硬盘管理模块负责创建/删除云硬盘(块存储设备),并将其挂载到某一台云主机,或者将其从云主机中卸载。

计费模块负责跟踪用户通过云代理系统操作云资源时产生订单信息,并提供后端云平台的费用统计。

系统监控模块提供不同云平台云资源的统一监控界面,包括监控云主机的运行状态、资源使用情况等,在云主机出现异常时,能够触发告警通知客户进行处理。此外,监控模块也提供各个后端云平台的资源统计信息。

2.2系统架构

通过互联网提供IT资源和服务是云计算区别于传统数据中心IT资源提供方式的最主要特征之一,作为消费者和云提供商中间媒介的云代理系统也理所应当通过互联网提供服务。因此,我们采用主流的B/S模式设计和实现云代理系统。资源管理、单点登录、监控、计费等多云管理功能作为WEB应用的业务逻辑模块进行开发。云代理系统引入LibCloud作为云接口适配器对后端云平台的接口进行统一,以降低系统开发的复杂度。相对其他开源云接口适配项目如JCloud[5]、DeltaCloud[6]而言,LibCloud的社区活跃度较高,并且支持的云平台种类、使用者和支持者都要优于其他开源项目。

云代理系统架构图如图2所示。

图2 云代理系统架构

系统采用经典的MVC模式设计,采用Django作为WEB应用框架。Django是一个基于Python语言的开放源代码Web应用框架,提供对象关系映射、用户界面设计、URL设计等功能,用于实现应用开发和数据库管理,具有简单、易用、高性能等特点。WEB前端则使用jquery easyui和html实现。Web前端通过Ajax向后端服务器发送请求,数据以json的格式封装。django后端收到请求后转入业务逻辑处理,然后以json的格式返回response数据。

2.3云适配模块

云代理系统采用开源LibCloud项目作为云接口适配器。LibCloud项目将不同云服务对外提供的操作整理和集合起来,形成针对云主机、块存储、对象存储、CDN、负载均衡和DNS等资源和服务的通用操作,如增加、删除、查询、修改等,并将这些操作通过统一的API接口定义出来,封装成开源的Python库。各个云服务以驱动(Driver)的方式实现LibCloud定义的标准接口,也可以对接口进行扩展以实现更多高阶的服务。基于LibCloud的云适配器架构如图3所示。

图3 LibCloud系统架构

具体说来,LibCloud将不同云平台共有的概念特性抽象出来,形成一系列基类(放在libcloud.compute.base包中),基类定义资源的基本属性和通用操作,如ID、名称、一些共有属性、所属云驱动等,各个云平台的驱动可以根据各自的业务需求对基类进行继承和扩展。LibCloud提供以下几种类型的基类:(1)Node:云平台创建的虚拟机或者虚拟服务器;(2)NodeDriver:云平台的接口驱动,LibCloud通过Driver来调用云平台的API实现;(3)NodeSize:虚拟机规格,包括vCPU、RAM、带宽、磁盘大小等配置;(4)NodeImage:操作系统镜像;(5)NodeLocation:区域划分;(6)NodeState:虚拟机的状态,如运行、关机、挂起、错误等;(7)Keypair:虚拟机的密钥对,用于SSH远程登录;(8)StorageVolume:云平台的块存储对象;(9)VolumeSnapshot:块存储对象的快照。

其中,云平台的驱动实现是LibCloud最为核心的部分,各云平台提供的Driver均继承于NodeDriver基类,实现类中的共有方法以及扩展新的方法。

LibCloud官方提供的云驱动和定义的方法并不能满足云代理系统所有的云接口访问需求,因此,我们对LibCloud进行了扩展,包括增加对天翼云的支持、修改镜像查询方式等。LibCloud官方并不支持天翼云,因此,我们基于LibCloud接口规范对天翼云的API进行封装,形成天翼云的LibCloud 驱动。天翼云的资源操作是与工单强相关的,因此,在封装天翼云的API时,我们对天翼云业务流程进行梳理,通过自动提交工单、轮询工单状态等手段,实现天翼云资源操作的自动化,并尽量使得天翼云的LibCloud驱动符合社区定义的标准。封装后,云代理系统可以通过LibCloud接口管理天翼云的订单、云主机和云硬盘。

图4展示了通过LibCloud在云平台创建虚拟机的操作流程。

图4 LibCloud创建云主机的时序图

其中CloudDriver为云平台的LibCloud驱动。用户通过界面或者API创建虚拟机时,云代理系统将根据用户请求,选择目标云平台的LibCloud驱动,并调用该驱动的create_node()方法。该方法封装了用户传递的参数,并生成云平台原生的RESTful API调用,云后端接收到请求后将分配资源、启动虚拟机实例,并返回处理结果给LibCloud。LibCloud将返回的数据封装成Node类实例,供后续操作使用。

2.4云主机管理模块

云主机管理模块完成不同云平台云主机生命周期的统一管理,包括创建、启动、暂停、停止、删除云主机,以及获取云主机清单、查看云主机详情等。不同云平台对云主机的操作流程不同,虽然LibCloud对云主机的数据模型和API操作进行了通用封装,但是针对不同云平台虚拟机的个性化操作方式和调用方式,并未能全部覆盖。云代理系统针对不同云平台的云主机管理进行了业务流程封装。例如,在管理天翼云的云主机时,根据天翼云工单审核的特点,自动为云主机创建操作封装创建订单、提交订单、轮询订单状态、读取订单、维护订单信息、创建云主机等一系列操作。其详细流程图如图5所示。

云主机管理模块同时需要与账号管理模块、镜像管理模块交互。在创建云主机时,需要根据用户的选择提供合适的镜像文件,以及提供用户在云平台的账号信息;在云主机创建完成时,需保存云主机和用户账户的关联关系,以便于后续对云主机的管理,如查看详情、删除、启动、停止等。

2.5云硬盘管理模块

云硬盘管理模块负责创建/删除云硬盘(块存储设备),并将其挂载到某一台云主机,或者将其从云主机中卸载。与云主机管理模块一样,云代理系统需要处理不同云平台云硬盘管理的个性化操作方式和调用方式,并对不同云平台云硬盘的操作进行业务流程封装。

以天翼云为例,在创建云硬盘时,首先创建并提交云硬盘订单,然后启动轮询进程,查询云硬盘的订单状态,在订单完成后,查询订单详情,获取云硬盘的ID信息,并将云硬盘的信息写入数据库以便后续操作(如挂载/卸载/删除等)。删除过程类似,由于涉及订单审核,云硬盘的删除只有在订单完成时,才会真正结束。

图5 天翼云云主机创建过程

2.6镜像模块

镜像模块主要针对AWS公有云服务展开。由于AWS提供的AMI镜像数量众多(单个Region有数万个可用的AMI),而官方发布的镜像查询接口并没有筛选的功能,不利于客户选择。因此,云代理系统提供镜像收藏功能,允许用户从AWS镜像列表中收藏常用镜像,并在创建VM时直接从已收藏的镜像列表中选择需要使用的镜像文件。

镜像管理模块提供镜像的查询、收藏功能。该模块事先通过LibCloud调用从AWS中下载完整的镜像列表,并存储在本地数据库的AMI数据表中。为保持镜像数据的可用性,云代理系统在下载镜像时,同时进行以下几个操作:(1)解析镜像查询接口调用返回的镜像数据,提取镜像的操作系统类型、系统版本、虚拟化类型等关键属性,帮助用户快速确定镜像的可用性;(2)启动独立的镜像管理进程,周期性地从AWS同步镜像数据。

云代理系统还提供针对本地数据库的镜像检索功能,支持用户通过镜像ID、名字、操作系统、系统架构(如X86_64)、虚拟化类型(如XEN)等属性检索镜像,并收藏感兴趣的镜像。用户也可以将镜像从收藏列表中删除。

2.7认证模块

认证模块实现两个不同的功能,分别是云代理系统自身的认证功能(用户管理模块),以及对不同云服务的统一认证功能(账户管理模块)。

用户管理模块是云代理系统本身具有的独立的认证模块,用户需要注册账号后才可以登录云代理系统。用户管理模块采用基于角色的访问控制(RBAC)设计,分为管理者和普通用户两种角色,不同的角色具有不同的权限,管理者具有系统完全的操作权,即能够管理系统的所有资源。普通用户只能操作属于自己的资源,如账户资源、云主机资源、云硬盘资源等。

账户管理模块提供不同云服务的统一认证功能,该功能是云代理系统的基础功能。云代理系统支持一个用户具有多个不同云平台的多个账户,并且用户可以选择激活或者不激活某个账户,只有处于激活状态的账户才能用于操作云资源。

账户管理模块为云代理用户提供绑定不同云平台账户功能,用户输入AWS、天翼云和OpenStack的账户信息,包括:用户名、访问秘钥(access_key)、安全秘钥(securet_ key),秉着选择是否激活该账户。云代理系统将通过数据表的方式存储这些账户信息,并将云平台的账户信息与系统本身的用户信息进行关联,如图6所示。

图6 云平台账户与云代理系统账户关联

用户每次操作云资源时,云代理都需要根据用户信息和资源类型,从相应的云平台账户表中取得账户信息,用于云平台API调用的账户认证。

2.8监控及计费模块

由于LibCloud并没有云资源监控和计费相关的API,因此系统监控模块和计费模块的功能需要直接基于各个云服务对外开放的监控接口开发,例如针对AWS监控,可以调用CloudWatch的API获取数据;针对OpenStack的监控,则调用Ceilometer的API调用数据等。为简化代码逻辑,方便后续系统扩展,也可考虑对LibCloud接口库进行扩展,增加关于监控和计费的自定义接口,同时扩展各个云驱动,增加相应的接口实现。同时,云代理系统也提供云主机、云硬盘等资源的统计信息,使用户能够直观获得云资源在不同云服务的分布情况。针对天翼云的订单特性,云代理系统还提供订单跟踪页面。通过该界面,用户可以方便查询通过云代理开通天翼云资源产生的订单及其状态。

受时间限制,本系统并未完全实现监控和计费的功能,只初步实现天翼云订单跟踪和云资源分布统计等基础功能。

3 系统特色

云代理系统实现具有以下几个特点:

(1)B/S(Browser /Server)模式,部署更为灵活、简单;

(2)采用Djgango框架,简化Python WEB应用程序的开发;

(3)引入LibCloud,屏蔽了不同云平台接口的差异性;

(4)按照开源社区规范开发了天翼云的LibCloud驱动,并作为第三方驱动发布在LibCloud社区,可帮助降低天翼云的集成难度。

4 总结

云服务代理是云消费者和云服务提供商之间的服务中介,能帮助云消费者快速从众多不同的云服务提供商中获取和使用云服务,同时降低多云管理的难度。随着云计算产业的不断发展壮大,公有云服务在行业、地域、功能、性能等方面呈现出多样性和复杂性,催生了云服务代理市场的繁荣。我们设计和实现了云服务代理系统,围绕云主机业务聚合了OpenStack私有云、AWS公有云和天翼云,实现这些云平台云主机的统一管理、统一监控、统一呈现和统一认证。为简化多云管理的难度,我们引入了开源LibCloud库对不同云服务的API进行统一,并基于LibCloud规范对天翼云API进行了二次封装。

1 [1]Gartner IT glossary about CSB.http://www.gartner.com/itglossary/cloud-services-brokerage-csb/

2 陈天,樊勇兵,赖培源.云服务代理架构及应用研究[J].电信科学,2013(10):10-15

3 LibCloud.http://libcloud.apache.org/

4 Scalr.http://www.scalr.com/

5 JCloud.https://jclouds.apache.org/

6 DeltaCloud.http://deltacloud.apache.org/

10.3969/j.issn.1006-6403.2016.08.002

2016-07-27)

猜你喜欢
镜像硬盘代理
镜像
HiFi级4K硬盘播放机 亿格瑞A15
Egreat(亿格瑞)A10二代 4K硬盘播放机
代理圣诞老人
代理手金宝 生意特别好
镜像
我区电视台对硬盘播出系统的应用
镜像
胜似妈妈的代理家长
一个村有二十六位代理家长