基于Docker、Nginx及服务器虚拟化融合技术的镇江科技创新服务平台设计*
2017-09-15徐欣威
徐欣威
(镇江市科学技术信息研究所,江苏 镇江 212004)
基于Docker、Nginx及服务器虚拟化融合技术的镇江科技创新服务平台设计*
徐欣威
(镇江市科学技术信息研究所,江苏 镇江 212004)
简要阐述了镇江科技创新服务平台总体设计、规划的功能,指出了平台功能的复杂性和各功能模块需要设计、测试、运行等软件工程各阶段同步进行的必要性。设计、使用了服务器虚拟技术、Docker技术、Nginx技术融合的分层次平台系统架构,介绍了各功能模块在容器中的功能关系及各服务板块在新型平台系统架构下的具体实现。
Docker;Nginx;虚拟化;分层次平台系统架构
近几年,江苏省镇江市生产力中心在推动科技创新和公共服务平台建设方面做了一定的工作,例如,已经建设了镇江市大型科学仪器设备协作共用网、镇江市科技信息网等,为企业科技创新提供了信息和技术方面的支持。但是,这些平台的建设缺乏统一规划,资源利用率低,缺乏对微信、手机客户端移动终端的支持,平台技术上有安全风险等。因此,需要充分整合和优化科技资源,加快建设一个社会化、网络化、专业化、多功能的“一站式”科技创新服务平台,利用平台提高镇江自主创新能力,推动创新型城市建设。镇江科技创新服务平台于2015年获得镇江市科技基础设施科技计划立项,笔者作为项目技术主要研发人员,参与了项目的总体规划、设计,系统架构,数据库设计、研发等。
镇江科技创新服务平台的功能模块众多,模块之间存在复杂的耦合关系,并且众多模块实现不可能一蹴而就,需要分阶段、分步逐步运行实施。如果采用传统的单服务器、众多模块打包到一个平台上的软件开发模式,那么,平台中的其中一个服务模块修改、测试等,就会影响到整个平台的正常运行。传统系统平台开发模式显然不能适应镇江科技创新服务平台众多功能模块的设计、研发、测试、上线运行等同步进行的软件开发、运行服务模式。
为了解决众多功能模块设计、开发过程相对独立、互相之间耦合度低的问题,镇江科技创新服务平台在现有技术基础上,分析了各自的优缺点,提出了一类新型平台系统架构。下面首先介绍了现有的技术体系,分析了它们各自的特点,阐述了研究目的,并根据现有技术体系和研究工作目的,提出了新型平台系统架构,同时,还进行了平台系统运行的创新点分析。
1 相关技术
1.1 服务器虚拟化技术
虚拟化技术是云计算的核心技术,可以统一管理和调度大量使用网络连接的计算机资源,构成一个计算机资源池,向用户提供按需服务[1]。服务器虚拟化技术是将一台或多台服务器的硬件资源整合起来,在上面利用虚拟机技术让几台服务器变成几十台甚至几百台相互隔离的虚拟服务器,建立虚拟服务器资源池,统一调配这些物理硬件资源,从而实现服务器的高效利用和整合。
基于虚拟化层的服务器虚拟化是,虚拟层直接运行于硬件之上,并对硬件资源比如内存、硬盘、CPU、设备和I/O等进行划分,允许在单个服务器平台上同时运行多个独立操作系统。运用该技术,能够在一台服务器上完成传统运用多台服务器方可完成的功能,大大提高了服务器的使用率。该方式的典型代表为VMwarevSphere,现在最新的版本为VMwarevSphere6.5,具体层次结构如图1所示。
基于虚拟化层的服务器虚拟化,VMware公司是业界领先的虚拟化厂商,在虚拟化和云计算基础架构领域处于全球领先地位。现购买的主流服务器基本上都支持VMware vSphere,且VMwarevSphere运行非常稳定。据统计,VMware vSphere曾经有连续运行1000多天没有重启的记录。而微软公司的Hyper-V和2008年推出的一款虚拟化产品必须架设于Win2008或者Win7之上,但因为Windows操作系统漏洞比较多,需要经常更新补丁程序,所以,微软公司的Hyper-V通常30多天就需要进行一次更新重启操作。从系统的安全、稳定、实用性、扩展性等方面考虑,镇江科技创新服务平台选用VMwarevSphere作为平台的技术解决方案。
1.2 容器虚拟化技术
容器虚拟化技术是一种内核虚拟化技术,在操作系统上分隔出多个虚拟服务器,每个虚拟服务器支持一个操作系统运行环境,该环境就像“容器”一样。分隔出的虚拟服务器拥有自己的进程和独立的网络空间,虚拟服务器之间可以隔离进程和资源。在容器虚拟化技术中,业界比较领先的是Docker技术。自2013年Docker技术发布至今,它快速发展并被广泛应用[2]。百度[3]、阿里巴巴[4]、Google[5]、IBM[6]、Redhat[7]、Oracle[8]等国际互联网巨头都相继支持Docker。Docker基于LXC的高级容器引擎和go语言,并遵从Apache2.0协议,开发者可以打包它们的应用和依赖包到一个可移植的容器中,然后发布到任何流行的服务器上,具体层次结构如图2所示。
图2 容器虚拟化技术
Docker包括三大核心概念,即镜像、仓库和容器,具体概念如图3所示。Docker采用的是Client/Server架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个Host上,客户端也可以通过socket或RESTAPI与远程的服务器通信。
Docker镜像可以理解为一套程序只读模板,它包含了Linux操作系统、Apache或者Web应用程序,等等。镜像是创建Docker容器的基础。Docker容器是Docker镜像的运行实例,它是由Docker镜像构建而成的。一款软件或者单一的功能模块可以运行在单一的Docker容器中,同时,Docker容器包含全部运行必需的要素。其中包括操作系统、应用程序代码、运行时、系统工具和系统库等。
图3 Docker概念图
Docker镜像与Docker容器密切相关,缺一不可,也可以相互转换。Docker的镜像可以从官网仓库获得,之后通过Docker运行命令即可启动一个容器运行。当需要将容器转化为镜像时,可以通过Docker命令转化。
1.3 容器集群管理技术
在本项目中,有大量容器和镜像需要管理,因此,需要选用容器集群管理技术实现对容器的管理和编排。现主流的容器集群管理技术主要有Swarm、Kubernetes两类。
本项目主要采用的是Kubernetes技术。Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、扩展机制等功能。利用Kubernetes能方便地管理跨机器运行容器化的应用,具有轻量化、模块化、便携和可扩展的特点。项目选用Kubernetes作为容器的管理和编排工具。
Kubernetes整体框架如图4所示,它主要包括MasterAPI Server、Pods和Kubelet。
图4 Kubernetes整体框架图
MasterAPIServer控制所有在Kubernetes节点上运行应用容器必备服务的主服务器,提供资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制。
Pods是Kubernetes的基本操作单元,由相关的一个或多个容器构成一个Pod,通常Pod里的容器运行相同的应用。Pod包含的容器运行在同一个Minion(Host)上,看作一个统一管理单元,共享相同的volumes和networknamespace/IP和Port空间。Kubelet负责管理Pods和它们上面的容器——images镜像、Volume(CVI)和网络(CNI)的管理等,也负责维护容器的生命周期。
2 研究目的
镇江科技创新服务平台按照实现功能划分为二十大功能模块,这些功能模块的设计、开发、测试、运行等需要在不同阶段同步进行。传统的软件开发模式是,将所有的功能模块集成到单台服务器上,这显然不符合开发要求。解决这个问题的方案一是,将不同功能模块的设计、测试、运行等发布到不同的虚拟服务器上完成,功能模块之间公用数据库。但是,采用这种方式,虚拟服务器建立的数量受限于物理服务器的硬件配置,有一定的局限性。解决这个问题的方案二是,采用容器虚拟化技术,这种方式的好处是,在单台服务器上可以同时运行几十甚至上百个容器;但缺点是,它是共享系统内核的模式,所以,安全性比较低。镇江科技创新服务平台在这两种技术的基础上提出了服务器虚拟化+容器虚拟化+负载均衡的新型平台设计,以实现系统架构。具体的研究目的是:将不同类型的功能模块部署到不同的虚拟机上,实现功能模块之间的安全隔离;将类似功能模块部署到同一虚拟机的不同容器中,实现类似功能模块之间可以分别同时上线、测试、运行等,不互相影响;将同一功能模块部署到同一虚拟机的不同容器中,使用负载均衡分担大数据业务的并发访问等。
3 平台系统架构设计与实现
镇江科技创新服务平台运用系统论的方法,从全局的角度出发,按照平台各方面、各层次、各要素统筹规划,集中有效资源,高效、快捷地实现目标。平台采用层次结构,系统平台共分6层,由下向上依次为硬件资源层、虚拟机管理程序层、虚拟Web虚拟数据库及虚拟文件服务器层、Docker引擎层、应用程序容器层和服务板块层。
3.1 硬件资源层
硬件资源层主要是平台系统的硬件,比如服务器、硬件防火墙、硬件磁盘阵列、硬件负载均衡、Web安全网关和光纤交换机等。
3.2 虚拟机管理程序层
虚拟机管理程序层主要是在硬件服务器上部署了VMwareESXi5.5.我们对2台硬件服务器进行了存储规划、内存规划和网络规划等,2台硬件服务器按照模块功能分类,分别虚拟了8台Web服务器、1台数据库服务器、1台数据库备份服务器、1台文件服务器和1台文件备份服务器。
3.3 虚拟Web虚拟数据库及虚拟文件服务器层
虚拟Web虚拟数据库及虚拟文件服务器层按照平台的建设目标,规划、设计了十一大基础数据库及相应的附件文件等,分别存于虚拟数据库服务器上,由操作系统和应用程序按周期备份数据和文件。以十一大专业数据库为基础,按照实现功能划分为二十大功能模块。根据功能模块的属性划分,把20个功能模块划分为八大类型,这八大类型分别安装到8台Web虚拟服务器上。
3.4 Docker引擎层
在每台虚拟Web服务器上分别安装了Docker,Docker之上分别有Docker引擎和运行时环境,可以在其上运行容器和程序。
3.5 应用程序容器层
在8台Web服务器上分别安装了Docker环境、引擎,利用镜像运行了33个Docker容器,分别对应了二十大功能模块。由于平台主站及内容管理、科技计划管理、科技金融、办公系统、移动客户系统、微信公众系统比较重要,且访问量比较大,需要提供7×24服务,因此,考虑使用Nginx[9]服务器技术。Nginx是一款高性能、低消耗、开源的Web服务器和反向代理服务器,由于其并发高、内存的占有率低、代码开源以及可扩展等优点,已经受到了越来越多企业和开发者的青睐。淘宝网基于Nginx发起Tengine[10]的Web服务器项目,在其原有基础上增加动态编译功能、改进负载均衡策略、支持脚本语言Lua等,且其稳定性和高性能已经得到了很好的验证。我们在一个Docker引擎上同时运行2~3个实现同样功能的系统容器服务,当其中一项系统容器服务宕机时,还有另外1~2个系统容器继续提供服务,并且在访问量巨大、高峰期时通过Nginx服务器高效算法指定客户访问其中一个容器,以实现系统平台的负载均衡。图5为镇江科技创新服务平台系统架构。
图5 镇江科技创新服务平台系统架构
8台Web服务器上的八大服务类型如下。
3.5.1 镇江科技创新服务平台主网站
镇江科技创新服务平台主网站包含2台运行同样服务的平台主站和内容管理模块容器,使用Nginx服务容器可以实现负载均衡;平台的系统管理、日志审计模块容器;组织机构、人员、角色、权限管理模块容器;科技查新模块容器;公众参与模块容器;在线展会系统模块容器;镇江地区产业专题文献模块容器七大功能模块容器。
3.5.2 技术交易
技术交易包含科技成果交易模块容器,技术需求发布、预约模块容器,网上技术交易专项奖励申报模块容器三大功能模块容器。
3.5.3 大型仪器共享
大型仪器共享包含大仪平台入库、服务预约模块容器,大仪平台用户科技创新券申领使用与兑现模块容器,科技专家、服务等发布和服务预约模块容器三大功能模块容器。
3.5.4 科技金融
科技金融包含2台运行同样服务的科技金融服务模块容器,使用Nginx服务容器可以实现负载均衡。
3.5.5 科技计划管理
科技计划管理包含3台运行同样服务的科技计划管理服务模块容器,使用Nginx服务容器可以实现负载均衡。
3.5.6 科技统计分析及网站统计
科技统计分析及网站统计包含统计分析模块容器、网站统计分析模块容器两大功能模块容器。
3.5.7 办公业务
办公业务包含2台运行同样服务的办公业务模块容器,使用Nginx服务容器可以实现负载均衡。
3.5.8 移动及微信
移动及微信包含2台运行同样服务的微信公众号模块容器,2台运行同样服务的移动客户端模块容器,使用2台Nginx服务容器可以实现负载均衡。
4 平台系统运行的创新点分析
镇江科技创新服务平台设定了20个模块、33个容器进行分布式开发、测试、发布等,其中,33个容器又都分别转化为镜像存入私有镜像仓库中,我们需要对这些镜像进行贯穿整个应用生命周期的管理。
4.1 确保同一镜像内容的一致性
在开发过程中,修改同一功能模块的代码,会生成不同版本的容器。保证镜像内容的一致性的方法有:①在软件开发的各阶段都用相同dockerfile去生成所需镜像,但是,因为是在不同时间构建的镜像,所以,采取这种方式有可能构成不同的版本;②在不同阶段始终使用相同的镜像,虽然增加了文件传输量,但可确保镜像的一致性。我们开发时采用了第二种方式。
4.2 对镜像进行阶段分类
在实际工作中,我们对镜像进行阶段分类,把这些镜像按照开发的不同阶段存入不同的镜像仓库中。我们把镜像仓库分为开发环境镜像仓库、测试环境镜像仓库、准运行环境镜像仓库和运行环境镜像仓库。开发环境镜像仓库主要是由开发人员使用,镜像变化频繁。开发完成后,镜像同步到测试环境镜像仓库。测试环境镜像仓库主要是由测试人员使用的,镜像保持不变。当功能模块测试通过后,镜像推送到准运行环境镜像仓库。准运行环境镜像仓库主要是由测试和运维人员使用的,镜像保持不变,功能模块运行平稳后,再发布到运行环境镜像仓库。运行环境镜像仓库是发布镜像到正式运行环境的各个节点上线运行,该镜像就相对稳定不变。
4.3 对镜像权限的控制
我们把镇江科技创新服务平台开发团队的角色分为项目负责人、开发、测试和运维等4类人员。项目负责人对镜像有读写权利,可以设定其他人员的角色,增加和删除团队其他成员;开发人员对镜像具有读写权限;测试和运维人员对镜像只有读权限。
5 结束语
镇江科技创新服务平台的软件体系架构设计充分考虑了机房硬件资源的有限性,功能模块的复杂性和多样性,以及平台对安全性、稳定性和用户访问量等要求,并且要求平台各功能模块运行、开发、测试和修改等软件开发各阶段同步进行。因此,采用虚拟服务器技术、Docker技术、Nginx技术相结合的层次结构方式,使单独的功能模块应用运行在单独的容器中。这样一个功能模块在运行测试时需要修改,它可以直接下线修改,重新配置环境上线运行,也不会对其他功能模块的运行产生影响。另外,在此过程中,可以使用容器集群管理技术对Docker容器和镜像等进行集成化开发和管理。科技创新服务平台在全国各地已广泛运行,笔者希望文中提出的几项技术融合的平台系统架构开发模式的应用能为日后国内同行工作的顺利进行提供参考和借鉴。
[1]冯贵兰.基于虚拟化的高校云计算数据中心建设研究[J].软件导刊,2016,15(1):121-123.
[2]杨保华,戴王剑,曹亚仑.Docker技术入门与实战[M].北京:机械工业出版社,2015.
[3]国内“BAT”先锋企业百度BaiduAppEngine(BAE)平台[EB/OL].[2015-02-02].http://www.xueliedu.com/ a/xinwenzixun/2015/0220/280618.html.
[4]Docker周报:阿里云ECS支持Docker[EB/OL].[2015-02-02].http://www.infoq.com/cn/news/2014/10/d ocker-aliyun-ecs?utm_campaign=infoq_content&utmsour ce=infoq&utm_medium=feed&utm_term=global.
[5]Google拥抱Docker:把互联网变成一个巨大的计算机[EB/OL].[2015-2-02].http://www.pingwest.com/ google-docker/.
[6]IBM和Docker宣布建立战略伙伴关系[EB/OL].[2015-02-02].http://www.oschina.net/news/58186/ibm-d ocker.
[7]红帽公司推出专为Docker定制的Linux发行版[EB/OL].[2015-03-6].https://www.oschina.net/news/60226/red-ha t-strips-down-for-docker.
[8]Oracle和Docker合作,数据库、工具可在Docker部署[EB/OL].[2017-04-23].https://www.oschina.net/news/ 84107/docker-store-oracle.
[9]Nginx百度百科[EB/OL].http://baike.baidu.com/link?url= 7k8Fj935XZBMt16AdudidgrQIGsIrA4XVCl5Wr4FpLFU cVQUFO9M8dT3EKYgvOK5KrPJ2OgKfvB2Otkz_Ydfk q.
[10]Tengine百度百科[EB/OL].http://baike.baidu.com/link? url=MMDRjuKUoi83i83UDXh5QaQhxdFyePuHsWHJfx B17lpqPPEbZ68E1GuZQ4FzoIR1efSYEk87r6U6of_7zt wgJ_.
〔编辑:白洁〕
TP391
A
10.15913/j.cnki.kjycx.2017.17.066
2095-6835(2017)17-0066-05
徐欣威(1974—),男,江苏镇江人,大学本科,高级工程师/国家系统分析师,主要从事软件系统架构、云计算、大数据方面的研究。
*镇江市创新能力建设公共服务平台项目(SS2015020)