女主宣言
上一期我们分享了《大规模分布式系统资源管理(一) 》,介绍了云游戏中的资源管理;
本期将继续介绍搜索引擎中的资源管理和AI 在资源管理中的应用。
前期回顾
- 云游戏:Server 端运行游戏,并将压缩的视频传给 Client;Client 只负责解压、显示视频。
- 云游戏的挑战:延时、带宽、成本
- 研究目标:优化成本、请求调度如何调度游戏请求,使得总的 server 运行时间最少。
- 研究工作经典算法:Any Fit、First Fit、Best Fit新算法:基于请求结束时间预测的调度算法
问题延伸:游戏部署开销
- 搜索引擎中的资源管理
- AI 在资源管理中的应用
搜索引擎中的资源管理
实例分布调整
问题描述
1、IDC 中有多种 service,每个 service 有很多实例
2、对已有实例的分布进行调整,达到负载均衡
3、约束条件
- Resource Constraints (CPU, Memory, SSD)这个约束条件是关于资源的条件。调整过程中还有调整结束之前,都不能违反容量的限制。不能调整之后每台服务器加起来的容量超过了服务器的容量。
- Conflict Constraints为了容错或者备份等,有一些实例是不可以放在同一台服务器上的。比如来自同一个service的实例。
- No Service Interruption (Online)调整过程中是不能影响线上服务的。这是一个比较苛刻的条件。
挑战
大规模调整复杂度高、小规模调整效果差
如果用数学来描述的话其实这是一个带约束条件的整数规划问题。这个问题的变量非常多,如果用数学传统的解方程的方法解出来的话是不太可能的。
线上调整对安全性、可靠性有极高要求
不光不能影响正常的服务,也不能带来任何的风险。调整的过程中不能使服务器超过安全线等有非常多的限制。
调整过程约束条件多
如果想把一个实例从一台服务器挪到另一台服务器上,在这个实例在新的服务器上能正常工作之前,旧的实例是不能删除的。所以这个实例在这段时间其实在新的服务器和旧的服务器上占了2份资源。而这段时间正好是调整的过程。所以说这个资源并没有被释放掉。
调整算法
局部搜索
局部搜索有几种搜索的策略。
1、Shift: 移动一个实例到另一台 server
如果移动完之后,负载变得更均衡了,那么这个方法就是可行的。
2、Swap: 交换位于不同 server 上的两个实例
如果负载变均衡了,那么这个操作是可接受的。
3、BigMove:移动实例到一台 server, 同时移走 server 上若干实例
开始时有三台服务器,数字表示它的CPU所占用的比例。每台服务器的容量如果是100的话,左边的是60,中间的是100,右边的是50。那么我们通过BigMove移动之后,先把右边 的50移动到左边这台机器上,再把20挪到右边的机器上,30挪到中间的机器上,整个的balance就会好很多。
刚刚讲的Transient Constraint在移动过程中有可能会超过容量的限制,那怎么办呢?有可能移动是有顺序的。比如想移动50过来,如果20不挪出去的话它是进不来的,那么这会分为两轮算法。
整个算法的描述是这样的。
以server为单位多轮迭代,直到所有server变为不可调状态
(1) 每次迭代选取当前cpu使用率最高的server进行调整
(2) 依次对server上的每一个实例进行如下操作:
(a) 依次尝试shift, swap和BigMove调整
(b) 如果上述任意一个尝试成功,本次迭代结束,跳至步骤(1)
(c) 如果全部尝试失败,标记此实例为失败
(3) 如果server上所有的实例都失败,标记此server为不可调(以后不参与调
整),结束本次迭代,跳至步骤(1)
调整效果
CPU-Idle=1-CPU的利用率
即调整前,前1%的服务器的CPU利用率是1-27%=73%,整个系统CPU的平均值是53%,可见前1%的服务器还是比较高的。经过局部搜索算法调整之后可以降到46%,非常接近50%,所以这个算法是很有效的。
副本策略
实例副本
每个 service 通常有多个实例副本,以满足大量并发请求
一个 service 有多个实例,共同分发流量,目前每个实例的流量,据了解目前比较简单的流量的调度算法,通常是平均分配在这些实例上的。如果一个service有很多实例,实例是一样的,都是完成同一个服务的,那么通常流量是均匀分布的。这有利于做负载均衡。
B: 总 CPU 需求 4.0(即需要4个机器), 单实例内存需求 0.5
现在需要决定给A和B各自几个副本。
上图有3个策略。
左边的S1:给A 10个副本,B 5个副本,则A的每个单个实例CPU的需求是0.6,每个内存是0.5,所以一台机器只能放一个实例。所以A需要10个服务器,B需要5个服务器,一共需要15个服务器。
中间S2:给A 30个实例,单实例的CPU下降为0.2,则有10个A的实例可以和B的放在一起。这个策略一共占了30个服务器。
右边S3:给A和B各10个实例。那么A和B正好可以放在一台服务器上,需要10台服务器就可以了。
所以副本个数对最后所用机器容量有很大的影响。
目标
寻找合理的副本策略,使得所用资源最少
算法
1、全局搜索
时间复杂度高、结果较优—不太适合在动态过程中应用,只适合机房初始建时
2、最少副本策略
副本最少、单实例较大,不利于调整
3、固定资源占比策略
异构场景不友好
4、Online 调整策略
效果
每台 server 同时只能运行几个游戏
如果用户比较多的话,那么运营商就要提供很多的服务器。服务器的成本很高,包括它的运营成本维护成本等。云游戏收用户的钱可能还抵不过服务器的钱或者网络的钱。所以成本一直是云游戏里一个很大的挑战。
AI 在资源管理中的应用
磁盘故障预测
目标
利用硬盘S.M.A.R.T.信息,预测硬盘故障,实现主动容错。
数据集
特征选择
方法
- 十分位分布 (quantile distributions)
- 秩和检验 (rank-sum test)
- 标准分 (z-score)
- 反向安排检验 (reverse arrangement test)
属性
- “W”数据集:选取10个基本属性+3个差值属性
- “S”,“M”数据集:选取7个基本属性+3个差值属性
已有成果
一、评价标准转变
二分类 → 剩余寿命 → 迁移率/误迁移率
二、实验结果
1.二分类——预测硬盘是否将要发生故障
2.剩余寿命预测——抓住问题的时序特征
CBN模型:剩余寿命区间预测准确率达到60%
RNN模型:剩余寿命区间预测准确率达到40%~60%
3.迁移率和误迁移率——针对分布式存储系统的评价指标
直接反映预测模型对危险数据的保护效果
三、引入到分布式存储系统中+预警处理机制
负载预测
问题描述
对大型数据中心负载预测最终目的:提供高效资源管理系统。
在硬件故障预测的基础上发展到分布式系统软件应用的层面对负载进行一些预测。主要以大型数据中心的sever上的CPU,硬盘的占用率体现出对业务的请求引起的变化来进行一些预测。相应的我们构造一些机器学习的模型来预测一段时间内sever上是否发生异常事件。
方法:
利用机器学习来预测工作负载
基于预测结果考虑改善资源管理的策略
开展工作
数据集:来自百度的面向数据库服务的数据中心。
5466台host, 67天,每隔10min的负载记录
(CPU,MEM,DISK)。
模型: ARIMA, LR, SVM, NB, DT, RF。
DDoS 攻击检测
问题定义
目标
寻找合理的高检测率、 低误报率的识别策略
挑战
1.攻击流与正常流相似度高
2.伪造攻击源
3.攻击种类繁多
4.实时检测开销大
研究工作
1.K-Nearest Neighbor
2.Support Vector Machine
3.Decision Tree
4.Random Forest
2.Pearson Correlation Coefficient
研究成果
随机源攻击
固定源攻击
总结
这两期文章我们从云游戏中的资源管理、搜索引擎中的资源管理、AI 在资源管理中的应用三个方面介绍了大规模分布式系统资源管理。
希望对大家有所帮助~
原文来自微信公众号:HULK一线技术杂谈
本文链接:http://www.yunweipai.com/25257.html