基于树莓派和LXC的分布式计算测试平台

摘要

随着大数据处理和分布式算法教学与研究的发展,利用低成本硬件构建分布式计算测试环境以进行算法验证和实验仿真需求日益增长。本文提出了一种基于经济型树莓派板作为基本计算单元的分布式计算测试平台。我们通过构建和组装计算单元搭建了一个集群平台,并通过融合LXC(Linux容器)和服务计算技术设计了一个容器化服务计算框架。引入并配置了三类服务,以按需实现特定的工作流编排。为方便使用,我们开发了一个可视化用户界面,用于管理集群、部署服务容器以及管理工作流。我们展示了连接数据源、分布式数据处理和可视化组件的容器化服务工作流,以验证所提出测试平台的有效性。

关键词 —树莓派;Linux容器(LXC);分布式计算框架;容器化服务;集群

I. 引言

越来越多的数字家庭应用将家庭中的设备连接到云计算服务。典型的云和分布式计算环境通常由数百甚至数千台联网计算机组成,共同提供可扩展处理范式 [1]。然而,高成本和高能耗使得这些基础设施难以用于算法模拟和技术教育 [2]。随着物联网(IoT)技术的发展,如今可以使用嵌入式解决方案搭建云计算测试平台,其成本低于小型数据中心中使用的大多数流媒体服务器。最近,已有研究探索利用树莓派2型B款构建经济实惠且能耗低的云计算集群的可能性 [3‐4]。

本文利用树莓派2,以非常低的成本为所有对云计算和虚拟化领域感兴趣的学生产生模拟和实验机会。我们报告了创建集群的重要步骤,包括如何设置和配置硬件与系统软件,以及如何监控和维护系统。我们还讨论了所提出架构的潜在使用场景,以对测试平台进行功能检验。

本文的后续内容如下:第2节讨论了集群的概述,介绍了硬件集成和通信机制,并提出了为测试平台设计的容器化计算框架;第3节展示了应用情景,并详细描述了基于精心设计的人机界面的集群管理;第4节给出了一个用例示例,用于测试平台的功能验证,第5节对全文进行总结。

II. 架构概述

A. 基于树莓派的集群平台

一个集群平台单元由五块树莓派电路板组成,其中包括一块作为控制节点的树莓派,用于协调其余四个计算节点。每个节点采用第二代树莓派产品,配备ARM Cortex‐A7 四核处理器、1GB 内存、四个USB 接口和 10/100 BaseT 以太网接口。该集群通过多端口电源适配器供电,并通过千兆以太网交换机建立局域网。此外,如果实验需要更复杂的调度测试或超出单个单元能力的更丰富的计算资源,可以基于多个单元的集成构建多单元系统。

示意图0

在搭建完集群的硬件环境后,我们需要配置每个节点的Linux操作系统,包括静态IP以及主机名设置、无密码SSH登录配置等。在配置过程中,有两个重要问题需要解决:一是容器引擎的跨主机通信;二是Hadoop [5] 节点的本地原生编译。通过使用虚拟交换机(OpenVSwitch)在每两个节点之间构建隧道,实现跨主机通信;由于Hadoop主要运行在x86架构上,而ARM平台没有可用的二进制文件,因此必须在容器虚拟化环境中本地部署编译工具包和依赖项,并进行重新编译。

B. 节点的消息机制

我们在集群的每个节点上部署代理,该代理及时收集状态信息,并根据集群的负载性能接收来自计算资源调度的控制指令。代理之间的通信机制采用套接字技术。计算资源调度组件在TCP协议中作为服务器端处理由代理进程传输的状态信息,同时代理进程也监控服务进程传输的指令。为了实现实时状态感知,在服务进程与代理进程之间建立了TCP长连接。

我们还引入了Etcd [6],一种分布式键值存储系统,用于解决节点间的数据同步问题。Etcd是一种高可用的键值存储,主要用于共享配置和服务发现。谷歌的Docker集群管理系统Kubernetes [7]、开源PaaS平台Foundry Cloud以及CoreOS的Fleet均使用Etcd作为其核心组件。

我们利用Etcd的服务发现功能来动态调整集群容量。当有新节点加入集群时,它会向控制节点注册信息;当节点退出时,会从控制节点注销信息。每个注册的节点都会设置一个令牌以标明其过期时间。如果节点未能及时更新过期时间,控制节点将临时将其从集群中移除。

