杨清波(1985),男,工程师,研究方向为云计算技术,E-mail:yangqingbo@epri.sgcc.com.cn;
0 引言
“十三五”期间,我国经济发展进入“新常态”,特高压大电网运行特性日趋复杂,安全稳定运行风险持续增大,新能源仍将保持加速发展态势,节能减排要求日益提高,复杂的内外部环境因素及电力市场化改革趋势给电网运行带来诸多挑战[1-2]。电网运行的一体化特征凸显;全局监视、全网防控、集中决策的需求日益突出;电力市场化改革给电网调度运行带来巨大压力。为应对上述挑战,国家电网有限公司提出研发建设新一代调度控制系统,进一步提升电网调度控制技术支撑能力,调控云平台作为新一代调控系统的重要组成部分,主要在资源虚拟化、数据标准化、应用服务化等平台支撑技术上进行了深入探索和试点建设。
新一代调度控制系统基于共享服务的架构设计,目前调控云平台的虚拟资源管理机制在服务的部署、升级、扩容、回退、下线等方面的灵活性不足,影响应用的弹性伸缩和敏捷交付。同时,随着调控云建设规模的不断扩大,系统需要处理的数据量呈现几何级的增长态势,尽管硬件资源的发展也与时俱进,仍难以满足海量的信息数据处理需求。传统基于虚拟机形式的调控云在部署各业务模块时,存在虚拟机资源耗费过度,软件环境兼容性较差、快速迁移部署能力较弱等问题。当服务请求量或计算任务量过大时,云平台中有限的硬件资源条件往往无法满足应用正常运行的需求,而在任务量较少时,又常常造成大量硬件资源的闲置和浪费,给整个运维工作带来巨大的挑战,这对调控云持续推进构成一定的威胁[3]。因此,在“物理分布、逻辑统一”的新一代电网调控系统架构下,调控云平台亟需研究并建设一套覆盖开发、部署、试运行、运行各环节的应用开发及运行环境,实现平台资源的高效合理利用、应用软件的快速构建、敏捷交付及系统便捷运维。Docker容器技术以其先进的设计理念,轻量级的特性,使其越来越广泛的在集群系统上得以应用[4]。随着Docker容器技术逐步进入开发人员的视野,为云平台的建设提供了新的方向[5-6]。将传统的基于虚拟化形式的PaaS平台容器化,增加了PaaS平台的自由度,使其具有更强大的兼容性和灵活性[7]。容器化后的云平台可实现资源实时监视、高效分配、容器编排部署、自动化发布和API控制等功能。很多科研工作者已对Docker容器技术的应用进行了深入的研究。谷歌、百度在内的众多IT巨头都采用了Docker技术,已实现所有业务全部容器化[8]。文献[9]利用Docker容器技术构建了电网轻量级PaaS平台,并详细分析了平台在容器资源动态伸缩、高效迁移部署方面的优势。文献[10]利用Docker技术实现了降低PaaS平台构建的复杂度。基于Docker的容器技术已经得到IT领域的普遍认可,但在电网调度领域尤其是调控云的建设中如何利用Docker容器技术实现资源高效合理利用等方面还处于探索阶段。
针对以上问题,本文提出基于Docker容器技术的调控云PaaS平台的研究与设计,首先对容器技术对调控云中的应用需求进行分析,然后对其关键技术及各模块的设计做了详细分析,最后通过对容器响应时间、资源调度、弹性伸缩等系统性能进行分析与验证,证明本文提出的基于Docker容器技术的调控云PaaS平台的设计在资源分配、容器响应、弹性管理等性能方面具有良好的效果。
1 调控云平台Docker容器技术的需求分析
面向新一代调度控制系统的调控云平台遵循“业务需求驱动、功能重组再造、继承创新结合、智能元素融入”的原则,以大电网安全、经济、高效运行为目标,根据当前电网调度运行的实际生产环节,支撑监视控制、分析决策、计划市场、综合评估、仿真模拟和系统支撑六大类业务应用。“物理分布、逻辑统一”的新一代调度控制系统支撑平台需要对构建在平台之上各类应用的开发、部署和运行环境提供技术支撑,满足应用快速构建、敏捷交付和便捷运维的要求。
1.1 支撑平台基础资源快速弹性伸缩的需求
在“物理分布、逻辑统一”体系架构下,调控云平台需要使用分而治之的手段将应用和业务进行纵向和横向拆分改造[11-13]。随着业务微服务化,服务越来越多,服务间依赖关系繁琐复杂,系统整体复杂度持续上升。同时,基于云计算的虚拟化技术将基础设施和平台服务作为一种资源的服务模式,理论上可以实现随时随地、便捷按需地从资源池中获取所需的资源,但是随着集群规模的扩大,出现资源利用率低与资源竞争的问题。为支持集中分析决策与服务全局共享的服务管理,需要关联业务应用封装成独立单元,计算过程在该单元内封闭。采用全虚拟化技术构建独立单元的方式,资源负载较重,不利于业务服务单元的快速弹性伸缩。容器技术的出现则为新一代调度控制系统这样发展要求带来了新的机遇。和传统的虚拟机相比,轻量化的容器具有显著的性能优势和部署应用的便捷性,可以以容器为最小计算单元的形式提供资源的分配与管理。Docker容器平台具有良好的弹性伸缩性能,通过实时监视,评估集群资源使用状况,利用集群资源的分配与回收动态调配策略以合理的方式启动和回收集群节点上的应用容器,使整个系统中应用容器性能维持均衡状态,提高系统整体的运行效率。
1.2 分析决策中心高效运行和全局管理的需求
分析决策中心作为新一代调控系统的核心部分,实现集中统一的全局分析、全局防控、全局决策,分析决策应用的高效运行是一项基本的支撑要求,需要通过冗余互备、负载均衡等技术来有效支撑分析决策应用的可靠运行,并实现分析决策资源的高效利用。新一代分析决策业务功能经服务化封装后,共享集中部署,并可根据各级调控中心的个性化需求,以搭积木的方式灵活组合业务功能。容器服务提供了统一的容器运行环境,对快速的积木式应用服务搭建提供了有力的平台支撑,可以解决各类应用独立运行和资源高效共享的问题。
1.3 应用快速构建、敏捷交付和便捷运维的需求
随着调控云上层应用的不断丰富,对系统的运维带来极大的挑战。需要构建调控平台下从开发环境、版本发布、现场测试、现场部署到运行维护的开放生态,实现智能化、可视化、标准化、服务化和自动化的运维能力,保障新一代调控系统安全可靠运行。
应用的容器化打包和部署模式,可以支持分布式应用的快速构建,加快应用的开发与上线进程,降低运维成本。基于Docker容器的调控云PaaS平台可以更容易地实现在异构平台的应用部署,更轻松地面对应用的迁移,更灵活、更精细、更充分地利用计算资源,为持续提升新一代调度自动化系统调控信息即时共享能力,应用的复杂逻辑处理、分布式计算和持续可靠服务能力,应用服务的按需访问能力提供支撑。
2 基于容器的调控云PaaS平台总体设计
2.1 调控云概述
调控云基于虚拟化、分布式及服务化等云技术理念,遵循与“统一调度、分级管理”原则相适应的分级部署模式,构建跨调度机构的“1个国(分)主导节点+
2.2 基于Docker容器的调控云关键技术
基于Docker容器的调控云平台在试点建设中,
图1
“调控云”总体框架
Fig. 1
Architecture of "dispatching and control cloud"
对多种关键性技术进行了深入研究和探索。
1)AB站点数据实时同步技术。各省地调控云A、B站点之间为实现应用双活读写分离,保证两站点间准实时数据一致性。
2)双站点高可用技术。调控云采用双站点模式进行建设,即在同一节点上异地部署A、B2个站点,并采用对等模式进行配置,实现站点间数据的高速同步及高可用。
3)应用拆分和服务部署技术。
PaaS平台采用容器化技术进行服务设计、编排和配置。针对平台支撑系统不同的应用及业务[14-18],本文根据使用频次、服务调用开销不同,采用不同策略进行划分和分布式部署。2种应用拆分方式如下:
1)针对HTTP类应用,采用缓存集群方式部署,将应用和数据库制作在同一个镜像中,将会话数据放在第三方缓存,实现快速的水平扩张。
2)针对计算类应用,通过容器化提供大量计算能力,并通过对主控端的多节点部署保障其高可用性。
2.3 基于Docker容器的调控云PaaS平台框架
本文基于Docker容器的调控云PaaS平台逻辑示意图和总体技术架构图分别如
图2
基于Docker容器的调控云PaaS平台逻辑
Fig. 2
Logic schematic of PaaS platform based on Docker container
图3
基于Docker容器的调控云技术架构
Fig. 3
Docker container-based “dispatching and control cloud” technology architecture
资源调度任务。容器管理平台为应用程序提供了资源调度、健康监控、部署运行、服务发现、弹性伸缩等一整套功能。
用户通过向容器管理平台提交1个关于Pod (容器组)的配置清单来使用这套系统,系统会自动选择合适的工作节点运行该Pod,并管理它的生命周期。除此之外,容器管理平台还提供应用服务的滚动升级和负载均衡机制等功能。
3 基于容器的PaaS平台设计与实现
3.1 镜像存储设计与实现
为了实现对镜像的统一管理,需要1个私有镜像仓库完成对调控云PaaS平台各应用服务的镜像进行存储与管理。Docker的私有镜像仓库由3部分构成。如
图4
镜像仓库的工作流程
Fig. 4
Workflow of mirror warehouse
本文以此作为调控云PaaS平台镜像存储的私有仓库。其提供私有镜像的管理,支持以项目为中心进行镜像分类管理,具备镜像复制、删除、搜索、镜像上传/下载及回收站等功能。
3.2 资源调度模块设计
资源调度是以合理的方式分配集群资源使各容器能够高效运转。现今主流的调度系统有集中式调度系统(Swarm)、两层式调度系统(Mesos)和共享状态调度系统(Kubernetes)。
表1
典型容器调度系统对比分析
Tab. 1
Contrastive analysis of typical vessel scheduling system
通过
1)轻量级,其遵循微服务架构,将整个集群划分为各个功能独立、分工明确的组件。
2)开源易用,具有插件化功能模块,易于二次开发。
3)强大的容器编排能力,其深度集成了容器引擎,设计了容器组、标签选择器等组件,是1个强大的容器调度系统。
本文利用此容器管理平台进行资源调度。调度组件用来实现平台中的资源调度。首先,调度模块通过收集和分析PaaS平台中各节点的资源使用情况;其次,根据收集的资源使用情况决策将新构建的容器分配到PaaS平台负载较小的节点上,达到各节点都能均衡负载。资源调度流程如
图5
资源调度流程
Fig. 5
Resource scheduling flow chart
1)发送创建容器请求。
2)客户端收到请求后,转发给集群入口(APIserver)做进一步处理。
3)集群入口根据收到的请求类型,选择处理方式。
4)调度组件会根据收集的信息给容器分配节点。
5)将容器分发给节点后,调度器会将相关信息写回集群入口。
3.3 容器集群网络设计与实现
容器化应用的设计原则是面向服务的,它支持以组件的形式设计各个功能模块,这样易于实现对应用进行扩展和管理。这种设计理念也对应用组件间的网络功能和可靠性提出了更高的要求。PaaS平台必须支持跨主机通信才能保证各功能模块正常运转。因此容器管理平台必须满足集群内部之间、容器与容器之间、容器组和服务之间、容器组之间、集群外部、外部应用与服务之间的通信需求。本文使用Flannel(1种网络规划服务)网络来实现云平台网络通信,其主要功能是让集群中的不同节点主机创建的容器均具备全集群唯一的虚拟IP地址。具有如下特点:
1)确保集群中的不同工作节点主机创建的容器都具有全局唯一的虚拟IP地址。
2)通过建立1个覆盖网络,支持将数据包完整的发送至目的容器。
3)利用新建的虚拟网卡接收容器网桥的数据,通过维护路由表,对接收到的数据进行封包和转发。
4)容器集群数据库(etcd)保证了所有工作节点上的容器集群网络代理(flanneld)的配置信息的一致性。同时对应工作节点上的网络代理会监听数据库上的数据变化,实时感知集群节点的变化。
原理如
3.4 弹性伸缩模块的设计与实现
调度策略在一个大规模的Docker集群中起着举足轻重的作用。通过适当的调度策略,可以将任务按照服务节点和容器本身真正的处理能力合理的分配下发,并在服务节点出现异常时将无法执行的容器进行合理迁移。
当Docker客户端的任务请求到达调度平台,
图6
Flannel网络的结构
Fig. 6
Flannel network structure diagram
调度平台首先会根据设定的限定条件(内存、CPU等资源限制)筛选出符合条件的节点。而在实际生产环境中,还无法实现应用负载与系统资源之间的深度融合。利用容器作为资源调度的基本单位可实现PaaS平台资源的弹性伸缩。
本平台首先是依据资源调度来控制容器的创建工作。然后利用弹性调度策略,依据负载请求的实际情况动态增缩容器数量,使得任务的请求量与容器的负载保持动态的一致性,即请求量增大时,容器的负载较高。当容器负载较大时,就会向调度平台发出增加容器的请求,然后依据集群节点负载情况选择合适的节点,并将新建容器分配到此节点上。继续监控容器的负载状态,一旦资源使用率低于设定的阈值时,就会向平台发送销毁容器的请求,释放资源,实现集群的收缩。
调控云的PaaS平台弹性伸缩策略是以容器资源的平均利用率作为衡量指标。平台每10 s获取一次所有容器的资源利用率信息,计算其平均值。其中COUNT_ADD和COUNT_DELETE为计数器,来获取集群容器的整体状态,
图7
弹性伸缩流程
Fig. 7
Flexible stretch flow chart
1)初始化删除容器的判断。当
2)执行删除容器。若容器的资源利用率持续低于设定值100 s,就执行删除容器的操作。
3)确定容器组中当前负载最小的容器,执行销毁容器操作。
添加容器策略如下:
1)当资源平均利用率
2)调度平台将新创建容器分配到负载较小节点上。
4 测试与验证
基于Docker的PaaS平台的测试环境为华为云平台上的5台虚拟机,其中1台虚拟机作为PaaS平台应用镜像的私有仓库,1台作为PaaS平台的Master节点,其余3台作为PaaS平台的Node节点,5台虚拟机的配置如
表2
各节点配置信息
Tab. 2
Configuration information for each node
4.1 资源调度模块性能验证
本文主要验证资源调度模块能够根据节点的负载情况自主选择集群中节点,将新创建的容器尽可能放置在资源较为充足的节点上,使各节点都能均衡负载。测试步骤如下:
1)将调控云PaaS平台的权限管理应用制作成镜像。
2)在容器管理平台上以此镜像创建100个容器,并收集各个容器随时间在各节点上的分布情况,如
3)当创建容器时,调度平台通过实时监控、分析节点负载情况将容器分布到资源较为充足的节点上。
图8
容器在节点上的分布
Fig. 8
Distribution of containers on nodes
4.2 容器列表呈现性能测试
在容器管理平台上依次启动多个容器,并记录每个容器启动时所需的时间,绘制成条形图如
由
图9
容器列表响应时间
Fig. 9
Container list response diagram
图10
虚拟机启动响应时间
Fig. 10
Starting time diagram of the virtual machine
容器云平台响应迅速,能够提供一个较快的便捷服务。
4.3 容器平台弹性伸缩性能测试
在验证平台的弹性伸缩功能时,本文以用户请求访问调控云中各应用模块时调用权限服务为工作负载进行实验,当调控云的访问量增多时,容器内权限服务被调用的次数也相应增多。
图11
负载变化和容器数量关系
Fig. 11
Diagram of load change and number of containers
图12
容器资源利用率曲线
Fig. 12
Resource utilization of container
由
图13
虚拟机资源使用曲线
Fig. 13
Resource utilization of the virtual machine
由
5 结论
本文利用Docker容器技术构建了基于应用开发、部署、和运行环境全方位支撑的容器化调控云PaaS平台,实现了容器资源按需动态调配及电网分析决策类应用的快速构建、敏捷交付和便捷运维,为持续提升新一代调度控制系统调控信息即时共享能力,应用的复杂逻辑处理、分布式计算和持续可靠服务能力提供支撑,进一步提高了驾驭大电网的调控能力和大范围优化配置资源的能力。
(实习编辑 刘雪莹)
参考文献
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]
[18]