弹性调度的基本模式

 
   

方舟的弹性调度希望提供给用户的不只是一种弹性操作集群资源的能力,而是要对所有用户的成本和稳定性优化这件事负责。由于目标应用在各方面差异性很大,所涉及的配置项数以千计并且一直处于动态变化状态,全靠人工进行配置管理非常不现实。

由此,方舟弹性调度提出了一种闭环反馈式的模式(如上图所示)。弹性调度基础能力基于应用分组运行情况和不同应用分组的策略配置参数,做出扩缩容决策,并通过方舟的容器操作服务调整集群容器数量;应用分组集群受到集群容器数量变化的影响,会产生不同的表现行为(例如扩容时集群平均CPU使用率会发生变化,服务rt会在一定范围内下降等);应用分组的表现在以实时数据提供给弹性决策的同时,也会进行历史数据的离线存储(Alimonitor/EagleEye等集团标准监控系统都提供了这样的数据服务);自动策略配置会周期性获取这些历史数据,并依照一定的算法,对不同的应用分组进行不同的策略配置,从而再次影响到弹性调度策略的决策。

这种模式的优越性在于:

1.具备一定程度的自我进化能力。当应用分组刚刚接入弹性时,其大多数的策略参数都为默认值;而当弹性运行一段时间后,结合自动评估方式,各种参数会得到不断的修正以达到更好的弹性效果。以服务安全策略为例:服务安全策略在实时决策阶段概括起来就是对当前服务rt于服务的sla阈值进行比较,刚刚接入弹性时,服务的sla是基于服务接入弹性前的历史rt来得到的,一般来说非弹性状态下服务rt的表现,与弹性状态下服务rt的表现是有很大的区别的,可能一开始由于服务sla设置得不合理(一般来说是过小),会出现“多扩”的现象,由服务rt违反sla引起的扩容会占到整体扩容原因的大多数。这种现象会被每天定时执行的分析任务捕捉到,判断出sla设置得不合理,结合最近几天的运行状态,重新计算服务sla,由此提高阈值设置的合理性;

 
   

2.以更高的抽象层次来进行海量参数的配置,以解决普遍问题。还是以服务rt的sla阈值为例,当我们把配置视角关注到一个具体服务时,我们可能会纠结于一个服务它所对应的具体业务逻辑是什么、它涉及的调用链路是什么、上游服务对它的容忍性等等细节问题,那么这样一来,面对菜鸟不同应用提供的成千上万个服务,逐一配置根本不可能做到(注:每天都会服务会上线和下线,服务的业务逻辑也可能发生变化,配置是需要进行经常性更新的,这无疑使人工配置更加变得不现实)。而自动策略配置逻辑以更高的抽象层次来看待各项参数,对于服务rt,基于一个普遍适用的假设:“服务rt在一天当中的绝大多数时间都是处于合理状态”,并且通过概率分布计算(服务rt真正的分布情况也可以通过历史数据统计得到),可以得到一个数学意义上的sla阈值(以正态分布为例,求得一段时间内服务的平均rt和rt分布标准差,即能得到在不同概率下应该设置的阈值)。

如上图的正态分布曲线,我们如果把阈值定为平均rt + 2个标准差,那么依照概率粗略计算,我们假设一天当中有将近33分钟服务处于rt过高状态(1440分钟 * (1 - 0.9544)/ 2),由此就得到了一个数学上合理的阈值(这部分逻辑只是服务安全策略逻辑的一小部分,具体在后文介绍该策略时具体说明)。这样一来,对于各式各样的服务,只要能获取到它的历史监控数据,就能自动、快速地得到这个数学上的阈值。

 
   

弹性调度的架构体系

方舟弹性调度的三层决策:

1.第一层是策略决策,策略决策层由多个不同的策略组成,并且支持快速扩展。策略之间逻辑完全隔离,每个策略计算完成后都会独立输出动作(扩容、缩容、不变)和数量。为了能够适应不同应用之间的异构,每个应用分组也可以根据实际情况启动或关闭不同的策略。

2.第二层是聚合决策,聚合决策收集第一层所有策略的决策结果,并依据聚合规则得到一个合并后的<动作,数量>组。这一层的规则十分简单:当同时存在扩容和缩容决策结果时,以扩容为准,忽视缩容结果;当存在多个扩容结果时,以扩容数量最多的结果作为最终结果;当存在多个缩容结果时,以缩容数量少的结果作为最终结果。

3.第三层是执行决策,这部分决策主要会考虑到一些规则,最终告诉扩缩容服务:要不要扩缩,要扩缩多少个容器,如果是缩容那么要缩容哪几个具体容器,如果是扩容那么具体的容器规格、扩容到的机房等。

转载于:https://www.cnblogs.com/ssyh/p/11048058.html

