评估Docker作为边缘计算平台

I. INTRODUCTION

访问云中应用程序和服务的移动设备数量不断增加。通过云使用这些服务会导致应用程序出现高延迟,以及网络拥塞和瓶颈。边缘计算解决方案通过在更靠近用户的位置处理应用程序和数据,试图最小化这种影响。利用边缘计算(EC)的一种方法是使用Linux容器在边缘托管应用程序。

Linux容器提供了一种轻量级、可移植且高性能的虚拟化替代方案。容器镜像的尺寸小于虚拟机(VM)镜像,使其比基于虚拟机的设备更适用于在边缘快速启动应用程序。

Linux容器有两种部署模式。LXC提供轻量级的操作系统容器,其行为类似于虚拟机,用户可以登录系统并安装自己的应用程序。另一种选择是Docker,这是一种容器技术,设计用于在每个容器中运行单个应用程序。与LXC不同,Docker以其构建松散耦合应用的重点而闻名。

本文描述了我们对将Docker作为边缘计算平台的技术评估。我们的评估将基于边缘计算应具备的四个基本需求特征:1)部署与终止;2)资源与服务管理;3)容错;以及4)缓存。本文结构如下:第二节讨论边缘计算的背景以及云与边缘计算范式之间的差异;第三节讨论相关工作;第四节描述用于边缘计算平台的Docker技术;第五节和第六节描述用例以及我们的对Docker的技术评估。第七节讨论我们的观察结果,最后在第八节中得出结论。

II. BACKGROUND

A. 边缘计算

边缘计算将范式从集中式转向去中心化,通过利用更靠近用户的计算、网络和存储资源,将内容和服务从中心节点(如数据中心(DC)或云)推向网络的逻辑边缘。理想情况下,应用和内容与用户仅有一跳距离,越接近用户,用户体验质量(QoE)就越好[1]。通过消除或弱化对集中式环境的依赖,边缘计算消除了瓶颈和潜在的故障点,从而具备更强的抗故障能力。

边缘计算(EC)旨在通过将内容缓存或卸载到边缘来减少响应时间或延迟。通过在边缘运行,它创造了潜在的新型服务类别和尚未探索的商业模式[2]。一些潜在的新服务包括基于位置的服务、物联网(IoT)、数据缓存、大数据、传感器监控活动(例如空调、电梯、温度、湿度)、零售解决方案或公共安全应用[3]。

边缘计算(EC)可能有不同的名称,其中一些术语包括雾计算[4]、虚拟云节点[5]、移动云等。尽管有人可能会争论这些技术之间的相似性与差异性,但从目标角度来看,它们几乎相同,即通过将资源部署得更靠近用户,以提升用户的用户体验质量(QoE)。

B. 从集中式到去中心化;云到边缘 paradigm

云计算已经成熟,成为一种良好的商业模式和用户模式。低启动成本、按需使用、资源弹性以及按使用付费等特点,使云计算对企业具有很强的吸引力。从用户角度来看,应用和数据可以随时随地访问。

云在成熟度和商业发展方面虽具有优势,但也存在一些缺点。其中的局限性包括广域网延迟、带宽以及应用响应时间。数据和应用程序在云中进行处理,每个数据位都需要通过网络传输,尤其是对于大型数据集而言,用户与云之间来回传输非常耗时。

示意图0

表 I:云计算与边缘计算的优势对比

需求 云计算 边缘计算
延迟 High Low
延迟抖动 High 在互联网内部 非常低 在边缘
服务位置 客户端和服务器之间的距离多跳数 一跳距离
位置感知 No Yes
地理分布 集中式 分布式
支持移动性 有限 支持
实时交互 支持 支持

* 摘自思科博客。[3]

为了将应用和数据更贴近用户,边缘计算基础设施设置有三种变体。在移动边缘计算(MEC)中,缓存和应用位于服务提供商基础设施或移动运营商设施的无线接入网络(RAN)中[6]。在中间架构中,可在公司或组织附近设置一个资源池,位于数据中心和用户之间[7]。而有些人则认为“更贴近用户”是指在其邻近设备范围内,即通过形成自组织网状网络的资源,共同满足所有用户或设备的需求[8]。

III. RELATED WORK