不可避免地,需要在系统中部署一个代理组件,用于将节点状态数据写入 Etcd 运行时。

C. 容器化计算框架

由于服务资源数量庞大、计算能力各异、数据格式和处理算法多样化,设计和开发一个统一平台来覆盖各种数据分析 [8] 需求十分困难。该架构需要具备灵活且可扩展的特性,包括硬件资源的增量部署、弹性服务计算和动态服务迁移。我们的设计采用了如图2所示的容器化计算框架 [9]。

通过集成树莓派板卡,在其上部署Debian Linux操作系统、Docker容器引擎 [10] 和代理软件,我们构建了称为集群的分布式计算测试平台。集群中的每个节点都可以部署多个功能容器,例如,作为数据处理组的十几个Hadoop容器、用于检索和存储特定数据的不同数据资源容器,以及用于组成数据分析流程的用户自定义算法容器。

服务镜像管理组件根据由开发者使用BPEL工具编排的工作流模型下载服务容器镜像。该组件的另一功能是维护一个服务镜像池。开发者可以在其中找到各种镜像模板和应用容器,以构建其特定的应用。

计算资源调度组件充当容器调度器的角色,负责容器生命周期管理,即根据需要从镜像运行容器,并根据集群的实时负载性能将容器在集群的节点之间进行迁移。

为了有效管理计算集群并提升人机交互体验,在第三节所述的框架中实现并集成了一个用户界面组件。

示意图1

在此处填写适用的赞助商。如果没有赞助商,请删除此文本框(sponsors)。

基于容器化服务的工作流 在框架的驱动下,我们构建了一个面向分布式数据处理应用的服务计算环境,其中每个容器作为Web服务组件,通过使用WSDL标准 [11] 或RESTful API进行自描述接口,对外暴露专业功能。然后,我们可以选择工作流引擎(例如可视化BPEL工具),根据科学计算过程的需求构建工作流 [12]。如图3所示,四个容器化服务——包括数据源服务、数据预处理服务、Hadoop计算服务和可视化服务——实现了统一调度,并协调控制流与数据流。在我们的方案中,Hadoop容器节点被计算服务代理封装,该代理暴露 WSDL Web服务并支持基于SOAP的通信。该代理弥合了 Hadoop节点的REST API与标准化Web服务之间的鸿沟。

如果Web服务组件定义得当,工作流的构建和复用将无需大量编程知识。在本地计算环境中,工作流引擎提供了一种编排容器中应用所暴露的所有服务的方法,并通过调用容器内各服务提供者的相应端点服务以及来自互联网的外部服务来执行工作流,如图3所示。工作流引擎的主要职责包括以下几点:

  1. 它提供了一个接口,可自由地组合、编排和服务调用。
  2. 它内置了 BPEL编排引擎,用于执行业务流程、发送/接收消息以及处理数据操作。
  3. 它通过跟踪每次服务调用的进度,监控整个计算工作流的状态。
  4. 它有助于确定特定请求发生了什么问题,并分析或解决故障。

示意图2

III. 应用情景

以一个简单的应用案例(基于科研关键词的标签云可视化,其工作流程如图4所示)为例,本节将介绍集群平台的功能和用户界面。该示例工作流程中包含4种类型的服务,如下所述。

  1. 数据源服务
    该服务从特定数据源(如MySQL数据库或格式化文档)检索数据,并将数据转换为预处理服务所需的应用类型。

  2. 预处理服务
    该服务根据Hadoop计算集群中部署的算法的输入要求,将数据拆分为一组细粒度的文件。

  3. 数据计算服务组
    由Hadoop计算服务构建数据计算服务组 [13]。根据预定义的映射调度策略,每个Hadoop节点从HDFS存储中获取文件包,并执行映射和归约算法,清理文件内容,统计关键词数量并聚合统计数据。

  4. 可视化服务
    该服务将数据计算服务提交的统计结果进行可视化,并向用户生成相应的标签云图像。

该集群系统依托使用HTML5和Python语言开发的精心设计的用户界面,提供全面的集群配置与管理操作,主要包括集群、容器和服务工作流的管理等。

示意图3

B. 集群管理

