Elastic Scheduling for Microservice Applications in Clouds
(云环境下微服务应用的弹性调度)
摘要:
微服务被广泛用于灵活的软件开发。最近,容器已经成为微服务的首选部署技术,因为它启动速度快,开销低。然而,容器层使任务调度和云中的自动伸缩变得复杂。现有算法不适应由虚拟机和容器组成的两层结构,经常忽略流工作负载。为此,本文提出了一种针对微服务的弹性调度(ESMS),它将任务调度与自动伸缩集成在一起。ESMS的目标是在满足期限限制的情况下最小化虚拟机的成本。具体来说,我们将微服务的任务调度问题定义为一个具有期限约束的成本优化问题,并提出了一种基于统计的策略来确定流工作负载下的容器配置。然后,我们提出了一种基于紧急度的工作流调度算法,该算法可以分配任务并确定可扩展实例的类型和数量。最后,我们将新容器到虚拟机的映射建模为一个变大小的装箱问题,并对其进行求解,以实现虚拟机和容器的集成扩展。通过与现有算法的比较,验证了ESMS在提高交期成功率和降低成本方面的能力。
1 介绍
今天,基于云的软件开发,如SaaS(软件即服务),已经变得越来越流行,因为它提高了业务敏捷性并降低了软件维护成本。然而,业务需求的多样性和云中的弹性需要具有高可伸缩性和快速开发的软件架构。与传统体系结构相比,微服务通过构造具有独立生命周期的服务和降低服务的粒度,缩短了开发周期,降低了固有的复杂性,提高了可伸缩性。因此,微服务被广泛用于诸如Netflix这样的商业软件。
通常,部署在云中的应用程序需要满足性能要求,如响应时间,但也应该尽可能地降低云资源的成本。因此,在基于微服务的云应用中,任务调度和自动伸缩是需要解决的关键问题。在文献中,任务调度和自伸缩有不同的方法来有效地利用云计算资源。1)在任务调度中,应用程序被描述为一个工作流,其主要主题是调度任务在多个实例上的执行,以优化最大完成时间。当实例数量不足以满足性能需求时,算法会利用云资源创建新的实例,在性能和成本之间进行权衡。然而,扩展规则通常比较简单,不能满足更复杂的扩展需求,例如容器和虚拟机(vm)组成的两层结构的扩展。2)自动伸缩通过阈值或强化学习建立规则或建立性能预测模型,确定满足性能标准的资源数量。与任务调度相比,自动伸缩算法侧重于构建伸缩规则,但却简化或忽略了任务调度。事实上,不同的调度策略会导致不同的资源需求,需要不同的伸缩方案。不结合调度的伸缩算法的预测结果与实际可调度的资源量存在差异。由于资源供应不足,这种差异可能导致性能下降,或者由于过度供应[1]而导致不必要的额外成本。因此,我们有动力将云环境下微服务的自动伸缩与任务调度相结合,在最小化服务部署成本的同时,获得精确的伸缩资源需求,满足服务性能需求。
目前,云中的调度算法大多采用单工作流执行,基于当前工作流或预先设置的参数进行伸缩决策,忽略了流工作负载的动态特性。在流工作负载中,调度算法需要反复执行以服务于连续提交的工作流,而算法无法提前知道所有工作流的特征,如任务的执行时间。由于任务的执行时间会在运行时发生波动,因此调度算法在当前时刻做出的最优伸缩决策,如配置、新服务实例的数量等,并不能保证全局最优。因此,调度算法需要做出决策进行长期优化,以确保流工作负载下的系统性能。
在微服务系统中,容器由于其快速启动和低开销而成为部署微服务实例的首选技术。然而,容器层也给自动伸缩带来了新的挑战。1)云提供商以不同配置的虚拟机方式提供资源,形成两层容器的资源结构。它需要同时在容器层和VM层上进行伸缩,而传统的伸缩算法只适用于单层结构(无论是VM还是容器)。2)由于同一个VM中的容器共享镜像,新添加的容器可以部署在对应镜像的VM上,从而减少镜像的拉取时间和容器的启动时间。因此,缩放算法需要充分利用现有的图像来提高的缩放性能,需要考虑这两个因素来对vm进行缩放,然后在vm上放置实例。
为了解决这些问题,我们提出了一种基于最常用的随需应变模型的弹性调度算法(Elastic Scheduling for Microservices, ESMS),该算法将任务调度和云中的自动伸缩集成在一起。首先,我们将微服务的任务调度定义为一个具有期限约束的成本优化问题,并使用基于统计的策略来确定流工作负载下的适当容器配置。然后,考虑容器图像的影响,提出了一种基于截止时间分配和紧急性的启发式任务调度算法,确定调度方案和新增容器的类型和数量。此外,为了实现虚拟机和容器的两层扩展,将新容器的部署问题描述为变尺寸装箱问题(VSBPP)。我们使用启发式算法来解决这个问题,并确定vm的伸缩方案和容器在vm上的映射。最后,我们使用真实的工作流应用程序(例如,蒙太奇)和维基百科访问跟踪进行基于模拟的实验。与现有算法(如ProLiS)相比,ESMS被证明能够降低租赁成本并获得最高的满足期限约束的成功率。
本文的主要贡献如下:
1)我们提出了一种融合任务调度和自动伸缩的微服务弹性调度算法。利用基于紧急度的调度算法来获得调度方案,并准确地确定要伸缩的新实例。然后通过两层缩放算法得到缩放方案。
2)为提高微服务流工作负载下的利用率,设计了一种基于统计信息的配置求解算法。生成的配置用于创建新的容器和分配截止日期,以提高截止日期分布的准确性。
3)为了解决虚拟机和容器的两层伸缩问题,在任务调度中考虑了容器映像对容器初始化时间的影响。将自伸缩问题构造为VSBPP,以获得最优的虚拟机伸缩方案和容器部署方案,使虚拟机成本最小化。
通过实际工作流应用的仿真实验,验证了该算法在任务调度和自动伸缩方面的性能优于三种典型的任务调度和自动伸缩算法。
4)本文的其余部分组织如下。第二部分总结了相关工作。第3节定义了基于微服务的云应用的系统模型和弹性调度问题。第4节和第5节分别详细描述了提出的任务调度和自动伸缩算法。第6节介绍实验和评价。第七部分总结了全文。
2 相关工作
2.1 云环境下的任务调度
任务调度是一个著名的np完全问题,多年来一直是研究的热点。不同的目标导致了不同的优化思路,包括响应时间、成本、安全性等。在各种目标中,性能和成本是最受关注的。与传统的分布式系统不同,云通常被认为能够提供无限的资源,拥有更多资源的机器意味着更高的价格。因此,必须考虑性能和成本之间的权衡。云提供商根据使用的时间间隔的数量向用户收费,时间间隔的部分利用率将四舍五入为一个完整的时间间隔。因此,任务调度需要避免浪费时间间隔。
现有的云环境下的工作流调度算法主要分为期限约束的工作流调度和预算约束的工作流调度。
在期限约束的工作流调度中,性能需求表示为工作流的期限,目标是在满足期限约束的情况下使工作流的执行成本最小化。Abrishami等人定义了局部关键路径(Partial Critical Paths, PCPs),并提出了IC-PCP算法以最小化总代价。Wu等人在HEFT中扩展了向上秩,并定义了概率向上秩。提出了两种工作流调度算法,即ProLiS和LACO。Wu等人提出了一种四步算法MSMD,通过减少虚拟机数量和实例小时来最小化成本。Thiago等人提出了l -粒度方法来加快有截止时间约束的工作流调度。
预算约束的工作流调度可以在用户定义的预算范围内最小化工作流的完成时间。Zheng等人[18]对经典的HEFT[17]进行了扩展,提出了BHEFT,即通过评估备用预算来选择可能的最佳服务。Bao et al.建模了WANG et al.: ELASTIC SCHEDULING FOR MICROSERVICE APPLICATIONS IN CLOUDS 99的微服务性能,并提出了GRCP算法,该算法使用贪婪策略将任务映射到现有或新的实例。Qin et al.提出了剩余最便宜的预算,以满足预算约束,保证解决方案的可行性。
然而,这些研究只关注单个工作流的调度,忽略了更一般的流工作负载和多工作流。云资源可以在多个工作流之间共享,提高资源利用率,降低基础设施成本。前人研究了多工作流调度,但它们局限于资源受限的场景,不适用于云计算。Rimal和Maier提出了多租户云计算的CSWA算法,但只考虑了一次性调度;也就是说,同时提交多个工作流,并在已知所有工作流特征的情况下执行算法,忽略一般的流工作负载。在流工作负载中,多个工作流以不同的时间戳提交,需要在不知道后续工作流信息的情况下重复执行调度算法。在为新实例分配资源时,算法应该充分利用剩余的资源,并考虑后续的工作负载。请注意,工作流中的任务调度与流数据处理中的任务调度不同,在流数据处理中,“任务”被定义为某个操作符的副本,并负责处理数据。因此,流处理中的任务类似于微服务系统中的服务实例,任务调度对应于微服务中的服务实例放置。
许多任务调度算法采用简单的策略向外扩展实例,例如创建最便宜的服务实例或采用基于规则的扩展策略。一个新的实例将直接在VM上创建。但是,在由容器和VM组成的两层结构中,这些策略不能解决如何确定容器的配置、应该创建哪种类型的VM以及应该将VM的新容器放置在哪种位置等问题。虽然部分文献都描述了微服务的两层资源结构,但没有讨论相关的伸缩问题,只考虑了容器的伸缩,忽略了vm的伸缩。
2.2 自动伸缩云
根据方法的不同,自动标度可分为三类:基于规则的方法、时间序列分析方法和模型分析方法。
基于规则的方法被广泛应用于行业,如Amazon EC2。这些方法需要一些阈值或基于先验知识的扩展规则来触发响应动态工作负载的扩展操作。Zheng等人设计了两个基于规则的自动标度器,它们成为了他们的sla感知微服务框架SmartVM的一部分。
时间序列分析使用一组数据点来发现重复模式或预测未来的值,例如未来的请求量或周期趋势,通常是通过机器学习技术。Kan使用二阶自回归移动平均方法预测短时间后的每秒请求量。Fernandez et al.利用五种不同的统计模型来适应四种类型的工作负载。
在模型分析中,建立数学或概率模型来预测性能和作出决策。最典型的例子就是排队论。排队理论被用来对微服务的响应时间和供应资源进行建模。此外,基于马尔可夫过程的强化学习、回归模型和基于Petri网的分析模型也是应用广泛的技术。
但上述算法不涉及具体的调度方法,会影响系统性能。这些模型的结果可能与实际调度结果不一致,不能准确反映实际对资源的需求。在中,作者提出了几种调度算法与基于规则的伸缩算法相结合。每次提交请求时