一个运行增强现实应用的Cloudlet项目使用了源自OSGi的执行环境平台。OSGi是一种基于Java的面向服务的模块化管理系统。选择Java的原因仅仅在于硬件和操作系统平台普遍支持它。OSGi允许开发者在运行时动态地加载和卸载称为捆绑包的软件模块[5]。

另一项项目提出了一种基于虚拟机的Cloudlet基础设施[7][9]。其重点在于transient state应用,可使基础设施按需托管应用程序,并在之后进行快速拆除。该方案对运行虚拟机的底层服务器无影响。虚拟机封装了所有的应用程序、库和数据,因此适用于在此环境中运行多租户应用。

欧洲电信标准协会(ETSI)于2014年成立了一个新的行业规范组,以制定多接入边缘计算的行业规范。其目标是通过在多供应商(例如移动运营商、设备和应用平台供应商)之间推动标准化和开放环境,为价值链中的所有参与者创建可持续的业务。应用程序可以利用基础设施内的超低延迟和高带宽。MEC可被视为在移动网络边缘运行的云服务器[2][6]。

PeerApp 移动解决方案将内容和DNS缓存等优化功能引入到RAN。它使应用程序和服务能够靠近用户运行,减少用户需要经过的跳数,从而间接提升用户的用户体验质量(QoE)[10]。

Kaval 是一个基于Android的平台,提供签名基于识别功能。支持Kaval的设备与其邻近对等设备连接以形成网状网络。它将自我组织,协同采集与分析音频或图像。通过在对等设备之间共享数据和分发工作负载,提升签名处理响应时间[1][8]。

BOINC 是一个志愿计算平台,可在 Windows、Mac、 Linux 或 Android 设备上运行。科学家、大学或公司可以借此构建相当于数千个CPU的计算能力。BOINC 能在多种硬件和操作系统平台上使用,使其成为运行科学研究应用程序(例如寻找疾病治疗方法)的良好工具[11]。

HTC Power to Give 是另一个利用移动设备作为计算平台的移动应用。每台设备充当中间件,连接到研究项目,用户可选择要运行的研究应用。研究问题被分解为许多小任务,并分发到多个设备上。任务完成后,结果将被推回到中央服务器[12]。

IV. DOCKER作为边缘计算平台

在本节中,我们将详细说明Docker的工作原理。

A. 容器技术

云服务提供商可能通过虚拟机或基于容器的技术来托管平台即服务(PaaS)。1979年,UNIX在UNIX版本7中引入了Chroot命令。1988年,FreeBSD引入了从Chroot扩展而来的jail。Sun Solaris 10引入了Zones,进一步扩展了Chroot的功能。在Sun Solaris 11中,Zones进一步发展成为容器。随后,Linux引入了LXC。LXC使用userspace接口来实现Linux内核的隔离功能。用户可以通过API和命令行工具[13]管理LXC。

图1展示了容器技术中的组件。每个应用由应用本身、二进制文件和库组成,并被打包为一个独立容器。每个容器相互隔离,拥有独立的网络、内存和文件系统子系统。容器引擎负责管理这些容器[14]。由于容器引擎源自操作系统(OS)内核,因此在同一容器引擎上的容器共享同一个操作系统,且占用空间极小。这使得数百个容器能够在单个操作系统上运行,从而让容器具备快速部署的优势,并在中央处理器、内存、磁盘和网络方面实现接近原生的性能。

B. Docker 作为候选方案

Docker有两个主要用途,即持续集成和持续部署。由于Docker具有轻量级特性,开发者可以在笔记本电脑上构建Docker容器堆栈,以复制部分生产环境。在我们的论文中,我们评估了Docker的另一个目标:作为边缘计算平台。

Docker通过管理命名空间来管理容器。Docker使用五种不同的命名空间,分别是:进程 ID (PID)、网络、进程间通信 (IPC)、挂载 (MNT) 命名空间和 UNIX 分时系统 (UTS)。Docker使用控制组 (cgroups) 来管理容器间的可用硬件资源。它使用一种名为 UnionFS 的轻量级文件系统,为容器提供构建模块。所有这些组件被整合成一种称为 libcontainer[15]的格式。

V. 边缘计算需求

