#Java虚拟机#从 Ops 到 NoOps,阿里文娱智能运维的关键:自动化应用容量管理( 二 )


2)增加自动化调整权重策略方法 。 权重优化:用于已经识别出拐点 , 保证下一次压测接近 MAX 权重保持平缓;权重递增:用于未触发拐点 , 保证下一次压测能引更多的流量 。
2. 响应时间拐点识别
#Java虚拟机#从 Ops 到 NoOps,阿里文娱智能运维的关键:自动化应用容量管理
本文插图

使用算法:箱线图 。 基于 IQR 定制多组 k 的箱线图上限的异常提取 , 上限=Q3+k*IQR 实现 。 而效果能够定位到多数拐点 , 并且一般拐点前的一个时间点的值为单机能力值 。
3. 成功率拐点识别0 错误代表 100%成功率
#Java虚拟机#从 Ops 到 NoOps,阿里文娱智能运维的关键:自动化应用容量管理
本文插图

成功率拐点识别相比响应时间拐点识别更加严格 。 虽然同样是“基于 IQR 定制多组 k 的箱 线图”实现 , 但此时 k 必须收紧 , 因为成功率指标较为敏感 , 稍有波动就应该终止压测 。
4. 拐点提取参考了“时间序列数据趋势转折点提取算法”文章
#Java虚拟机#从 Ops 到 NoOps,阿里文娱智能运维的关键:自动化应用容量管理
本文插图

比如在 3 个连续点 Xi、Xi+1、Xi+2 的判定上 , 它们的发展趋势共有 9 种情况:当 Xi+2-Xi>0 ,即图 a , b , e 这 3 种情况属于总体趋势上升 , 当 Xi+2-Xi<0 , 即图 f , g , i 这 3 种情况属于总体 趋势下降 , 当 Xi+2-Xi=0 , 即图 c , d , h 这 3 种情况属于总体保持不变 。
而我们通过“基于 IQR 定制多组 k 的箱线图”可以识别出上升和下降 2 种拐点 , 分别对应 不同的场景 , 如响应时间拐点识别(上升拐点识别) , 成功率拐点识别(下降拐点识别) , 而 k 的定义方式也参考近期数据 。
比如某个应用日常响应时间稳定在 100-200ms 和某个应用日常响应时间稳定在 2-3ms 的 k值是不一样的 , 不合适的 k 用在 2-3ms 的这种数据上会导致异常识别较为频繁及不准确 。
5. 单机性能预测方案单机性能与什么有关 , 系统指标?如果是 JAVA 应用还和 JVM 相关指标有关?而应用本身 有会有各种池的限制 , 如 JVM 相关池、TOMCAT 相关池、DB 相关池、Redis 相关池、队列相 关池等 , 这些都可以作为预测单机性能的特征 。 先基于 PCA 抽象出 N 个特征 , 也称降维 , 可 将两两线性相关的因素进行整合或排出 , 降维后建立线性回归模型 , 而拟合度较高的模型将予 以采纳并进行预测 。 同时预测参数也需要实事求是 , 比如日常 CPU 区间为 2-60% , 那预测参数 可以为 80% , 此时若超过 100%那将毫无意义 。
6. 流量驱动弹性方案基于 CPU 指标的弹性伸缩:比如 CPU 超过 60%则执行弹性扩容 , CPU 低于 20%则执行弹 性缩容 。 扩容与缩容允许按机器数比例进行伸缩:如按 5%的机器数进行弹性扩容 。 定义弹性区 间:如 10-20 , 机器数会在 10-20 区间变动 。
【#Java虚拟机#从 Ops 到 NoOps,阿里文娱智能运维的关键:自动化应用容量管理】一般低峰期会处在最低机器数区域 , 高峰则会处在最高机器数区域 , 基于外挂单机能力模 型 。 允许基于 QPS 水位指标进行弹性 , 可随 QPS 增加而增加机器数 , 反之则减少机器数 。
总结 自动化容量管理与弹性伸缩的深度结合解决了当前容量预估的问题 , 使得资源能够被合理使用 。 一方面 , 用户专注业务层 , 做基于业务需求的容量规划、交付和维护 , 革命性改变生产关系 , 提高研发迭代效率;另一方面 , 更加细粒度的弹性伸缩 , 比如小时、分钟的资源的快速流转 , 资源粒度分解到具体硬件计算垂直伸缩 , 也是一种更优的解决方案 , 使得弹性更加迅速能做到秒级能力 , 进一步压缩集群密度 , 降低单位成本 。
#Java虚拟机#从 Ops 到 NoOps,阿里文娱智能运维的关键:自动化应用容量管理


推荐阅读