当前位置: 首页 > 编程日记 > 正文

从Ops到NoOps,阿里文娱智能运维的关键:自动化应用容量管理

作者|  阿里文娱高级开发工程师 金呈

编辑 | 夕颜

来源 | CSDN(ID:CSDNnews)

概述

1. 背景

随着业务形态发展,更多的生产力集中到业务创新,这背后要求研发能力的不断升级。阿里文娱持续倾向用更加高效、稳定、低成本的方式支持快速软件交付,保障高可用。于是运维力从 “HaaS”(Handwork as a Service)到“PaaS”再到“SaaS”(System as a Service),运维生产力从 Ops 到 DevOps 再到 NoOps。

在传统应用容量管理模式下,应用、集群容量评估缺乏有效数据依据与支撑,往往牺牲效率或成本来平衡经验决策风险,另一方面,人肉决策和执行难以满足业务对稳定性和效能的追求。因此,阿里文娱急需一个能够把优酷所有应用的容量管理起来的能力。

2. 目标

整体目标分成 2 个阶段,一是摸清各应用容量水平,二是为所有应用赋予弹性伸缩的能力, 最终直观看到各应用及总体资源使用率的明显提升。

技术挑战与解法

1. 单机性能

既然谈到容量问题,已知的压测方案有链路压测方案、模拟流量压测方案等。为什么还要 自研一套基于单机引流的压测方案来评估应用容量水平?

1)更接近日常真实水平;

2)无人工决策,纯机器决策单机性能瓶颈;

3)全自动,比如配置成发布结束后进行单机性能压测。

 

2. 弹性

弹性指标选择:仅靠集群 CPU 水位弹性确实可以解决绝大多数类型应用,但若基于集群QPS 水位则可更精准的进行弹性伸缩。

1)多维度弹性指标,同时也需要支持自定义指标;

2)多方位弹性方案,使用条件编排策略来达到多个弹性指标之间的协同。

技术方案

1. 全自动单机性能探索

与各接入层对接,自动配置权重完成单机引流,配合性能拐点算法支撑,完成自动识别性 能拐点并终止压测,最后一并记录单机能力值。并允许每天定时压测、发布结束压测来感知每 天、或每次发布给单机性能带来的变化,使用户更亲近自身应用的容量水平。

2. 弹性伸缩

与底层交付系统联动,打造从规划,交付,计费,弹性水平扩展、回收、资源排布调度全 生命态面向业务需求的自驱动统筹调度资源管理系统。一方面,业务资源统一平台构建与维护, 挖掘空闲资源,共享弹性计算力,整体提高部署密度,降低业务单位成本;另一方面,面向不 同应用场景,自动化容量管理,按需分配,保证应用服务可用性,提高容量运维效能。

3. 方案结合

全自动单机性能探索与弹性伸缩的结合框架,如下图:

1)应用接入:无缝接入;

2)单机性能压测自定义配置:无需再定义配置过多配置,默认“智能探索”可以支持大部分 场景;

3)单机引流:从集群中其他机器的流量引流至被压测机器;

4)智能拐点识别:使用时间序列数据趋势转折点提取算法,进行拐点识别;

5)单机性能预测:详见技术细节;

6)基础弹性配置:详见技术细节。

技术细节

1. 单机引流权重优化

1)调整权重就是调整单机流量,且权重越高,单机流量越高;

2)增加自动化调整权重策略方法。权重优化:用于已经识别出拐点,保证下一次压测接近 MAX 权重保持平缓;权重递增:用于未触发拐点,保证下一次压测能引更多的流量。

2. 响应时间拐点识别

使用算法:箱线图。基于 IQR 定制多组 k 的箱线图上限的异常提取,上限=Q3+k*IQR 实现。而效果能够定位到多数拐点,并且一般拐点前的一个时间点的值为单机能力值。

3. 成功率拐点识别

0 错误代表 100%成功率