本文评估了具有以下特性的Docker容器化环境在边缘计算中的应用:‐

A. 部署与终止

边缘环境可能包含低端设备,这些设备在性能或容量上无法与数据中心(DC)中的服务器相媲美。个人电脑、笔记本电脑和移动设备是边缘端常见的计算资源。边缘端的地理分布计算需要一个足够灵活的平台来处理应用或服务的部署与管理。候选平台(如Docker)的灵活性要求其能够在异构设备上部署可重用服务而无需依赖特定设备。

边缘设备的理想管理方式应同时支持集中式(即通过数据中心)和本地边缘(即边缘设备自身)两种模式。该平台应提供简便的方法来安装、配置、管理、升级和终止正在运行的服务[16]。服务的终止不应影响边缘内的其他服务或资源,释放出的空闲资源可被边缘内的其他服务所利用。

B. 资源与服务管理;服务注册,资源加入与离开边缘

为了实现边缘应用程序的高效管理,我们需要服务注册和服务发现 。边缘环境是一个非受控环境,设备是异构的,这些资源可能会随时加入或退出。例如,如果某个边缘没有可用资源,则应将服务部署到存在资源的邻近边缘。另一方面,如果资源的规格极低,服务仍应启动,但用户会体验到一定程度的降级。然而,如果边缘出现了新的资源,用户应能体验到一定程度的逐步改善。加入和离开边缘集群也是一个重要功能,以确保即使资源退出,服务仍能继续为用户提供服务。

C. 容错

平台的选择必须具备容错能力,以实现基础设施的高可用性和可靠性。平台的高可用性是一个重要特征,即数据和服务位于边缘而非集中式位置。D. 勒克莱尔的一项研究表明,边缘计算的可用性应超过数据中心典型的三个九(99.9%)。该研究建议边缘计算在边缘至少应支持五个九(99.999%)的可用性[16]。

D. 缓存

缓存可以在边缘进行,以减少用户本地访问并提高整体应用性能。一种场景是将Docker镜像缓存在边缘,以缩短应用部署时间。另一个角度是支持应用数据缓存,以改善应用响应时间。

VI. THE EXPERIMENT

为了评估Docker作为实现边缘计算的候选技术之一,已搭建了一个测试平台,如图2所示。该测试平台由一个数据中心和三个边缘站点组成,用于模拟环境。

示意图1

在每个边缘站点,设置一个Docker注册中心以在边缘本地存储Docker镜像。边缘站点的Docker守护进程将能够搜索并从Docker注册中心拉取Docker镜像。Docker Swarm在每个边缘站点上进行配置,以管理多个Docker守护进程。Docker Swarm充当集群和编排工具。客户端(例如命令行界面或通过Docker Shipyard的基于Web的门户)可以访问并控制Docker环境。

每个边缘站点将具有不同的属性,例如每个边缘的主机数量不同、设备异构性不同,这两个标准旨在模拟边缘计算环境。数据中心与边缘站点之间的网络将模拟边缘计算中的广域网延迟。

A. 部署与终止

示意图2

在本实验中,我们在边缘的容器中部署应用。图3展示了设置,即一个数据中心和一个单一边缘站点的配置。容器可以从数据中心或在边缘集群内部署。默认情况下,Docker允许通过 API远程部署容器,即通过与Docker Swarm直接通信的 Shipyard WebUI或Docker客户端。

为了设置应用,我们配置Dockerfile以包含构建镜像所需的commands 。镜像构建完成后,将其推送到边缘的本地仓库。通过从数据中心向边缘本地仓库推送镜像,我们可以预缓存镜像,从而间接减少网络使用并缩短服务部署时间。

客户端向Swarm管理器提交新容器的请求。Swarm管理器执行调度和过滤,以找到最合适的Docker守护进程。然后将请求提交给选定的Docker守护进程。只要镜像在本地可用,Docker就会在边缘集群中将服务部署为容器。

Docker将分层概念应用于Docker镜像[17]。它仅将增量或数据差异提交到镜像,从而显著减小镜像大小。通过本地Docker注册中心或DockerHub还可实现镜像可复用性。这些组件支持在任何所需位置快速部署服务。

