【摘 要】为了有效应对企业内部使用独占式物理服务器部署Web应用而造成硬件资源闲置和浪費的问题,提出了企业私有云的解决方案实现云应用管理平台。该平台研究虚拟化技术管理和调度底层虚拟化资源,集成了Web应用部署调度机制实现自动部署,并提出了弹性负载均衡完成多租户场景下对虚拟资源的动态共享。通过对比试验,平台虚拟资源可有效替代物理资源,克服了硬件的消耗浪费并节省了成本支出。
【关键词】云应用管理平台 虚拟化 弹性负载均衡 PaaS IaaS
doi:10.3969/j.issn.1006-1010.2017.08.014 中图分类号:TP302 文献标志码:A 文章编号:1006-1010(2017)08-0069-05
引用格式:温云龙. 云应用管理平台的设计与实现[J]. 移动通信, 2017,41(8): 69-73.
Design and Implementation of Cloud Application Management Platform
WEN Yunlong
[Abstract] In order to effectively cope with the idle and wasted hardware resource resulting from deploying Web applications due to exclusively occupying physical servers in enterprises, a solution based on enterprise private cloud to realize cloud application management platform was proposed in this paper, on which the Virtualization Technology management and the scheduling of lower-layer virtualized resources were investigated. Deployment scheduling mechanism of web application was integrated, to realize the automatic deployment. The elastic load balance was proposed to achieve the dynamic sharing of virtualized resources in the scenario of multi-tenant. Comparative experiments demonstrate the platform virtualized resource not only effectively replaces the physical resource, but also reduces the hardware consumption with the saved expenditure.
[Key words]cloud application management platform virtualization elastic load balance PaaS IaaS
1 引言
Web应用部署常独占物理服务器资源,配置硬件资源和应用运行环境耗时费力;对于高并发的应用系统,配置昂贵的负载均衡设备存在一定的资源浪费情况。常见的企业解决方案采用虚拟机和软件负载均衡来解决物理资源问题,使用SVN和Git代码仓库实现代码管理,集成Jenkins实现代码自动编译构建[1]等。在云计算PaaS(Platform as a Service,平台即服务)层面,也有开源平台CloudFoundry[2]、OpenShift[3]和Docker[4]容器架构解决资源共享的问题。本文采用J2EE规范开发的云应用管理平台(简称云平台),借鉴主流开源PaaS平台的优点,结合代码仓库和持续构建等系统,设计并实现一种支持大多数Web框架的开发和部署,以适应高并发条件下的动态负载均衡,便于二次开发的全生命周期管理平台。
2 云平台总体架构
云平台属于PaaS范畴,总体架构包含IaaS(Infras-tructure as a Service,基础设施即服务)层、接口驱动层、应用管理和调度系统、服务层以及镜像层,并结合软件开发中主流的源代码管理工具、缺陷管理工具等开源技术,形成比较完整的企业级云平台解决方案。
云平台的设计需要考虑如下:
(1)接口层通过开发多个主流虚拟化平台驱动,提供多种虚拟化平台的对接,包括基于KVM(Kernel-based Virtual Machine,基于内核的虚拟机)的Openstack、VMware、Microsoft的Hyper-V等。
(2)平台组件服务化。平台本身使用到的组件和模块(如数据库连接、日志管理、流量统计和计费、消息队列、服务注册中心、统一身份认证等)都实现服务化,使得接口规范统一,而且开放对接第三方系统。
(3)兼容企业原有系统。本文的云平台系统同时实现一种镜像服务,便于原有系统迁移到云平台,享用平台的动态负载均衡等特性。
3 核心组件设计和实现
云平台的核心功能设计和实现主要包括三部分:云控制器、同步控制器和弹性负载均衡器。系统中多个核心组件之间相互配合,共同完成底层资源调度、集群感知、应用仓库管理和应用托管的功能。
3.1 云控制器
云控制器的主要功能是充当平台的大脑,负责维护系统拓扑以完成各个组件部署的控制工作。同时负责云平台和IaaS层面能力的对接,创建半持久化的虚拟机,形成平台整个生态的基础控制系统。
云控制器同时负责创建应用容器的实例,需要准备含有配置信息的系统镜像。基于Openstack的实现架构中[5],镜像启动后的部署通过使用Puppet自动化部署工具来实现[6]。当云控制器需要在IaaS中生成一个应用服务器实例时,一个基于基础系统的镜像实例就会被创建,实例启动后通过自动运行脚本,运行Puppet实现配置文件的下载完成部署。处理流程具体如下:
(1)云控制器需要创建一个应用服务实例,首先发送一个拓扑文件到ELB(Elastic Load Balance,弹性负载均衡)中。
(2)ELB查询需要创建的服务,通知云控制器创建相应数量的实例。
(3)云控制器通过需要组件服务所在的集群域,向集群域发起请求。
(4)实例创建后,通过Puppet发送应用或服务程序的安装文件和配置到实例中。
(5)同步控制器发送Web应用的配置信息到新创建的实例,运行自动配置脚本进行配置和重启。
(6)应用服务器实例借助Axis2 Clustering集群机制[7],实例服务器容器完成集群化。
3.2 同步控制器
同步控制中的核心组件是组件分配协调器,实现功能如下:
(1)监听源码仓库变更。开发者基于源代码仓库检出应用程序源代码,开发完成后推送到代码中央仓库,每次的推送动作在代码仓库中可以检测,并通过回调机制[8]触发鉤子程序(Hook)。
(2)通过持续集成工具提供的接口上传编译通过的应用程序包。回调机制的钩子程序可以触发持续集成工具对代码仓库的代码进行编译[1,9],生成可发布的应用程序包,如Java Web应用程序WAR(Web Archive,Web归档文件)包。
(3)分发组件。持续集成工具打包形成程序包后,通过后续脚本(post-receive)触发应用程序包分发到应用容器实例中。
3.3 基于租户ID的弹性负载均衡器
弹性负载均衡器[10]主要负责的工作是实现请求转发和维护实例拓扑结构,具体如下:
(1)服务器集群的初始化指定了不同的租户应用分布在不同的子集群中,应用在中央代码仓库中带有租户ID信息,当部署到不同的应用子集群中时,将租户ID信息传递给负载均衡系统。当用户访问应用时,负载均衡根据提取到的目标租户ID,将请求转发到特定的服务器集群中。
(2)为了实现弹性负载均衡,ELB维护所有应用系统实例的一张拓扑结构图。云控制器实现了应用服务器系统和IaaS的对接,所使用的应用服务器数量由底层算法自动调节,在请求数达到预警值之后,自动扩展实例并将过高的请求转发到新创建的应用服务器实例中。当系统的平均请求数达到预警值下限时,ELB能够通知云控制器在IaaS环境中销毁部分实例,回收资源。
4 成果展示和数据对比
4.1 成果展示
云平台系统支持多语言的部署环境系统,借助云平台的应用生命周期管理的生态和托管能力,构建一个适合于普通用户和开发者共同使用的PaaS领域的软件系统。通过简单的几次点击,平台可以构建丰富的“开箱即用”的Web应用程序,借助云平台的能力,仅需要在Web应用进行配置,便可以实现弹性负载均衡。
图6和图7展示的是基于著名开源博客系统WordPress制作的应用模板部署示例,服务器采用两路E2650 CPU+64 G内存的戴尔R720服务器,单个应用服务器实例仅需要双核VCPU+2 G内存+共享1 G带宽,应用的平均部署时间只需要1分钟。
在弹性负载均衡的实验中,设置上限门限值为200、下限门限值为30。
系统启动后,在连续3个请求周期中请求数保持高位时(请求数直接表现为对CPU的负载),系统自动扩展服务实例数至2,直到请求数连续3个周期保持下限时,实例数自动收缩为1。应用负载均衡设置如图8所示。
4.2 数据对比
负载均衡采集请求周期设置为1分钟,3分钟能检测出系统负载变化以完成对系统资源的自动创建和回收,而应用的部署到上线平均完成时间在2分钟左右。在服务器资源方面,使用虚拟机代替物理机,单台物理机可以支撑4个应用系统(单个应用平均在线用户150人)的部署,同时性能达到85%以上。考虑1~4个应用部署的服务器成本,在85%性能的前提下可以节省最高75%的成本。
相比人工劳动,响应负载变化只能通过增加和减少服务器数量水平扩展,响应周期往往更长。部门内部应用负载检测、响应、设备到位、运行时安装到应用上线平均时间与原来人工相比,效率平均提升15~20倍。
5 结束语
本文通过研究虚拟化技术、开源PaaS平台设计思想、代码管理和持续集成的流程管理,为中小企业提供便捷可行的Web应用生命周期管理方案。经过开发和完善,已成功在一家中型金融证券公司试点上线,使用云平台构建高可用的服务接口API(Application Programming Interface,应用程序编程接口)对外提供计费服务,对内支撑后台开发;同时采用云平台的托管能力,部署代码管理系统、博客系统、云盘系统等多个系统,自动化程度高,可节省大量运维的劳动力,有效支撑内部研发和办公。目前平台正在改良和优化,下一步将持续研究采用更轻量级的Docker容器代替目前IaaS环境、加强平台服务组件的监控形成企业平台闭环。
参考文献:
[1] 周莹,欧中红,李俊. 基于Jenkins的持续集成自动部署研究[J]. 计算机与数字工程, 2016,44(2): 267-270.
[2] CloudFoundry. Cloud Foundry Components[EB/OL]. [2017-03-27]. http://docs.cloudfoundry.org/concepts/architecture/.
[3] 彭鸿杰,邢延,李杰,等. 基于MVC的Web应用在Openshift上的实现[J]. 电脑编程技巧与维护, 2013(16): 61-62.
[4] 高礼,高昕. Docker技术在软件开发过程中的应用研究[J]. 软件, 2016(3): 110-113.
[5] Openstack. OpenStack Virtual Machine Image Guide[EB/OL]. [2017-03-27]. https://docs.openstack.org/image-guide/.
[6] Puppet. Puppet 4.10 reference manual[EB/OL]. [2017-03-27]. https://docs.puppet.com/puppet/latest/.
[7] The Apache Software Foundation. Axis2 Clustering Support[EB/OL]. (2016-10-21). http://axis.apache.org/axis2/java/core/docs/clustering-guide.html.
[8] Jenkins+Git+Maven+Shell+Tomcat持续集成经典教程[EB/OL]. (2015-06-11). https://segmentfault.com/a/1190000002895521.
[9] 高珺. 以持续集成方式进行系统自动化部署[J]. 华东师范大学学报: 自然科学版, 2015(S1): 373-377.
[10] 温云龙. 基于租户感知的动态负载均衡方法及系统: 中国, 103957246B[P/OL]. 2017-03-01[2017-03-27]. http://www.pss-system.gov.cn/sipopublicsearch/patentsearch/showSearchResult-drillSearchByViewSetting.shtml.