菜鸟弹性调度系统的架构设计——阅读心得相关推荐

  1. 阅读心得6:《首次公开!菜鸟弹性调度系统的架构设计》

    本周阅读了老师推荐阅读的公众号:架构师中的推文<首次公开!菜鸟弹性调度系统的架构设计>,感想如下: 菜鸟裹裹是一款提供查快递.寄快递的应用软件,主要适用于全网包裹查询,支持淘宝.天猫.京东 ...

  2. 首次公开!菜鸟弹性调度系统的架构设计

    阿里妹导读:菜鸟方舟(ark)是面向菜鸟所有研发的资源管理和运维平台,负责对菜鸟的基础设施资源进行管控,以支撑日常和大促的资源需求.弹性调度是菜鸟方舟的一个重要组成部分,也是方舟的一个重要的功能特性. ...

  3. 承载每天10万级任务的数据调度系统的架构是如何设计的

    消息:分布式工作流任务调度系统Apache DolphinScheduler开源地址:https://github.com/apache/incubator-dolphinscheduler , 欢迎 ...

  4. 新浪微博:大规模离线视频处理系统的架构设计

    微博视频平台在4亿月活用户吃瓜嗨聊的高并发.大流量背景下,既要保证用户微博生产和消费体验,又要支持业务快速迭代,确保正确性.稳定性和高可用性.本次演将以微博视频大规模视频离线处理系统的架构设计为主题为 ...

  5. 一个小型的网页抓取系统的架构设计

    一个小型的网页抓取系统的架构设计 网页抓取服务是互联网中的经常使用服务.在搜索引擎中spider(网页抓取爬虫)是必需的核心服务.搜索引擎的衡量指标"多.快.准.新"四个指标中,多 ...

  6. 报告论文:汽车GPS调度系统车载终端设计技术方案

    汽车GPS调度系统车载终端设计技术方案 背景: 随着科技的发展,GPS民用化的趋势越来越让人期待.因为芯片小型化技术的日趋成熟,使得GPS芯片组在缩小体积或是降低耗电量等方面都有很大的突破. 这样,高 ...

  7. ADAS系统安全架构设计及安全等级的分解

    已剪辑自: https://mp.weixin.qq.com/s/PaFQDUR_iOnEeueYQ82m_w 笔者从事功能安全领域工作八年有余,结合个人经验分享一下对系统安全架构设计的理解,希望能够 ...

  8. IP对讲服务器源码,IP广播对讲融合调度系统高可用设计

    原标题:IP广播对讲融合调度系统高可用设计 云翌IP广播对讲系统基于NGN架构,使用国际标准SIP协议,具有极好的兼容性和功能可扩展性.可实现"语音广播+对讲+多媒体控制台"整体解 ...

  9. Java生鲜电商平台-促销系统的架构设计与源码解析

    Java生鲜电商平台-促销系统的架构设计与源码解析 说明:本文重点讲解现在流行的促销方案以及源码解析,让大家对促销,纳新有一个深入的了解与学习过程. 促销系统是电商系统另外一个比较大,也是比较复杂的系 ...

最新文章

  1. Kali国内源更新sources.list
  2. 8.2.5: Spring3.0新增的@DependsOn和@Lazy
  3. 【云原生AI】Fluid + JindoFS 助力微博海量小文件模型训练速度提升 18 倍
  4. SpringCloud(1) 架构演进和基础知识简介
  5. 【SDK接入篇】【1】Unity的internal 与 gradle打包
  6. 使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
  7. 使用page-slot显示SAP Spartacus section里包含的Component和layout设计
  8. 艾宾浩斯记忆表格excel_考研干货 | 如何使用艾宾浩斯曲线帮助记忆知识
  9. leetcode组队学习——查找(一)
  10. 华为防火墙产品介绍和工作原理介绍
  11. 解决Eclipse开发工具Debug调试JDK源码无法查看变量值
  12. 《企业IT架构转型之道》边读边想——平台稳定性能力
  13. CAN 通信协议文档集锦
  14. 最小二乘法曲线拟合公式推导与代码实现
  15. yum -y --downloadonly --downloaddir=/root/ruiy update
  16. OpenGL 实现视频编辑中的转场效果
  17. 后台接收前台传来的图片并保存在本地
  18. OFFICE中的VBA库的定义
  19. Windows10安装Markdown安装教程(超级详细)
  20. 如何基于ARMS快速实现一个基于Nginx的网站监控场景 – 操作篇

热门文章

  1. 在SAP CRM呼叫中心的搜索结果点击Edit按钮后的处理逻辑
  2. proxy in nodejs code
  3. 使用ABAP和JavaScript代码生成PDF文件的几种方式
  4. mysql main函数_关于main()函数的小技巧
  5. excel同一单元格怎么换行_Excel工作表中最经典的10个应用,小技巧,大作用
  6. python实现oa系统_技术讨论 | 利用Python程序实现某OA系统的自动定位
  7. html列表小写字母,python实现大小写字母转换
  8. python中name没有定义_python中__name__的使用
  9. 插入区间Python解法
  10. java web 获取根目录_javaweb中获取服务器端跟目录方法总结