一、研究现状

     近几年,如Kubernetes等容器编排工具越来越多被用来简化多容器应用程序的管理。Kubernetes中包含简单的部署策略,这些策略能够在位于集群中的计算资源上扩展容器,并基于一些集群级别的指标来实现容器自动横向或纵向扩展。严格来讲,Kubernetes不太适合在地理分布的计算环境中部署容器,且不太适合处理动态变化的应用的工作负载和计算资源。

       相比于VM,容器利用操作系统级虚拟化技术减少了系统开销。此外,容器能够把应用程序及其所有依赖(比如库,代码等)捆绑在一起,从而允许快速启动、迁移以及停机。考虑到新性的边缘或雾计算环境的动态性、异构性以及地理分布特点,一个需要方便解决的关键任务是运行时的弹性和基于容器的应用程序的放置问题。

       具备弹性的应用程序能够动态地分配和重分配计算资源,从而处理其相应的工作负载。在有限的运行成本下,弹性能提高应用程序的可用性。在面对工作负载变化的情况下,弹性问题决定着横向扩展容器的数量以及(或者)纵向扩展计算资源的量。当一个细粒度的垂直扩展允许更快的响应较小的工作负载变化时,水平扩展操作更容易应对突发工作负载高峰。计算资源的异构性和地理分布特点,强调仔细确定哪个计算节点将托管和执行应用程序容器的重要性。因此,除了弹性问题外,还存在位置问题(或者调度问题)需要在运行时进行有效解决。如果选择用来执行应用程序的计算节点不合适,那将导致性能下降并产生更高的运行成本。

       截至目前,仅有少量的工作研究了如何联合解决地理分布环境下的容器弹性和放置问题。大多数成果不是考虑容器的弹性问题,就是放置问题,且很少考虑云或雾计算资源的地理分布环境。

二、已有研究面临的问题

      实验结果表明:Kubernetes比其他已存在编排引擎的表现更好。然而,和其他编排引擎一样,Kubernetes不太适合在地理分布的计算环境中管理应用程序。

  1. 虽然Kubernetes配置了基于静态阈值的部署策略,这种策略不考虑网络延迟,且在面对变化的工作负载时,依赖于面向集群的指标来横向扩展应用程序。因为依赖面向集群的指标,所以基于阈值的弹性策略不适合扩展延迟敏感的应用程序。
  2. 因为需要识别系统指标(如利用率)与应用指标(如响应时间)之间的关系,所以确定一个好的扩展阈值是复杂的。
  3. 关于容器的放置问题,默认的Kubernetes调度器在集群工作节点上伸缩容器,不考虑可用计算资源的异构性和地理分布特点。

三、本文的主要贡献

1. 作者设计并开发了一种容器编排工具ge-kube,通过新设计的弹性和放置管理组件,对Kubernetes的自适应和网络感知部署能力进行了升级。他们利用了去中心化的自适应控制回路,此回路易于装配具有不同服务质量Qos感知部署策略。

2. ge-kube工具集成了灵活扩展和放置的策略。

(1)为解决弹性问题,作者提出了一种基于模型的强化学习方法,此方法从经验中学习了适当的扩展缩放策略。该强化学习方法依赖于一个通过捕获执行缩放操作的成本所构造的惩罚函数。

(2)为了在地理分布的工作节点上高效放置pods,作者提出了一种优化问题公式和一种网络感知的启发式算法,此算法明确考虑了众多工作节点之间不可忽略的网络延迟。所提出的解决方法克服了现有文献中的两方面限制:一是不联合使用水平和垂直维度的弹性,二是不考虑计算资源的地理分布。

      综合来讲,本文提出了两级控制回路:一级是利用应用程序的响应时间,基于模型的强化学习方法动态控制单个容器的副本数量;另一级是在地理分布的计算资源上,采用一种网络感知放置策略分配容器。

四、实验结果

       本文使用一个代理的CPU密集型应用程序和一个真实的应用(比如Redis),进行了一系列广泛的实验,结果表明:

(1)该文所提出的基于模型的强化学习算法能够高效缩放应用,可以说,满足了最大应用响应时间的需求。

(2)采用网络感知的方式带来更多益处。相比于,当采用网络感知放置策略时,这个地理分布的Redis集群每秒的处理量比Kubernetes的默认策略高三倍。