一、介绍
本文提出的方法分为:
- 基于马尔科夫决策过程(
Markov Decision Processes
)构建弹性动作的模型 - 利用模型制定具体的弹性策略
使用马尔科夫决策过程的原因:
MDPs
可以捕捉问题的转移概率和不确定性- 在当前状态下,不确定性是由于可能有几种适用的弹性决策,导致不同未来的系统状态
- 转移概率可以让我们考虑系统的状态演变情况
本文的主要贡献:
- 提出了一种在运行时使用连续在线定量验证来进行弹性决策的方法,并且是基于可扩展的,自动生成的和动态实例化的
MDP
模型 - 提出了模型的变种,并阐述了一些最大化效用函数的弹性策略
- 在不断变化的外部负载下的弹性
NoSQL
集群使用真实的日志进行实验,结果表明,使用基于模型检验的弹性策略可以改进供应不足的情况,同时避免过度供应
文章结构目录:
- 章节二:提出弹性决策的方法,介绍了基本的
MDP
模型和基于其运行时实例化的弹性策略。同时解释了PRISM
如何来实现这一目的 - 章节三:如何将方法融入到现有系统
- 章节四:实验评估
- 章节五:相关工作
- 章节六:工作总结和未来展望
二、基于概率模型检验的弹性
主要目的:
- 使得弹性决策更加可靠
一个弹性策略步骤:
- 根据当前负载和日志信息动态实例化一个模型(根据当前环境描述预期的行为)
- 在线验证模型选择弹性策略
- 进行弹性动作,直到系统稳定;稳定后再进行下一个弹性策略
弹性模型:
- 每一个状态表示不同的集群大小,表示活跃的虚拟机数量
- 有三种操作:
- 增加虚拟机实例
- 减少虚拟机实例
- 不做任何操作
- 奖励值(依据系统的带宽和延时)通过用户定义的效用函数计算
- 每一个新状态有对应的转移概率
- 在求解问题时最大化奖励值
弹性决策:
- 验证的停止条件:
- 根据决策判断(
Bounded By Action
):当选择的弹性策略为no_op
则停止,每个状态的奖励最多计算一次。即时计算奖励 - 根据步骤数(
Bounded By Steps
):达到预先设定的步骤数时则停止。计算的是累计奖励,因此最优解是一系列状态,且是一个转化路径
- 根据决策判断(
- 状态奖励规范和效用函数:
- 每个弹性步骤:
- 实例化一个模型
- 通过日志传入负载 λ \lambda λ 和对应的活跃虚拟机数进行测量
- 然后将结果通过
k-means
算法分类,返回k
个中心点,作为每个状态最有代表性的点。其中每个状态的概率和簇集的大小成正比 - 计算簇集的奖励,选择最优的进行弹性策略
- 每个弹性步骤:
效用函数:
- 惩罚过度供应和供应不足的情况
x
是用户设定的延迟阈值
具体的策略:
- 简单的:
MDP
+BBA
+ 即时计算奖励。如果单个步骤添加或删的虚拟机数量超出了用户定义的范围,则选择与目标状态最接近的状态 - 高级的:
MDP
+BBS
+ 累计计算奖励 + 延迟概率保证。返回具有最大累计奖励的过程,然后再其中选择具有最小的违反延迟概率的过程
三、集成到现有系统
将该弹性决策集成到系统的条件:
- 系统能够收集用于训练和实例化模型的日志
- 能够执行弹性策略
四、实验评估
对以下四个策略进行评估:
RE
:基于规则的弹性策略RL
:基于强化学习的弹性策略SIMPLE
ADVANCED
RL
虽然违反延时的概率最低,但是资源利用率最低RL
虽然资源利用率高,但是却有较高的违反延时概率SIMPLE
和ADVANCED
在两者之间有较好的权衡
VC
(violating cluster
):一个集群专门放违反延时的日志
PRE
:预测模型,对负载进行预测
ADVANCED
变种:
ADV
+VC
ADV
+VC
+PRE
灵敏度分析:
- 决策频率
- 预测精度
总结
- 提出了基于概率模型检验的弹性策略用于调整集群虚拟机的数量
- 将该弹性策略应用到现有系统中
- 结果表明可以显著降低违反延时的概率并获得较高的资源利用率