成功率拐点识别相比响应时间拐点识别更加严格。虽然同样是“基于 IQR 定制多组 k 的箱 线图”实现,但此时 k 必须收紧,因为成功率指标较为敏感,稍有波动就应该终止压测。

4. 拐点提取参考了“时间序列数据趋势转折点提取算法”文章

比如在 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 区间变动。

一般低峰期会处在最低机器数区域,高峰则会处在最高机器数区域,基于外挂单机能力模 型。允许基于 QPS 水位指标进行弹性,可随 QPS 增加而增加机器数,反之则减少机器数。

总结

自动化容量管理与弹性伸缩的深度结合解决了当前容量预估的问题,使得资源能够被合理使用。一方面,用户专注业务层,做基于业务需求的容量规划、交付和维护,革命性改变生产关系,提高研发迭代效率;另一方面,更加细粒度的弹性伸缩,比如小时、分钟的资源的快速流转,资源粒度分解到具体硬件计算垂直伸缩,也是一种更优的解决方案,使得弹性更加迅速能做到秒级能力,进一步压缩集群密度,降低单位成本。


推荐阅读

  • 如何通过深度学习,完成计算机视觉中的所有工作?

  • 看似毫不相干,哲学与机器学习竟有如此大的交集

  • 黑客用上机器学习你慌不慌?这 7 种窃取数据的新手段快来认识一下

  • “谷歌杀手”发明者,科学天才 Wolfram

  • 清晰架构的 Go 微服务: 程序容器

  • 5分钟!就能学会以太坊 JSON API 基础知识

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

JAVA目录树(全功能),Java+ajax实现

我自己要的功能全实现了 一&#xff1a;双击选中项进行编辑 二&#xff1a;右键菜单功能(新增&#xff0c;删除&#xff0c;修改&#xff0c;自定义颜色什么的) 三&#xff1a;选中项进行拖动事件 四&#xff1a;输入项进入搜索(并自动选中结果项) 2011.03.14更新功能 &#xf…

SiteMesh介绍

1. SiteMesh简介 SiteMesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观&#xff0c;如一致的导航条&#xff0c;一致的banner&#xff0c;一致的版权等等。它不仅仅能处理动态的内容&#xff0c;…

商汤提基于贪心超网络的One-Shot NAS,达到最新SOTA | CVPR 2020

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;在CVPR 2020上&#xff0c;商汤移动智能事业群-3DAR-身份认证与视频感知组提出了基于贪心超网络的One-Shot NAS方法&#xff0c;显著提升了超网络直接在大规模数据集上的搜索训练效率&#xff0c;并在…

多样化实现Windows phone 7本地数据访问5——深入Rapid Repository

上一篇多样化实现Windows Phone 7本地数据访问<4>——Rapid Repository 中初步的介绍Repid Repository作为Windows phone 7数据库存储原理Repid具有特点以及数据CRUD基本操作.Rapid Repository 是一个基于WP7开源的数据库. 上周联系Rapid 数据库的作者Sean McAlinden.有…

调试Tomcat源码

需要调试Tomcat源码其实很简单&#xff0c; 1.保持你的Tomcat安装文件和源码是版本一致 http://tomcat.apache.org/download-80.cgi 下载安装版和源码2个版本 2.建立Java自由格式项目 先在IDE里配置好Tomcat&#xff0c;这个不复杂。 然后新建一个项目&#xff0c;这个需要…

开源 免费 java CMS - FreeCMS1.9 全文检索

项目地址&#xff1a;http://code.google.com/p/freecms/ 全文检索 从FreeCMS 1.7開始支持 仅仅有创建过索引的对象才干被lucene类标签查询到。 信息类数据会在信息更新、审核、删除、还原操作时自己主动进行全文检索处理。1. 创建索引 从左側管理菜单点击创建索引进入。 您能够…

Spring Mock单元测试

针对post和get import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.…

tar、gzip、gunzip、bzip2、zip、unzip

