0 摘要
- 随着智能制造的快速发展,面向边缘计算的微服务平台正在成为生产控制的重要组成部分。
- 在微服务的容器化部署中:
- 层共享可以减少由于镜像拉取而导致的巨大带宽消耗
- 而链共享可以减少微服务之间通信引起的通信开销
- 这两种共享方法利用每个微服务的特性在部署过程中共享资源。然而,由于边缘服务器资源有限,很难同时满足这两种方法的优化目标。因此,通过平衡这两种共享方法来实现提高服务响应效率至关重要。
- 本文研究了一种能够平衡微服务的层共享和链共享的最佳微服务部署策略。我们通过模型重构,将最小化微服务镜像拉取延迟和通信开销的问题转化为线性约束整数二次规划问题。通过连续凸近似(SCA)方法得到一个部署策略。
- 实验结果表明,所提出的部署策略可以平衡这两种资源共享方法。当两种共享方法被平等考虑时,平均镜像拉取延迟可以降低到基准值的65%,平均通信开销可以降低到基准值的30%。
1 介绍
-
传统的工业软件采用单体服务架构。服务内部的高耦合和占用率会增加整个系统的复杂性。其可扩展性、稳定性和容错性很难满足智能制造的要求。
-
通过微服务架构,一个完整的服务可以拆分为多个松耦合的微服务。不同的微服务在逻辑上是独立的,具有很高的灵活性、可扩展性和容错性,可以很好地适应智能制造的需求。
-
根据不同的服务请求和部署策略,将打包成Docker镜像的每个微服务可以通过容器编排工具k8s部署到边缘服务器上。
-
在微服务的容器化部署中,服务效率是评估部署解决方案质量的重要指标。服务效率主要受两个方面的影响。
- 一方面是微服务的启动时间。它主要取决于Docker镜像的拉动延迟,这些镜像通过不同的镜像层存储在云端
- 另一方面是微服务之间的通信开销。它取决于微服务之间的数据交换量。
- 一个工业应用可以由部署在一个或多个边缘服务器上的多个微服务完成。这些微服务可以被称为微服务链,同一微服务链中的微服务之间将频繁进行数据交换。
-
基于上述两个方面,通过资源共享来提高服务效率非常重要。为提高服务效率,有两种资源共享策略。
- 一种资源共享策略是层共享:Docker原生支持层的共享。如果部署在同一边缘服务器上的微服务使用相同的镜像层,拉取镜像时将不会重复拉取该层。这个层可以被服务器上的所有微服务共享。层共享可以有效减少镜像拉取延迟,从而提高微服务的启动速度和服务响应效率。
- 另一种资源共享策略是链共享:它可以定义为部署在同一服务器上的微服务之间的数据共享。在微服务链中,相邻的两个微服务之间会频繁进行数据传输。如果两个微服务部署在同一服务器上,下一个微服务可以通过链共享直接访问数据,而无需进行多跳数据传输。链共享可以减少数据传输引起的延迟和数据丢失。
-
由于边缘服务器的资源有限,不可能将所有的微服务都部署在同一台边缘服务器上。因此,有必要找到一种在层共享和链共享之间进行权衡的最优微服务部署策略。
-
由于边缘服务器的资源有限,微服务部署策略无法同时充分利用不同的资源,因此,还需要一种方法来合理地分配资源给部署在服务器上的不同微服务,并最大化资源的利用。
-
本文贡献:
-
- 我们通过同一模型描述了微服务的分层结构和链式结构。建立了一个整数规划问题,以最小化镜像拉取延迟和通信开销。
-
- 通过模型重构,证明了整数规划问题可以转化为带有线性约束的整数二次规划问题。通过使用连续凸逼近(SCA)方法获得最优解。该方法可以有效平衡镜像拉取延迟和通信开销。
-
- 提出了一种用于边缘服务器的资源重新分配算法,以充分利用闲置的计算资源。
-
- 通过实验,在镜像拉取延迟和服务间通信开销等多个维度上评估了结果。实验证明了所提方法的有效性。
-
第2节简要回顾了相关文献。
第3节对系统的分层结构和链式结构进行建模,并给出了问题的形式化描述。
第4节解决了提出的问题。
第5节提出了一种用于边缘服务器的资源重新分配算法。
第6节评估了所提方法的结果。
第7节讨论了限制和未来工作。
第8节对论文进行了总结。
2 相关工作
3 系统建模和问题表述
3.1 一个简单例子
-
如图示,考虑一个有两个微服务和一个有三个微服务的应用程序,
表示第k个软件的第i个微服务 -
每个微服务镜像有不同数量的镜像层组成。三个服务器与云服务器之间的带宽为120 MB/s,并且两个相邻服务器之间可以通过单跳到达。
-
a为层共享策略,此时将有相同镜像层的微服务部署在一起,可以实现镜像层的共享,但同一软件间需要传输数据。
-
b为链共享策略,同一软件的微服务在一个服务器上部署,传输数据大小为0,但要拉取所有镜像
-
c为同时考虑链共享和层共享,三种策略的具体时间比较见表。
3.2 系统模型
3.3 问题形式化描述
4 基于SCA的微服务部署方案
4.1 问题转化
4.2 基于SCA的方法
4.3 收敛分析
5 资源分配方法
5.1 问题描述
5.2 基于拉格朗日乘数法的解决方案
6 表现评估
6.1 模拟实验
6.2 用真实的边缘服务器进行实验
6.3 大规模的案例
7 讨论
-
高时间和空间复杂性:所提出的方法在大规模场景中具有高时间和空间复杂性。虽然可以在可接受的时间内获得最优解,但需要进一步优化以提高可扩展性。未来的研究应着重开发高效的算法或优化技术,以降低计算复杂度。
-
考虑请求频率:通信开销不仅取决于通信数据量,还取决于请求频率。即使每次传输的数据量较小,高请求频率也会显著增加通信开销。在计算通信开销时,考虑通信数据量和请求频率的乘积是非常重要的。未来的工作可以探索将请求频率作为输入参数,以准确估计通信开销。
-
动态微服务部署:微服务不是静态的,部署过程涉及关闭、迁移和添加新的微服务。在面对动态场景时,需要相应的部署算法以适应变化。未来的研究可以探索使用人工智能或其他方法,在初始部署结果之后进行训练,以动态调整微服务的部署。
8 结论
- 本文研究了微服务的层共享和链共享,并探索了一种可以平衡这两种资源共享方式的微服务部署方案。
- 我们建立了一个旨在最小化图像拉取延迟和通信开销的问题。通过模型重构,将问题转化为一个具有线性约束的整数二次规划问题,并通过连续凸逼近(SCA)方法获得部署策略。
- 我们还提出了一种资源重新分配算法,以充分利用服务器的空闲资源。
名词解释
Docker的层级
-
Docker 镜像是构建容器的基础,它包含了一个完整的文件系统,包括操作系统、应用程序和依赖项。镜像是只读的,意味着一旦创建就不可更改。
-
Docker 镜像采用了分层的文件系统结构,这是 Docker 的一个重要特性。每个镜像由多个文件系统层构成,每个层都是只读的,并且可以被其他镜像共享和重用。这种分层结构使得镜像的构建和管理变得非常高效。
-
下面是 Docker 镜像层的一些重要概念:
- 基础镜像层(Base Image Layer):这是 Docker 镜像的第一个层,它通常包含操作系统的基本文件系统。基础镜像层是只读的,所有其他层都依赖于它。
- 中间镜像层(Intermediate Image Layers):在构建 Docker 镜像时,可以在基础镜像层之上添加多个中间镜像层。每个中间镜像层都是基于前一个层进行的修改或添加,例如安装软件包、配置环境等。每个中间镜像层都会生成一个唯一的标识符,用于表示该层的内容。
- 最终镜像层(Final Image Layer):最后一个中间镜像层被称为最终镜像层。它是由之前的中间镜像层构建而成,代表了完整的容器镜像。最终镜像层是可读写的,并且可以在容器中运行和修改。
-
使用分层结构的好处是,当多个镜像共享相同的层时,这些层只需要在磁盘上存储一次,可以被多个镜像同时使用,节省了存储空间。此外,当基础镜像或中间镜像层发生变化时,只需重新构建受影响的层,而不必重新构建整个镜像,提高了构建速度和效率。
-
总结一下,Docker 镜像层是构成 Docker 镜像的一组只读文件系统层,通过分层结构实现了高效的镜像构建和共享。每个镜像层都包含了特定的文件系统更改或添加,最终构成一个完整的容器镜像。