作者:澳门大学,中国深圳先研院
摘要:
提高数据中心资源利用率的一种常见方法是根据实际工作负载自适应地提供资源。然而,在微服务管理框架中这样做的一个基本挑战是,服务的不同组件对端到端性能的影响可能存在显著差异。为了使资源管理更具挑战性,单个微服务可以由具有不同工作负载模式和SLA需求的多个在线服务共享。我们提出了一个高效的资源管理系统,即Erms,来保证共享微服务环境中的sla。Erms将微服务延迟描述为工作负载、资源使用和干扰的分段线性函数。基于此分析,Erms构建资源伸缩模型,以最佳地确定具有复杂依赖关系的微服务的延迟目标。Erms还为共享微服务设计了新的调度策略,以进一步提高资源效率。微服务基准测试和跟踪驱动模拟的实验表明,与最先进的方法相比,Erms可以降低5倍的SLA违例概率,更重要的是,可以减少1.6倍的资源使用。
I introduction
当负载访问增加时,不必扩展整个应用服务,而是定位到负载瓶颈的单个微服务,并独立扩展。
三个挑战:
(1)这些微服务可以形成一个复杂的依赖图,其中包含并行执行、顺序执行甚至可选执行,如图1所示。为了最大限度地提高资源效率,同时确保端到端SLA,对微服务粒度的资源进行管理变得极其困难。
(2)微服务常与批处理应用一起配置,资源争用可能会导致来自同一微服务之间的性能不平衡。
(3)一个单一的微服务可以被多个服务共享,但是这些服务可能具有不同的负载模式和SLA
此外,目前还没有研究在具有复杂依赖关系的不同服务之间进行微服务共享。然而,共享微服务为通过所有服务的全球资源管理来提高资源效率创造了新的机会。为了证明这一点,我们进行了一个简单的实验,展示了在共享微服务上对服务进行优先级排序可以节省40%以上的资源
本文通过在具有SLA保证的共享微服务执行框架中提供高效资源管理Erms来解决上述限制。Erms根据工作负载、部署容器的数量和资源干扰的分段函数来描述微服务的尾部延迟。有了这个特征,Erms通过显式量化和全局优化来剖析微服务依赖图的详细结构。这使得Erms从根本上不同于深度学习方法[33,44]和其他启发式解决方案.
Erms根据观察到的工作负载,确定每个微服务的延迟目标,以满足端到端SLA需求的最小资源占用。在共享的微服务中,Erms实现基于优先级的调度,以协调来自不同在线服务的所有请求的执行。在此调度下,优先考虑那些包含对延迟敏感的微服务的服务,从而显著提高资源效率。Erms还进行了精心设计,使系统可伸缩并适用于生产环境。其关键技术是凸优化结果的应用和低复杂度图算法的设计。
贡献:
- 微服务延迟目标的优化计算。据我们所知,Erms是第一个系统地为每个微服务确定最佳延迟目标以满足SLA要求的系统。Erms是可伸缩的,可以处理复杂的依赖关系,而不受图拓扑的任何限制。
- 共享微服务的新调度策略。erms的另一个贡献是为共享微服务设计了一种新的调度策略,该策略具有理论上的性能保证。该策略为来自不同服务的请求分配优先级,并全局协调所有微服务的资源扩展。有了这个新策略,Erms可以进一步减少使用容器的数量,最多可减少50%。
- 实施。我们在Kubernetes之上提供了Erms的原型实现。我们实现了动态资源供应来放置容器,从而控制整体的资源干扰。
2 Background and motivation
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wVQjjTUS-1677035130936)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/96384e4b-8f99-43ac-9667-3de6d0e88e6a/Untitled.png)]
为什么共享资源会更高,可能的原因是作为共享模块的P,一视同仁的处理服务1和2,但是2的延迟需求更低,服务1更敏感,理论应该优先处理服务1的请求。
3 ERMS 方法论
在本节中,我们将描述Erms框架的总体架构。Erms是一个集群范围的资源管理器,定期调整为每个微服务部署的容器数量,目标是在满足服务sla的同时最小化总资源使用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jsf7BbHi-1677035130937)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a8de1c82-2bc9-4058-8937-0a082670b520/Untitled.png)]
Erms在两个跟踪系统Prometheus[3]和Jeager[2]上部署了一个跟踪协调器(图6中我们就得到了一些注释)。跟踪协调器生成微服务依赖关系图,并根据历史跟踪提取单个微服务延迟。
Erms包含了一个离线剖析模块(1),它在后台工作。它从跟踪协调器获取每个微服务的所有已部署容器在不同工作负载下的所有微服务延迟样本。使用这些数据样本,离线模块构建一个拟合模型,将微服务尾部延迟作为工作负载的分段线性函数来描述。随着物理主机资源干扰的不同,这些功能的参数也会有所不同。
Erms的关键模块是Online Scaling,它根据工作负载的变化做出伸缩决策。它由三个组件组成,即Graph Merge(3),Latency Target Computation(4),Priority Scheduling(5)。Graph Merge组件利用图形算法,根据观察到的工作负载,将一个具有复杂依赖关系的一般依赖关系图合并成一个只有顺序依赖关系的简单结构。这个合并过程的目的是简化延迟目标的计算。Latency Target Computation组件通过解决一个简单的低开销凸问题,为每个依赖图中的所有微服务分配一个初始延迟目标。优先级调度组件根据初始延迟目标在共享微服务上为每个服务分配不同的优先级。不同服务的请求将按照此优先级进行处理。此外,这种优先级还决定了共享微服务需要在每个服务下处理的新工作负载。基于这个新的工作负载,Latency Target Computation组件重新计算所有微服务的延迟目标,并相应地扩展容器。【这个的意思是如果来了新服务,则动态重新计算每个服务在此微服务处的优先级】
Erms还包含一个资源分配模块(图6中的6),用于将来自不同微服务的所有容器在集群中跨物理主机放置。每当Online Scaling模块决定缩小或向外扩展时,Resource Provisioning模块选择放置新计划的容器或释放现有的容器,从而将整体资源干扰降至最低。最后,通过部署模块在底层Kubernetes集群上执行操作。
4 资源伸缩模型
模型
一个n个微服务的服务
每个微服务的资源*容器个数要在满足sLA的情况下最小化
算法1:
深度优先搜索:先纵向顺序合并,再横向合并
1是微服务针对不同的服务要有优先级
2扩缩容延迟计算
3资源干扰(cpu、mem负载均衡)
第六章实验
先是以小范围案例应用进行评估,最后以阿里大规模trace进行评估
微服务有个特点是:长期在线,所以关键在于分配的资源扩缩容