该测试平台显示已添加到当前集群的所有物理节点,以及每个节点上部署的容器。测试平台还通过各节点上的代理进程实时采集CPU使用率、内存使用率、I/O负载和网络负载等数据,用于监控物理节点和容器的工作状态。当需要手动添加节点时,只需输入节点名称和节点IP,即可将该节点加入集群。您也可以手动从集群中删除节点 [14]。

左侧的镜像工作区包含根据用户需求定制的各种镜像。以标签云实验为例,我们从镜像工作区中选择相应的镜像,并依次拖拽到各个节点,构建标签云工作流。存储原始数据文件的数据源镜像将数据输出到数据预处理镜像;数据预处理镜像对文件内容进行过滤和拆分后,将文件输出到计算镜像;计算镜像统计文件中的词频。

通过分布式并行计算将结果输出到可视化图像;可视化图像对统计结果进行可视化,最终向用户生成标签云图像。

我们在控制节点上部署本地私有仓库以存储所有镜像。用户在使用系统前需要先将自己的镜像推送到本地私有仓库。当用户将镜像拖拽到相应节点时,系统会通过服务镜像管理组件从本地私有仓库将镜像加载到物理节点,并启动容器。

示意图4

C. 容器管理

右侧的“容器”工作区列出了集群中存在的所有容器。通过单击某个容器,我们可以打开该容器的容器管理视图。该视图显示容器的状态,我们可以通过控制菜单执行运行、停止、删除及其他控制操作。使用基于Web的控制台可以更方便地进行容器的命令行操作。我们还可以随时通过基于Web的控制台对应用进行更详细的配置或监控容器的状态。

集群管理的基本单位是基于操作系统级虚拟化而非硬件虚拟化的容器。由于每个容器与其宿主操作系统共享相同的系统内核,因此容器具有极小的系统开销,并且可以快速启动和部署;在完成配置后,容器可以轻松迁移和复用。

D. 工作流管理

我们从镜像工作区选择相应的镜像,并依次拖拽到各个节点以构建工作流。工作流中每个服务的执行结果将临时存储在分布式文件系统 [17] 中。当下一个服务开始运行时,会首先从分布式文件系统中提取前一个服务生成的结果作为自身的输入数据。通过集群管理系统,用户可以查看分布式文件系统中每个服务的运行结果,从而监控整个工作流的运行状态。在工作流运行过程中,系统将利用计算资源调度组件,根据集群的负载情况选择合适的节点来部署容器并运行服务。用户可以通过各节点上正在运行的容器数量,直观地了解集群的整体负载情况。当工作流运行结束后,用户可点击下载按钮,将最终结果从分布式文件系统下载到本地。

示意图5

IV. 实验

在本节中,我们通过使用关于服务与云计算的科研论文元数据集,在分布式计算测试平台上展示了标签云实验。

为了进行功能检验,该实验仅使用了测试平台的一个单元,其连接五块树莓派板卡,并在Docker环境中部署 5~10个包含Hadoop节点的容器。数据源容器用于将原始数据集与数据预处理容器进行连接。数据预处理容器将数据拆分为细粒度文件并将其存入HDFS。在容器化Hadoop集群中进行并行处理后,部署了PyTagCloud工具的可视化容器根据获得的统计结果生成图形标签云,如图7所示。

部署PyTagCloud库相对简单,但值得注意的是,在启动可视化容器时,必须根据PyTagCloud的运行要求添加特定设备参数,为容器分配音频设备,以避免标签云图像中的文字重叠。

示意图6

V. 结论

通过集成树莓派板卡,并在其上部署Debian Linux操作系统、Docker容器引擎和代理软件,我们实现了一个分布式计算测试平台。依托容器化解决方案和精心设计的用户界面,用户可以快速在该分布式计算测试平台上部署其应用。我们为该分布式计算测试平台设计了三个核心组件:计算资源调度、服务镜像管理和工作流引擎,以支持对集群、容器和工作流的管理。其中,服务镜像管理组件根据工作流模型下载服务容器镜像,并维护一个服务镜像池;计算资源调度组件负责按需从镜像运行容器,并根据集群的实时负载性能在集群节点之间迁移容器;工作流引擎组件则通过调用容器中各个服务提供者的相应端点来编排容器内应用所暴露的所有服务,并执行工作流。最后,我们使用标签云实验来检验在分布式计算测试平台上的应用容器化部署。实验结果表明,我们的分布式计算测试平台能够满足各种数据分析需求,并帮助用户尽快部署其应用。

Logo

更多推荐