tar [参数] 文件或目录名 •参数&#xff1a; -c&#xff1a; 建立新的备份档文件。 -f&#xff1a; 对普通文件进行操作。这个参数通常是必选的。 -r&#xff1a; 向备份档文件追加文件。 -x&#xff1a; 从备份档文件中解出文件。 -t&#xff1a; …

港科大谢丹阳教授问诊未来,预测长远趋势与转折点

阳春三月&#xff0c;万象更新&#xff0c;2020年注定是不平凡的一年&#xff01;有激荡就会遇见变革&#xff0c;有挑战就会迎来机遇。今天总会过去&#xff0c;未来将会怎样&#xff1f;香港科大商学院内地办事处重磅推出全新升级的《袁老师访谈录》全新系列【问诊未来院长系…

数字签名与数字证书

先看一下百度百科对数字签名和数字证书的解释&#xff1a; 数字签名&#xff1a; 将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证&#xff1a;只要改动报文中任何一位&#xff0c;重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不…

Spring源码分析【3】-SpingWebInitializer的加载

SpingWebInitializer的加载 Spring基于注解的配置代码&#xff1a; public class SpingWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[]{RootCon…

PyTorch 1.5发布,与AWS联手推出TorchServe

导读&#xff1a;近日 PyTorch 发布了 1.5 版本的更新&#xff0c;作为越来越受欢迎的机器学习框架&#xff0c;PyTorch 本次也带来了大的功能升级。此外&#xff0c; Facebook 和 AWS 还合作推出了两个重要的 PyTorch 库。作者 | 神经星星来源 | HyperAI超神经&#xff08;ID:…

更改时区,时间

整更改ubuntu时区,时间,localePublished by 笨二十一 at 11:56 上午 under Linux/Unix,服务器更改时区&#xff0c;时间执行tzselect按照提示进行选择时区sudo cp /usr/share/zoneinfo/Asia/ShangHai /etc/localtime执行sudo ntpdate cn.pool.ntp.orgcn.pool.ntp.org是位于中国…

throttle与debounce的区别

前几天看到一篇文章&#xff0c;我的公众号里也分享了《一次发现underscore源码bug的经历以及对学术界拿来主义的思考》具体文章详见&#xff0c;微信公众号&#xff1a;文中讲了大家对throttle和debounce存在误解&#xff0c;同时提到了《高程3》中实现节流方法存在一些问题&a…

Spring源码分析【0】-框架的基础:继承和接口调用链

Spring源码大量的使用继承和接口调用&#xff0c;现举个例子&#xff0c;不搞清楚这个无法看代码。 public class A extends B{public void f1() {System.out.println("f1 in a");} }public abstract class B extends C {protected abstract void f1();protected Str…

华人计算机视觉科学家黄煦涛逝世,众多AI大牛发文缅怀

当地时间2020年4月25日&#xff0c;华人计算机科学家黄煦涛教授在美国印第安纳州逝世&#xff0c;享年84岁。黄煦涛教授主要从事教学与图像处理、模式识别、计算机视觉和人机交互等方面的研究工作&#xff0c;一生出版了 14 本书&#xff0c;发表了 400 多篇学术论文。在学术研…

七年之痒,再见理想

不确定“再见理想”是“再见了&#xff0c;理想”还是“再次燃起理想”&#xff0c;稀里糊涂地对这句话有感觉。作为程序员&#xff0c;总会有自己的技术价值观和技术理想。工作七年多&#xff0c;开始痒了。 程序员的生活总是喜忧参半&#xff0c;出入体面的写字楼&#xff0c…

HTML5学习笔记二 HTML基础

一、HTML 标题 HTML 标题&#xff08;Heading&#xff09;是通过<h1> - <h6> 标签来定义的. <h1>标题一</h1> <h2>标题二</h2> <h3>标题三</h3> 二、HTML 段落 HTML 段落是通过标签 <p> 来定义的. <p>亲吻你的手还…

程序员感叹一年只能存下15万太少了……网友:潸然泪下