可通过Shipyard对Docker守护进程和容器进行可管理性操作。在分布式边缘位置环境中,应用难以轻松管理。虽然可以在各个独立的边缘站点本地进行管理,但在理想的边缘计算环境中,必须能够从例如数据中心对整个边缘计算集群进行集中监控或控制。将多个边缘站点整合到一个集群池中进行管理将具有挑战性。目前,Docker本身或通过任何其他兼容组件均不支持分层式或分布式管理。

对于服务终止,Docker最近添加了一项功能,可在容器不再需要时自动清理容器。每次容器部署都可能导致因残留的无用容器而造成资源浪费。当数据卷连接到容器时,不应使用此功能。应采用优雅方式处理数据卷的分离,以降低数据丢失的风险。

B. 资源与服务管理;服务注册,资源加入与离开边缘

Docker Swarm支持服务注册与发现,以便管理容器中的服务。目前 Docker Swarm 可以支持多种后端模型;托管发现 和 Consul[17], etcd[18] 以及 zookeeper[19],每种模型都有不同的实现要求需要满足。

示意图3

图4描述了使用Consul的Docker Swarm集群的设置。之所以对Consul进行评估,是因为与托管发现相比,它能够提供更多集群信息。图5描述了当其中一个节点宕机时Docker引擎的状态。离开的Docker守护进程将触发一个优雅离开命令,并关闭Consul守护进程。这用于确保其他节点将其视为“leave”而不是“f ailed”,这样离开的节点将不会尝试重新加入集群。

示意图4

C. 容错

服务检查点 ‐ CRIU 是一个用于检查点和恢复 Docker容器的开源项目。它对状态(网络、内存、CPU、事务)进行检查点,并在需要时恢复以实现恢复目的。它可用于应用不支持无状态事务的场景。

卷管理 ‐ Flocker 是一个容器数据卷管理器。它可保护有状态容器,例如生产数据库数据。Flocker 的数据卷称为 数据集,具有可移植性,可被任何容器使用,无论容器运行在哪个位置。使用 Flocker 有两种方式:第一种是 Flocker 同时管理 Docker容器 和 数据卷,当容器迁移到不同主机时,数据卷随之迁移;另一种方式是分别管理数据卷和容器。

离线迁移 ‐ 在我们的实验中,我们使用Docker功能来迁移容器。通过使用Docker导出/导入功能,我们可以将容器导出为TAR文件,并将其导入到不同主机上的另一个Docker守护进程。使用导出/导入功能无法保留内存或 CPU指令,因为它不同于基于虚拟机管理程序的虚拟化 (如KVM、Xen)中的实时迁移。容器内的应用必须是无状态的,并且与任何交互组件松耦合。在发生故障时,可以重新部署容器,而不会影响整体系统可用性。

多个区域 ‐ 通过在地理位置上分布的分布式边缘区域,数据和应用可以在多个区域进行战略性部署。可以在数据中心到边缘或边缘到边缘站点之间设置故障转移、灾难恢复和负载均衡机制。这可以减轻故障点问题,从而间接提高应用和数据的可用性[4]。

D. 缓存

理想情况下,数据收集、归一化和过滤应在边缘完成,然后再将数据推送到数据中心的数据库等位置。这将减少推送到数据中心的总数据量。在边缘缓存数据有助于提升性能,并增强故障恢复能力。我们预计可以缓存两种类型的数据。需要在不同的边缘分别缓存应用Docker镜像和应用数据,以便用户能够更快地访问。

在容器化平台中,可以通过缓存容器数据卷来实现缓存数据。通过为容器的卷创建共享空间,这些数据卷可在边缘动态收集。例如,在数据分析平台中,可以配置 Docker 中的应用以使用共享数据卷。此外,还有多种方法可提升边缘计算的数据访问速度和负载分配效率,例如通过在边缘进行数据复制来缓存数据[20]。在 Docker 平台中,通过共享和复制的卷缓存数据可实现数据与服务的解耦。

E. 应用

Hadoop 是一个用于并行处理大量数据的框架。Hadoop 使用 Java 开发,并通过“Hadoop流式处理”支持任何编程语言。Hadoop 由两个主要层组成,分别是 MapReduce层和Hadoop分布式文件系统(HDFS)层。MapReduce层包含两个阶段,即映射阶段和归约阶段。在映射阶段,根据map()函数中的逻辑处理数据。map()函数的输出将作为归约阶段的输入。在归约阶段,根据reduce()函数中的逻辑对数据进行整理。

