基于嵌入式云计算平台的分布式实时计算框架研究*
2019-09-04邵永杰王志敏
邵永杰 ,王志敏
(1.中国电子科技集团公司第十研究所,四川 成都 610036;2.复杂飞行器系统仿真重点实验室,北京 100094)
0 引 言
随着大数据技术和虚拟化技术的发展,目前的各种应用对实时处理海量数据的需求越来越强烈,基于嵌入式集群的云计算平台的分布式实时计算[1]受到广泛关注。嵌入式云计算平台是以嵌入式处理器的虚拟化和集群管理为基础,采用云计算的处理方式对多平台节点进行连接,形成多点计算平台。嵌入式云计算平台比传统的高性能计算中心的方式具有实时性高、功耗小、可裁剪、稳定度高、负载均衡等特点。目前实现分布式计算的主流方式是使用商业服务器搭建分布式系统,通过增加服务器的数目来实现扩容。Hadoop[2-3]Map/Reduce、Spark Streaming、Storm[4]和其他相关技术的出现,已经使数据处理系统的存储能力、计算能力、伸缩能力达到了之前无法想象的高度。但是遗憾的是Hadoop Map/Reduce、Spark Streaming是“批处理系统”而不是实时系统,Storm在各个计算节点间的任务分配不平衡、在计算任务高度密集时往往会导致任务的堆积和失败。
本文在嵌入式云计算平台基础之上,综合采用Map Reduce、Hadoop、Storm等开源分布式计算[2]的优点,设计并实现了完整的分布式实时计算框架[5-6],可以高效地处理大量数据流,为云处理技术在嵌入式平台上的应用提供了有效解决方法。通过搭建高性能的集群环境,对海量数据进行实时高效的分析与处理。经过实验和性能测试,证明该框架可以根据实际应用场景进行灵活的定制,并具有良好的实时性和扩展性。
1 嵌入式云计算平台概述
嵌入式云计算平台的硬件是由多个嵌入式处理器和高速网络构成,如图1所示。
图1 嵌入式云计算平台体系结构
每一个嵌入式处理器通过虚拟化技术可以形成一个或者多个虚拟计算节点。嵌入式云计算平台中的管理节点通过对这些计算节点的集群编排和管理形成一个云数据处理集群网络,提供高性能的网络节计算服务,从而实现超级的计算能力和存储能力。
嵌入式云计算平台体系结构主要部分为计算资源管理系统和服务器集群系统。其中,计算资源管理系统用于调度计算资源;动态部署、配置、调度和回收资源。服务器集群系统负责处理并发的用户请求处理和大运算量的计算处理,为满足大数据存储的需求,使用相关数据分割算法对数据进行处理,使用并行计算方式上传和下载数据。
嵌入式云计算平台比较传统的高性能计算中心的方式具有一下特点:
(1)功耗小:功耗的大小由处理器的制作工艺与指令集决定。ARM(Advanced RISC Machine)处理器的功耗可以做的很低,低至1 W,而X86服务器的芯片可以达到100~200 W。
(2)实时性高:相比传统云计算中的X86处理器,嵌入式云计算平台采用的是ARM处理器与Linux操作系统的结合,通过对Linux系统的裁剪和优化使得ARM处理器可以处理强实时任务。强实时性也为上层的分布式实时计算框架提供了技术基础。
(3)部署简单:计算节点和管理节点均采用Docker虚拟化镜像布置,Docker是于LCX(Linux容器)创建的一个应用容器引擎,属于操作系统层虛拟化,主要用于解决服务器应用快速构建、部署和分享的问题。分布式实时计算框架的各个部件以Docker镜像的方式运行在ARM处理器之上。
2 分布式实时计算框架设计
目前分布式计算框架主要包括Hadoop的Map/Reduce、Spark Streaming和Storm,这些分布式计算框架各有优缺点,例如Hadoop由于具有大的数据处理延时,一般只用来处理离线计算任务;Spark Streaming本身构建在Hadoop之上,框架复杂,且实现困难。Storm是一个专门用于事件流的分布式实时计算框架,但现有的Strom的任务调度太简单,无法实现定制化,并且Strom在各个计算节点间的任务分配不平衡。本文提出的基于嵌入式云计算平台的分布式实时处理框架可以快速的实现自定义的实时计算平台,目的是解决大数据计算和实时计算之间的矛盾,使得嵌入式云计算平台在功能设计和调试方面拥有自主的产权和可控的解决方案。
2.1 框架结构
本分布式实时计算框架主要包括框架接口API、数据输入模块(Data_in)、任务管理模块(Task_M)和计算节点模块(C_Node)四大部分,此外在任务管理模块中还包含了负载均衡控制模块(Balance-Ctrl)、服务监控模块(Task-SV)和资源分配调度模块(Res-Disp)。如图2所示,在各个模块之间是通讯模块,负责节点的数据接收和发送,完成底层数据传输。各个模块相互结合,形成完整的分布式实时计算系统。
图2 分布式实时处理框架结构
框架应用程序接口API(Application Programming Interface):框架接口API运行于一个独立的服务器或容器中,主要是对框架的任务配置项进行配置,包括用户认证、各个模块的数的端口分配,以及任务的属性(性能和时延要求)配置。框架接口API的另外一个作用是提供实时云计算服务端口,将计算任务输入实时计算系统,并返回计算结果。
数据输入模块:数据输入模块在框架外部以PCIE(PCI-Express)、RapidIO、以太网等接口实现。在框架内部以虚拟管道方式接收实时数据。
任务管理模块:是整个框架的核心部分,它的任务包括:分解、分派、动态负载均衡和容错处理等重要功能,它在集群中部署代码、为每个工作节点分派任务并监控任务的执行状态。每个处理节点能否得到处理任务并满负荷运行都需要任务管理模块来保证。由于任务管理模块需要对全部任务进行分解、分派等操作,对集群中全部计算节点进行统一管理,根据均衡算法启动业务模块处理数据,并产生输出数据,因此任务管理模块的性能是整个框架的性能瓶颈,其可靠性也十分关键。
计算节点模块:实际的业务逻辑处理单元,负责对数据流进行计算处理。计算节点模块根据具体的业务需求设计计算模型。在本框架中,采用了Java开发工具(Java Development Kit,JDK)中的Fork/Join思想,把一个大任务分割成若干个小任务,最终汇总各个小任务的计算结果,得到大任务的计算结果。
通讯模块:负责节点的数据接收和发送,完成底层数据传输。本框架采用基于协议的通信来实现的通讯模块。在任务管理模块以及框架接口API服务中,由于数据量小,考虑到对外的方便与安全,采用了基于TCP(Transmission Control Protocol)协议的SOCKET网络通信。TCP协议的优点是基于连接,数据有序性和可靠性强。在数据输入模块和计算节点模块之间采用了RapidIO中间件组件技术,各个节点之间通过中间件虚拟端口进行通信,RapidIO相对于SOCKET网络具有更高的数传速率和更小的时延。
2.2 框架实现关键技术
(1)虚拟机Docker集群自动伸缩技术。本框架运行于嵌入式云计算平台,架构的各个节点均以虚拟Docker镜像的方式运行于ARM处理器中,采用了开源跨宿主机的容器集群的分布式系统,允许用户创建和管理Docker容器集群,并为容器化的应用集群提供资源调度、自动化部署、服务发现、弹性伸缩、高可用等功能。基于docker容器集群的分布式系统结构见图3。通过Docker集群的按需编排实现Docker集群自动伸缩系统架构,根据用户定义的策略(时间表、运行状态等)自动调整其集群内容器数量的管理服务。在业务量增长时容器资源无法满足系统需求,则自动增加容器实例,在业务量下降时容器资源出现富余,则自动减少容器实例,降低功耗和运行成本。
图3 容器集群的分布式系统
(2)消息队列技术(Message Queue,MQ)。消息队列是分布式应用间交换信息的一种技术。消息队列主要解决应用耦合,异步消息、流量过载等问题。消息队列包括了队列管理器和队列通道。在MQ消息系统中消息的订阅方订阅关注的Topic,以获得并消费消息。
在本框架中,各个节点模块分布于各个ARM处理器中,通过Docker虚拟化为镜像集群。集群内部的消息队列管理器之间不需要两两之间建立消息通道,而是采用集群消息队列通道与其他成员通信。这种处理方法一方面可以简化系统的配置,另一方面当某一消息管理器出现故障时,其他消息队列管理器可以接管它的工作,从而大大提高了系统的可靠性。如图4、图5所示集群的消息订阅模式分为集群消费和广播消费。在集群消费模式中,MQ设置为任意一条消息只需要被集群内的任意一个消费者处理即可,而在广播消费模式下MQ会将每条消息推送给集群内所有注册过的节点,保证消息至少被每各节点消费一次。
图4 集群消费模式
图5 广播消费模式
3 项目应用
本分布式实时计算框架目前应用于数传数据处理项目中。该项目对8路各300 Mbit/s的数传信号进行采集、压缩、纠错编码、分类转发等计算和处理,数据处理的平均时延要求在10 ms以内。如图6所示在项目的实施中,搭建了基于Docker的容器集群的分布式系统,包括一个数据输入节点,一个管理节点、一个镜像仓库节点、三个计算节点和一个数据转发节点。
该数据处理项目的工作流程如下:
(1)用户通过API配置数据输入节点、计算节点和转发。各节点完成各自的消息订阅,准备接收处理数据。
(2)数据输入节点通过RapidIO接收数传数据,并以集群消费的方式发送数据到各个消息队列。
图6 数传数据处理项目系统结构
(3)在任务管理节点的监控下,各个计算节点和转发节点处理并转发数传数据,处理后的数据通过数据转发节点统一对外输出。
(4)当某一个计算节点发生故障时,任务管理节点根据其他正常计算节点的性能状态将该故障节点的任务分配至其他计算节点。
在任务运行中,人为将计算节点3断开,通过任务管理节点的状态检测功能得到断开节点3前后的各节点负载变化和数据处理时延如表1所示。
表1 容器集群的分布式系统
通过表1可以看出:当计算节点3断开后,框架中的任务管理节点将计算节点3的工作平均分配到了计算节点1、2。计算节点1、2的CPU占用率增加,数据处理的平均延迟有所增大。进一步说明分布式实时计算框架运行于多节点的嵌入式平台中形成的信息处理系统具有实时性和负载均衡以及动态伸缩的特性。
4 结 语
本文在嵌入式云计算平台基础之上,综合采用Map Reduce、Hadoop、Storm等开源分布式计算的优点,设计并实现了完整的分布式实时计算框架。通过本框架可以高效地处理大量数据流,为云处理技术在嵌入式平台上的应用提供有效解决方法。经过项目验证和试验测试表明,本分布式实时计算框架能够满足工程应用需求。