基于容器的物联网云虚拟化技术
2023-12-18刘勇赵亦辉
刘勇 赵亦辉
关键词:云计算;物联网;虚拟化;容器
中图分类号:TP311.5 文献标识码:A 文章编号:1006-8228(2023)11-104-04
0 引言
云計算和物联网(IoT)技术的结合为IT 运营商增加了新的业务发展方向。物联网的发展正在推动私云、公云和混合云提供商将其系统与嵌入式设备(包括传感器和执行器)集成,以便与传统的基础设施、平台和软件即服务(IaaS、PaaS、SaaS)一起提供一种新型的服务,即物联网服务(IoTaaS)。因此,将云计算解决方案与物联网相结合的新型服务提供商正在崛起。我们谈论IoTCloud 是指一种新型的分布式系统,由一组物联网设备组成,这些设备通过互联网与远程云基础设施、平台或软件互连,能够提供IoTaaS[1]。
资源虚拟化是云计算的关键概念之一。如今,有几种虚拟化技术可用。最流行的技术之一是虚拟机虚拟化,它需要在主机操作系统上安装一个虚拟机监视器(VMM)软件模块,以提供虚拟机(VM)的完整抽象。最近,管理程序的轻量级替代方案是基于容器的虚拟化,也称为操作系统(OS)级虚拟化。这种虚拟化划分物理机器资源,创建多个隔离的用户空间实例。我们认为,这样的技术可以彻底改变未来的物联网云系统,在资源管理方面带来管理程序虚拟化给传统云系统带来的相同优势。事实上,容器虚拟化可以让物联网云运营商实例化、重新部署和优化虚拟物联网功能,以更灵活的方式控制IoTaaS。
1 相关工作
该研究领域的众多活动证明了研究界对物联网基于云的解决方案的兴趣。如今,基于容器的虚拟化为云中的虚拟机提供了一种有趣的替代方案[2]。尽管容器(如名称空间)的基本概念非常成熟,但直到最近,容器才在主流操作系统中被采用和标准化,这导致了使用容器来提供隔离和资源控制的复兴。Linux是云计算的首选操作系统,因为它具有零价格、大生态系统、良好的硬件支持、良好的性能和可靠性。
在Linux 中实现容器所需的内核名称空间功能,自2006 年首次讨论以来,最近几年才变得成熟[3]。有关的研究如Docker[4]是基于Linux 容器(LXC)的轻量级虚拟化,可以将应用程序及其依赖关系完全封装在虚拟容器中。在文献[5]中,作者讨论了基于Docker 的云系统的设计和实现,特别是针对PaaS 平台。正如文献[6]中所述,Docker 已部署在利用先进云服务的生物信息学计算的应用程序中。T.Bui 通过考虑两个主要领域来研究Docker 的安全级别:①Docker 的内部安全性;②Docker如何与Linux内核的安全功能(如SELinux和AppArmor)交互,以加强主机系统。这些研究表明,即使是使用默认配置,Docker 也为其使用命名空间、cgroups 和copyon-write 文件系统的容器提供了高级别的隔离和资源限制。它还支持几个内核安全功能,这些功能有助于增强主机的安全性[7]。
2 容器虚拟化
资源虚拟化是云计算的关键概念之一,包括但不限于虚拟计算机硬件平台、操作系统(OS)、存储设备或计算机网络资源。考虑到这些场景,虚拟化利用系统顶部的中间软件层来提供多个虚拟资源的抽象。这样的虚拟资源是被称为虚拟机(VM)的软件组件,它们可以被视为独立的执行上下文。
如今,有几种虚拟化技术可用。其中最流行的是基于虚拟机管理程序的虚拟化,它需要一个运行主机操作系统ontop 的虚拟机监视器(VMM)来提供VM 的完整抽象。在这种情况下,每个虚拟机都有自己的操作系统,其执行与其他操作系统完全隔离。这使我们能够在单个实际主机上执行多个不同的操作系统。Hypervisor 虚拟化(HVV)工具的示例包括Xen、KVM、Virtual Box、Virtual PC 和WM Ware。
最近,管理程序的一种轻量级替代方案是基于容器的虚拟化,也称为操作系统级虚拟化。这种虚拟化划分物理机器资源,创建多个隔离的用户空间实例。
LCV 是一种轻量级的虚拟化技术,允许在Linux操作系统中创建容器,不同的应用程序可以在其中运行。此外,由于有版本管理系统,LCV 允许以灵活的方式解决软件依赖性问题。LCV 是操作系统级别的虚拟化范例,它在用户空间启用同一操作系统的多个实例,同时共享主机操作系统的内核。容器有两种通用型号:①应用程序容器:单个应用程序在容器中运行。②系统容器:用户空间的一个实例在一个容器中启动。这允许用户空间的多个独立实例同时运行,每个实例都有自己的Init 进程、进程空间、文件系统和网络堆栈。LCV 允许提供商实现更灵活的设置、配置、优化和管理传感和驱动能力。流行的容器引擎解决方案包括Docker、LXC、lmctfy、OpenVZ。接下来,我们将分析不同的感兴趣的标准,以评估虚拟化技术在嵌入式设备中的适用性,并将传统的HVV 方法与LCV 方法进行了比较。
⑴ 启动时间 该容器比可比较的HVV VM 更轻,因此在大多数情况下,LCV 在初始启动时间和应用程序启动时间方面获胜。
⑵ 动态运行时控制 由于概念的性质,LCV 与主机系统的集成更加紧密,例如,允许直接从主机启动或终止容器中的应用程序,而在HVV 场景中,这必须通过信号量或虚拟网络/串行连接来完成。
⑶ 速度 与从LCV 容器通过主机系统上运行的同一驱动程序访问HVV VM 中的设备相比,直接访问HVV 虚拟机中的设备可能意味着显著的加速。只有针对特定场景的测试才能显示通信开销(LCV)与虚拟化开销(HVV)对延迟和吞吐量的影响程度。
⑷ 隔离 一方面,LCV 根本不能在系统级提供有效的隔离;另一方面,HVV 需要引导自己的内核和用户空间,因此允许在系统和用户级别上进行有效隔离。系统管理程序中的故障仍然可能使整个系统崩溃,但虚拟机中运行的代码将无法运行,例如,允许主机分析崩溃并重新启动虚拟机。
⑸ 内存消耗 这一点很明显。LCV 允许共享操作系统内核和开发人员选择共享的用户空间的任何部分,而HVV 要求单独存储VM 映像,不允许共享。因此,LCV 在这方面绝对胜出。
⑹ 虚拟环境和物理环境之间的通信信道 这两个概念都允许通过虚拟串行或网络接口或可用于放置信号量或消息的共享文件系统进行通信。
⑺ 动态资源分配或分离 动态资源分配功能在负载管理和故障切换场景中非常重要。例如,它允许将额外的CPU 分配给负载严重的虚拟机,或从空闲的虚拟机或容器中删除CPU。Bothsolutions 同样适用于执行故障转移场景。
⑻ 直接硬件访问 虽然HVV 允许通过virtio 或vfio等系统从虚拟机直接访问硬件外围设备,但这不能从LCV 容器中完成,因为LCV 容器只能访问用户空间,因此需要在(主机)内核中有相应的驱动程序。
物联网设备上的容器不仅仅是一个理论概念。事实上,越来越多的制造商正在研究容器工程,以简化物联网设备中复杂应用程序的包装、分发、安装和执行。
3 物联网云中的虚拟资源管理
我们假设物联网云提供商安排IoTaaSex 部署HVV 和LCV 概念。物联网设备与远程云系统交互,该系统负责收集来自于异构物联网设备的统一传感数据。通常,物联网设备运行使用特定编程语言或开发框架(例如,C、C++、Phyton、Nodejs 等)开发的定制软件。在物联网设备中可以执行最小的处理和存储任务,但大规模的数据存储和处理任务(数据挖掘和大数据分析)是在云系统中执行的,该系统利用虚拟化技术来持久地扩大/缩小存储和处理能力。物联网云的一个典型的例子,一方面管理存储和处理功能,另一方面管理传感和执行功能。存储和处理能力通过HVV 进行管理,而传感和驱动能力则通过直接安装在物联网设备操作系统上的定制软件进行管理。
上述方法是目前采用最多的方法,但考虑到通常需要根据环境的变化特征和用户的要求来定制传感和驱动服务,因此不那么灵活。最近,一些举措已经开始考虑通过容器部署在物联网设备中的应用程序。因此,可以同时利用HVV 和LCV 的优点。在物联网云在物联网设备中情况下,物联网云系统负责IoTaaSG 的实例化、优化和管理,以确保可靠性、可扩展性、服务质量(QoS)和安全性。由于LCV 应用于物联网设备,可以以更灵活的方式在多个分布式容器中部署分布式基础设施、平台和应用程序(以IoTaaS 的形式)。物联网设备与远程云系统交互,远程云系统负责收集和统一传感数据并触发致动器。所有的虚拟化技术都能够隐藏底层物理资产,在物理基础设施和服务之间引入逻辑层。为了利用这两种虚拟化技术,我们假设LCV 和HVV 都在Clouddatacenter 中使用,但只有LCV 在物联网设备中使用。PrivateIoT 云拥有自己的虚拟化基础架构,其中托管了几个虚拟机和容器,为其客户端提供服务。在灵活的场景中,每个物联网云运营商都可以动态安排、优化和重新部署自己的虚拟化资源,包括存储、处理、传感和执行功能。因此,物联网云运营商将能够以灵活的方式满足其客户的任何服务分配请求。
以下我们提供了一些示例:
⑴ 分布式IoTaaS 的部署 可以安排分布式IoTaaS,将部署在属于物联网云运营商控制的不同传感器的几个物联网设备上的服务相结合;
⑵ IoTaaS 搬迁和优化 实施负载平衡策略,管理不同传感器/执行器网络的物联网云可以将部署在容器中的服务和应用程序迁移到不同的物联网设备;
⑶ IoTaaS整合 IoTaaS 是结合安装在不同物联网设备中的容器构建的,延伸到不同的物联网云传感器/执行器网络,可以通过软件整合策略应用位置感知服务。事实上,在某些情况下,根据特定的应用程序逻辑移动服务是有用的。
通过考虑可以安装在物联网设备中的通用Linux系统来支持容器虚拟化所需的软件。Linux 主机操作系统通常部署在硬件系统之上,其内核需要与合适的虚拟化層协同工作。这样,操作系统级虚拟化就不需要额外的管理程序层,因为虚拟化功能是主机操作系统的一部分。这种技术使我们能够在主机操作系统本身的基础上虚拟化服务器。因此,消除了通过虚拟机监控程序中介产生的开销,从而实现了更高的本机性能。此外,主机内核提供进程隔离,并执行资源管理。这意味着即使所有容器都在同一内核下运行,每个容器都是一个虚拟环境,有自己的文件系统、进程、内存、设备等。Linux 内核顶部有一些主机应用程序:我们将注意力集中在容器引擎组件上,该组件将任何应用程序的部署自动化为一个轻量级、可移植、自给自足的容器,几乎可以在任何地方运行。
我们将Docker 平台视为容器引擎,它是一个开放平台,供开发人员和系统管理员构建、交付和运行分布式应用程序。Docker Engineer 提供了一种便携式、轻量级的运行时和打包工具。此外,由于Docker Hub可以被视为共享应用程序和自动化工作流的云服务,Docker 使应用程序能够从组件中快速组装,并消除了开发和生产环境之间的摩擦。因此,物联网云运营商可以更快地在不同的物联网设备上提供和运行相同的服务或应用程序。Docker 也是部署引擎的开源实现,它为dotCloud 提供了动力,dotCloud 是一种流行的平台即服务(PaaS),它直接受益于几年来获得的大规模运营经验和对数十万应用程序和数据库的支持。
4 结束语
基于容器的虚拟化是智能对象上可以采用的基于管理程序的方法的轻量级替代方案,用于增强物联网云服务供应。考虑到不同的物联网应用场景,基于容器的虚化允许物联网云提供商在智能对象上以灵活的方式部署和定制软件。在本文中,我们从IoTCloud场景的角度研究了智能对象上基于容器的虚拟化,特别关注运行Docker 容器引擎的Raspberry 设备。从我们的实验来看,容器虚拟化引入的开销在实际场景中是可以接受的。在未来的工作中,我们计划研究在物联网设备上运行的多个容器上部署的分布式服务的并行处理。