最近有程序员网友晒出自己的年终奖&#xff0c;税后高达15.7万&#xff01;看到这个情形&#xff0c;很多网友表示自己“被打鸡血了”。他强调学习的重要性&#xff0c;学习仍然是在这个时代下&#xff0c;普通人能够逆袭&#xff0c;给家人更好生活的一把利器&#xff01;今天…

Spring源码分析【2】-Tomcat和Sping的连接点

Tomcat是怎么调用上Spring的呢&#xff1f;需要找到这个连接点。 答案就在org.apache.catalina.startup.ContextConfig的processServletContainerInitializers方法 new WebappServiceLoader() 回到processServletContainerInitializers 进入org.apache.catalina.startup.Weba…

优化数据库的方法及SQL语句优化的原则

优化数据库的方法&#xff1a; 1、关键字段建立索引。 2、使用存储过程&#xff0c;它使SQL变得更加灵活和高效。 3、备份数据库和清除垃圾数据。 4、SQL语句语法的优化。&#xff08;可以用Sybase的SQL Expert&#xff0c;可惜我没找到unexpired的序列号&#xff09; 5、清理删…

各大浏览器 CSS3 和 HTML5 兼容速查表

2019独角兽企业重金招聘Python工程师标准>>> 不知不觉中&#xff0c;支持 CSS3 和 HTML5 的浏览器变得越来越多&#xff0c;甚至包括最新版的 IE&#xff0c;当然&#xff0c;所谓支持仅仅是部分支持&#xff0c;因为 CSS3 和 HTML5 的W3C 规范都尚未形成。如果你现…

Spring源码分析【1】-Tomcat的初始化

org.apache.catalina.startup.ContextConfig.configureStart() org.apache.catalina.startup.ContextConfig.webConfig() 进入org.apache.catalina.startup.ContextConfig.processServletContainerInitializers processServletContainerInitializers参考&#xff1a;Spring源…

360金融首席科学家张家兴:只靠AI Lab做不好AI中台 | 独家专访

「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分。通过对 AI 生态顶级大咖、创业者、行业 KOL 的访谈&#xff0c;反映其对于行业的思考、未来趋势判断、技术实践&#xff0c;以及成长经历。 本文为 「AI 技术生态论」系列访谈第21期&#xff0…

Delphi 正则表达式语法(3): 匹配范围

// [A-Z]: 匹配所有大写字母var reg: TPerlRegEx; begin reg : TPerlRegEx.Create(nil); reg.Subject : CodeGear Delphi 2007 for Win32; reg.RegEx : [A-Z]; reg.Replacement : ◆; reg.ReplaceAll; ShowMessage(reg.Subject); //返回: ◆ode◆ear ◆elphi 200…

基础算法整理(1)——递归与递推

程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&…

php正则表达式函数 preg_replace用法

preg_replace (PHP 3> 3.0.9, PHP 4 ) preg_replace -- 执行正则表达式的搜索和替换说明 mixedpreg_replace( mixed pattern, mixed replacement, mixed subject [, int limit])在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit&#xff0c;则…

面试官吐槽:“Python程序员就是不行!”网友:我能把你面哭!

最近几年&#xff0c;Python莫名火了起来&#xff0c;很多公司都想赶上这“莫名”的热潮&#xff0c;招聘到大牛人才。但是&#xff0c;最近一个HR在社交网站的吐槽又火了&#xff1a;那么问题来了&#xff0c;市面上为什么鲜有企业满意的优秀的Python程序员&#xff1f;企业到…

Spring源码分析【5】-Spring MVC处理流程

org.apache.catalina.core.ApplicationFilterChain.doFilter 获取Filter org.apache.catalina.core.ApplicationFilterChain.internalDoFilter org.springframework.web.filter.DelegatingFilterProxy.doFilter invokeDelegate org.springframework.security.web.FilterCha…

Mysql——外键

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff0c;外键 外键&#xff1a;foreign key&#xff0c;&#xff08;外边的键&#xff0c;键不在本表中&#xff09;&#xff1a;如果一张表中有一个字段&#xff08;非主键&#xff09;指向另一张表的主键&#x…