周银锋, 王汉瑶, 苏雨晴, 刘健, 杨灵艺, 侯葵
(平高集团有限公司, 河南, 平顶山 467001)
自动化技术的实现需要自动化部署系统的支撑,国内外相关学者对此进行了大量研究,文献[1]使用自动部署工具可以大大减少人为干预,生成C代码来协调片外和片内传输和计算,但是其动化部署耗费时间较长;文献[2]在不同规模应用的云系统和边缘系统中,基于VM和容器的部署转向应用程序之间的共享环境,得出一个新的参考模型与数据驱动的参数公式和表示形式,但是其信息保存模式不唯一,适用性较强;国内的相关研究中,文献[3]为提高办公环境个人计算机部署效率,制作硬盘镜像,实现PC机典型使用场景的快速部署,但是其信息保存周期较短。文献[4]研发了自动化部署系统,提高中国电信集团全国集中应用系统部署的质量和效率,但是其应用自动化部署耗费时间较长。
容器群托管技术允许管理者和开发人员对应用程序和相关数据进行打包和迁移,可以在任何当前的Linux发行版中使用,且其轻量级特性大大降低了性能开销。在大多数情况下,容器技术被应用到应用中,容器群托管技术的应用分为5个部分:应用组件的分解、基本映像的选择、安全性和可管理性的解决方案、添加代码、配置测试和部署。由此,本文以容器群托管技术为核心,以Docker容器镜像构建与优化为创新点,设计了集群反馈客户机这一过程,由此完善了完整的应用全寿命周期自动化部署系统,期望提高应用自动化部署的应用效率。
对于服务器硬件方面的配置,主要涉及三方面,分别是RAID、OOB、BIOS配置设计,具体的配置设计工具如表1所示。
表1 硬件配置工具
硬件的自动化配置包括以下三点:
第一是RAID,可以支持的RAID卡策略有RAID 0、RAID 1、RAID 5、RAID 10等;
第二是OOB,其可以完成用户、密码等初始化工作;
第三是BIOS,所支持的配置包括VT、HT等[5-6]。根据表1可以看出,由于硬件配置工具的不相同,导致硬件自动化配置具有更大挑战性[7]。
为了保证其配置兼容性,可以将设置完成的RAID、OOB、BIOS配置信息设为脚本,根据脚本中参数进行后续的配置工作。
在应用生命周期自动部署系统中,除了上述硬件配置外,还有一个不可或缺的硬件设备,即负载均衡设备。在客户机和集群服务器之间,需要负载平衡设备来连接和通信[8],如图1所示。所谓负载均衡设备的主要功能是利用各种分配算法将网络请求分配给可用的服务器,并传递数据流量和网络带宽,从而帮助访问者获得最佳的硬件设备联网体验。
图1 集群示意图
硬件设计完成后,以此作为支撑,进行系统软件的设计。
自动部署系统包括从底部到顶部服务的硬件配置以及中间的网络和容器组托管。整个结构主要包括以下几个层次,如表2所示。
表2 层级结构表
通过以上层次的合理应用、协作,用户可以在不接触计算机硬件的情况下,以操作系统为核心对应用生命周期进行控制和管理,甚至在用户感觉到之前,操作系统就会根据应用程序的资源需求自动分配相关的资源部署。
该流程的实现基于容器组托管技术,通过构建应用程序生命周期映像,配置基于映像组的应用程序部署,最终实现应用程序的自动部署。
容器群托管技术在自动部署系统中应用的主要目的是构建应用的生命周期映像。所谓映像就是软件包,它包含文件系统、可执行程序、依赖程序的配置文件等,而且构造的映像具有可移植性和可重用性的特点,在应用程序自动化部署中可以发挥巨大的作用。对于图像创建的形式,最流行的方法之一是使用commit命令。以原始容器为中心,修改并提交图像。这种形式虽然有效,但也有很多缺点,比如只能使用一次,不能完成模块的更新和安装。因此,在设计新的系统软件时,可以采用另一种方法,用标准格式命令创建Dockerfile文件。
该方法具有功能更优、扩展性大、模块更新安装简单、后期维护方便等优点。Docker容器具体的镜像构建流程如图2所示。
图2 Docker容器镜像构建流程
在图2中,以Docker Client作为基础,可以完成Web应用镜像分装的工作。
应用镜像功能的优点是使用一个程序就可加工同一工件的各个部位,获取组合权值,建立目标函数,如式(1):
(1)
式中,bj为找正中心点,aj为使用程序输入值,dhj为检索次数,t为调用时间。之后,将其存储至Docker仓库,稍后将其应用于已部署好系统的服务器内,只需要执行简单的命令,就可以实现应用全寿命周期自动化部署。
镜像构建完成后,将形成镜像组,然后容器组托管技术将发挥作用。镜像组管理作为信息化进程中的重要技术之一,是系统版本更新和应用自动部署的基础。在系统应用中,必须面对各种业务应用模块。应用功能模块的不同决定了数据处理和基本传输的不同。为了保证镜像处理的效率,可以通过Docker创建一个部署程序来管理有效的镜像。
必要时,可以提取指定的镜像进行移植。同时,将镜像备份存储在仓库中,帮助Docker在使用和迁移镜像时直接从本地拉取下载镜像,提高应用部署效率。其中,具体的容器群托管流程如图3所示。
图3 容器群托管流程图
此外,在自动化部署过程中,首先需要计算每个Docker容器的负载能力。
如果使用的是编译型语言,不需要整个Debian或者Ubuntu镜像,只需要从一个非常小的镜像开始构建,故在网络可用性条件下,提取指定的镜像进行移植,并以此为依据进行部署分配。容器计算数据从容器CPU利用率、内存使用率、带宽利用率三方面来计算。
容器平均CPU利用率公式:
(2)
平均内存使用率公式:
(3)
平均带宽利用率公式:
(4)
式中,Avg_CPU表示CPU利用率,Avg_Mem表示内存使用率,Avg_Net表示带宽利用率,并且将负载数据设置为20来进行计算。在式(4)中,考虑到负载均衡需求,通过计算容器的负载能力,得到容器集群的负载信息,从而实现应用程序生命周期部署的自动化。
在这个过程中,硬件配置负载均衡装置起到了很大的作用。当客户端通过自身发起请求时,请求内容与虚拟服务IP有关。为了确保IP用户从安全的仓库拉取镜像,进而在安全的安装源安装相关软件包,负载均衡设备接收到消息后,根据预先设计的策略,选择要接收相关请求的服务器,并将消息中的目的地址设置为服务器的IP地址。目的地址设置函数为
(5)
式中,根据旋转的计算方法,综合考虑了服务器集群的失效因素,将式(2)~式(4)综合,可以得到容器负载能力公式:
Avg_Load=u1*Avg_CPU+u2*Avg_Mem+
u3*Avg_Net
(6)
当服务器没有响应负载平衡设备发送的请求时,它将被踢出集群。在接收到访问信息后,集群将其反馈给客户机。
此时,反馈服务器的IP通过负载均衡设备进行转换,传送给客户端。在客户机收到返回消息之前,完成一个完整的集群加载过程。在此过程中,将收集应用程序生命周期部署配置信息。
应用自动化部署的主要工作是安装和设置信息系统程序。其中,JENKINS可用于系统连续集成工具软件中,在完成集成控制的同时,显示系统列表和查询分析日志。专业人员将软件包放入JENKINS容器中构建模块和部署信息,最后提交相关信息。用户可以操作可视化系统界面。
在自动化部署测试过程中,工作人员可以实现监控、及时解决问题、提高应用效率、减少自动化部署时间。在实际应用中,对系统中的一台服务器进行应用生命周期自动化部署,根据应用结果,整理出如表3所示的应用部署情况。
表3 应用部署情况表
根据对应用的分析,本系统的设计以容器群托管技术为核心技术,根据应用的生命周期进行镜像创建和镜像群管理,实现了部署效率的提高。另外,通过对集装箱装载能力的分析,计算出集装箱组的装载能力,然后以负载均衡设备为载体,实现应用生命周期的自动部署。
以容器群托管技术为核心的应用自动化部署系统设计完成后,为了保证该系统的应用效果,特进行实验论证。
通过构造虚拟机的方式,建立伪分布仿真环境。采用Windows10操作系统作为主体,对系统的性能进行测试,测试采用I76700k核心硬件CPU,最高可达4.5 GHz。为了增强实验测试结果的说服力,以本文系统为实验组的测试对象,而以文献[3]方法(传统系统1)和文献[4]方法(传统系统2)为控制组的测试对象,分别进行了应用生命周期自动部署,并根据部署时差得出了实验结论。
在容器群托管技术的使用过程中,会对应用程序中的节点进行计算。不同程序节点数量不同,其运行时间也有所差别。首先,为了保证结果准确度更高,选择单一的节点进行实验,分别使用三种系统进行五次应用全寿命周期自动化部署测试,仿真实验结果如图4所示。
(a) 本文系统
(b) 传统系统图4 单一应用自动化部署仿真测试结果
通过图4的测试结果可以发现,面对单一节点的应用程序,进行重复应用全寿命周期自动化部署操作时,本文系统与传统系统之间所耗费时间相差并不大,本文系统进行自动化部署时间保持在5—10 ms之间,而传统系统运行时间保持在10—15 ms左右。经过比较可以得出结论,文中设计的自动化部署系统实际运行中花费时间更少,更具有优势。
因为每个应用程序的节点数量并不一致,所以自动化部署的运行效率也随着节点的增加而降低。为了说明本文系统在现实应用程序自动化部署中,具有较高的即时性,采取多个应用程序同时进行自动化部署测试,分别选取具有100、200、300、400、500个Slave节点作为条件。将自动化部署运行时间平均值与传统的系统运行结果对比,结果如图5所示。
(a) 本文系统
(b) 传统系统图5 多应用自动化部署仿真测试结果
通过上述测试结果图5可以得出一个结论,当测试对象为节点数量比较少的应用程序时,本文系统与传统系统自动化部署花费时间差距不大。但是,随着应用程序数量的增长,Slave节点数量也在不断上升,文中所设计的自动化部署系统优势开始显现出来。当面对200个节点数量时,传统系统自动化部署时间是本文系统花费时间的2倍左右,之后依旧飞速增长,直到500个节点时,两种传统系统处理所需时间都达到了本文系统的4倍,因此随着应用程序的增加以及节点数量的增长,采用容器群托管技术为核心的应用全寿命周期自动化部署系统用时更少,效率更高。
本文系统以容器群托管技术为核心,实现了应用全寿命周期自动化部署,可以满足规模较大、效率较高的自动化部署需求,同时降低了人工成本。
虽然本文设计系统可以实现应用自动化部署,但是由于时间与资源的约束,在私有容器云平台优化应用方面仍然没有完全完善,未来将会进行深入研究。