我们通过在测试平台上部署Hadoop进行了测试。在实验过程中,Docker在安装方面具有优势。我们使用Docker Ferry在Docker中配置Hadoop。Docker Ferry简化了设置时间并减少了配置错误。

VII. 观察与讨论

Docker设计概念与性能 ‐ Docker 采用 每个容器一个应用 的设计原则,且 Docker 容器之间是松耦合的。Docker 是一个具有低计算开销的平台。与在管理程序上运行的虚拟机相比,管理程序会占用主机资源的约 10% 到 15%,而 Docker 对主机资源的占用极小[21]。总体而言,其中央处理器、内存、存储和网络性能接近裸机水平[22]。由于 Docker 容器不进行硬件虚拟化,因此更加轻量级且运行更快。平均而言,Docker 容器的运行速度比虚拟机快 26 倍[23]。管理程序的开销非常显著,并且当同一台机器上运行的虚拟机数量增加时,该开销会呈指数级增长[24]。

Docker容器可以在小型设备到大型服务器上运行,这使其成为边缘服务器上极具吸引力的计算平台,因为边缘端的资源容量可能相较于数据中心更小。

Docker敏捷性 ‐ Docker镜像体积小且轻量级。这使得Docker具有敏捷性、可移植性,并易于传输[23]。在Docker容器中配置应用后,该Docker容器易于在不同位置之间迁移。这一特性非常适合边缘计算,因为应用或服务可以迁移到更靠近用户的边缘,从而降低数据传输开销。

低存储占用 ‐ Docker容器中的数据是非持久性的。为了保存对Docker容器的更改,管理员需要将这些更改提交到 Docker镜像中。随后,Docker会在现有镜像之上创建额外的层。对于每个新增的层,仅存储增量或变更部分。在单个主机上运行多种操作系统发行版的多个应用程序的场景中,例如Red Hat Linux中的MySQL、Ubuntu Linux中的 PHP以及CentOS Linux中的应用服务器,Docker容器会将每个发行版所需的所有库打包。当多个Docker容器共享同一主机时,存储中仅保存容器之间的差异部分。Docker因此实现了更优的存储节省效果,在边缘侧存储资源稀缺的环境下尤为适用。

快速服务部署与拆除 – 能够快速配置和拆除服务是边缘计算特性的重要要求之一。由于Docker镜像体积较小,可以非常迅速地复制并部署Docker镜像。由于Docker容器没有启动过程,容器内的应用程序进程能够即时启动。当应用程序不再需要时,容器可以被拆除,并且在宿主操作系统上不会留下任何痕迹。这一Docker特性适用于边缘计算环境,能够在多个应用程序请求之间快速服务、创建和拆除,从而为其他用户请求腾出资源[21][22]。

边缘服务器位置 ‐ 在多接入边缘计算(MEC)中,高密度服务器被部署在服务提供商(SP)的基础设施中,以托管多个虚拟机[6][5]。每个虚拟机托管多个应用程序和缓存的数据。对于企业而言,可以设置本地边缘服务器,作为用户的缓存或托管应用。MEC和本地边缘服务器的部署均可减少用户访问应用程序和数据所需的跳数。Docker容器可替代基于虚拟机的边缘计算或云点,且占用资源更少。Docker容器可在网络的最边缘以及用户物理空间内部进行设置和配置,例如应用程序和数据位于邻近设备上。在另一个示例中,Docker容器可作为企业基础设施环境的一部分,以受信任或纯志愿计算的方式运行。这两种用例均适用于基于容器的技术。

VIII. CONCLUSION

本文中,我们对选定的基础边缘计算用例进行了技术评估和实验。这些用例在我们看来是边缘计算平台的基本构建模块。通过评估,我们得出结论:Docker 是一个可行候选方案。尽管存在一些挑战,仍有改进空间,但总体而言,Docker 相较于基于虚拟机的边缘计算平台,具备快速部署、弹性和良好的性能优势,使其成为比基于虚拟化的边缘计算技术更具吸引力的技术。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