nsga2算法_用遗传算法进行容量管理 让虚拟机放置策略更优

06968eb6fc5604c51d40cfc8969bd6d0.gif

6b476ba03380f14659201396bc8205d7.png

随着互联网技术的高速发展,云计算已经成为各行各业的“水电煤”,成为“互联网+”的基础设施,而数据中心则是云服务背后的刚性保障。无论是传统的数据中心,还是云形态的数据中心,虚拟化技术都是提升其资源利用率、降低管理成本的重要方式。

据统计,早在2016年,AWS的服务器规模已经到达55万台,而虚拟机数量则超过了800万。随着虚拟机数量急剧增加,虚拟机的放置方案自然成为了决定数据中心资源利用率及其他需求的关键。

如果想提高数据中心的资源利用率,就需要采用合适的放置方案,使用最少的物理机便可以实现资源利用率的最优化,并起到节能的效果。而为了维持系统的高可用性,也需要选择合适的放置方案,使得不同服务器之间的资源使用率尽量均衡。

许多研究将虚拟机放置描述为“多维装箱”问题,装入的物品为虚拟机,其使用的资源为物品大小;而箱子则是物理机,箱子容量是物理机配置阈值,资源可包括CPU、内存、磁盘、网络带宽等,资源的种类数即为装箱问题的维度。

假设物理机数量为M,虚拟机数量为N,则理论上最多有M的N次方种部署方案,为NP-hard问题。在解决NP-hard问题的方法中,启发式算法如遗传算法、模拟退火算法等都有优秀的表现。在此我们介绍经典的遗传算法在解决该问题中的思路与具体落地方案。

1f65ccd4799959cb93b9477ba0cf62fd.png

遗传算法是一种全局优化搜索算法,以其简单通用、鲁棒性强、适于并行处理,以及高效和实用等显著特点,在各个领域得到了广泛应用。

遗传算法以一种群体中的所有个体为对象,并利用随机化技术对一个被编码的参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的遗传操作;编码、初始群体设定、适应度函数设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。那么,对于”虚拟机放置在物理机上”这个问题,怎么去理解遗传算法的五个要素呢?

1f6b1279629d16ec514bcd40353cd63a.png

通过以下概念的释义,我们将现实世界中的虚拟机、物理机、虚拟机放置方案,评价当前方案的指标等问题,并映射到“遗传算法”过程中的专有名词,进而通过遗传算法进行求解:

  1. 染色体:一条染色体代表一种“当前虚拟机序列的放置方案”,也被称为种群中的个体;

  2. 评估染色体方式:不同的放置方案有着不同的适应值,而适应值决定了当前方案的优劣;通常采用物理机使用数量来评估染色体,同时考虑高可用限制、虚拟机数量限制等因素,这种面向多目标的问题可以使用“快速非支配排序”结合“局部拥挤距离”算法进行求解;

  3. 遗传组合行为(交叉、变异):改变染色体上的部分虚拟机的放置序列的行为;

  4. 种群:由多个染色体组成,代表当前进化次数下的染色体集合(多种放置方案的集合);

在将现实实体及问题映射到遗传算法的专有名词后,我们将演示如何把遗传算法的五个要素映射到现实问题中:

编码

8d30f996ed54a276e75e79ba6b50d86d.png

如上图所示,将每个“全量虚拟机序列在物理机序列上的放置方案”作为一条染色体,这是典型的进行“组编码”的方式,可以看到由于采用了不同物理机,两条染色体最终使用的物理机数量也是不同的。

初始群体设定

基于启发式的初始化群体方法可以降低算法优化过程的复杂度,但同时要保证群中染色体的多样性,这样是为了扩大搜索解空间,从而求解近似于全局最优解而非局部最优解;

在启发式算法中,第一个虚拟机放入第一个物理机,然后根据虚拟机序列顺序,依次放入其他虚拟机,直到第一个物理机资源不足。该过程可理解为:对于任意一台虚拟机,需先遍历当前已使用的物理机序列,直到被使用的物理机无法满足该资源需求。此时新开辟一台物理机为其使用——这是生成一条染色体的方式,同时为了保证种群的多样性,在每次生成新染色体时,我们需要随机打乱虚拟机序列的顺序,这种方法显然是简单而有效的。

适应度函数的设计

适应度是对当前种群中个体的评价方式,对于多目标优化问题一般可采用二代多目标优化算法NSGA2中的快速非支配排序进行个体等级划分,然后通过局部密度算法进行密度估计,确定每个个体的优先级。

这个过程听起来很抽象,它的具体操作是怎样进行的呢? 如下图所示:若Costf1 和 Cost f2 分别表示个体在“使用物理机数量”、“整体高可用性”上的度量,且取值越大代表该方案在该维度上越优秀,则对于个体集合{1,2,3,4}来说,每个元素都至少存在另外一个在各方面比自身优秀的个体,如对于个体4来说,个体5在“使用物理机数量”、“整体高可用性”上的维度上都优于个体4,此时我们说“个体5是支配个体4的”;而对于集合{5,6,7}来说,因为不存在支配他们的个体,所以他们被称为“非支配解”;这种“非支配解”的适应度在理论上应该是最高的。

f11113e3ec8ddb4570eb85f2a8652e0f.png

遗传操作设计

遗传算法中的核心操作便是“选择”、“基因交叉”、“基因变异”,这三个操作决定了种群的进化方向,是让算法朝着我们的目标不断优化的基础。

“选择”(Selection):采用2-约束竞赛选择法,在该方法中,从当前种群中随机挑选两个个体,然后将适应值最大的个体作为父个体,不断重复该操作,直到个体数量达到预定的种群规模,选出的父个体作为下一代种群.两个个体的比较方法采用NSGA2引入的拥挤比较算子。

“交叉”(Crossover):挑选两个“选择”过程中被选定的父个体作为交叉对象A、B,随机选择A中的物理机a,将该物理机a放入B中,同时将B个体中包含a的虚拟机序列的原物理机从B中删除,同时记录被删除的虚拟机再次放置到B上。该操作实现了某台物理机的虚拟机序列重分配,且因为物理机的挑选是随机的,确保了“交叉”的多样性;

17e10cc380762544c337fe1a8c1f47fe.png

“变异”(Mutation):“变异”的操作相对简单,且具有易懂的解释性:从父个体中随机挑选一个染色体A,然后从个体A上随机挑选一个物理机a,将其删除,并将原来a上的虚拟机序列重新插入到A中——这样的目的是为了减少物理机的使用,但由于物理机a是随机挑选的,其并不能保证每次变异的方向都是对的,因此我们可以降低“变异”操作发生的概率,而且这也正体现出了正确的“选择”的重要性。

控制参数设定

参数设定主要是指在遗传操作中各操作的发生概率,如:我们可以设定“交叉”操作的发生概率为0.6,“变异”操作的发生概率为0.05;有效的参数设定可以控制种群更快、更好的给出近似最优解。

通过实现以上五个要素,我们便可以根据遗传算法的固定步骤,进行虚拟机放置问题的求解了。

7e4df1e5d8531693ee62be29c4526c17.png

一般来说,跳出算法迭代的条件有两个:一是当前最优染色体的适应值已满足目标设定值,二是达到指定的迭代次数。通过人为经验选择合理的遗传操作策略,我们便可以快速得到我们目标方案。

87129748d6e997b57fa11942d54a2300.png

7a4139a468a2d41a9374eb8cc529ea7c.png

用AIOps更有效地进行微服务排障

青铜到王者晋级之战 夏洛克AIOps从容应对千百万级别的告警风暴

Gartner中国ICT成熟度曲线发布 擎创成AIOps领域重点推荐服务商

a7c69476b462dc8f2ae5854362a07313.png

擎创科技简介

擎创科技,成立于2016年,是国内首家智能运维 AIOps落地解决方案的供应商。公司专注于将人工智能赋能运维管理,发掘运维数据的潜在价值,推动企业数字化转型。公司的核心产品夏洛克AIOps,能够结合客户的实际需求,通过人工智能和大数据等技术,实现指标异常检测和趋势预测、故障根因界定和定位、日志智能聚类等智能化分析功能。产品已在中国银联、交通银行、太平洋保险、方正证券、东方航空集团等行业标杆企业落地,覆盖银行、保险、证券、制造及交通等多个行业。擎创科技总部位于上海,并在北京和深圳成立了办事处。ebf41e567f301d85e33bc4e8f585af31.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php预处理_如何用预处理让 PHP 更先进

原标题:如何用预处理让 PHP 更先进先来点趣事。不久以前, 来添加 Python 的 range 语法。然后, 大虾 ,并且 建议为 PHP 添加 C# 风格的 getter 和 setter。我意识到对于一个局外人来说,建议和实现新的语言特性是件缓慢…

天池 在线编程 两句话中的不常见单词(哈希计数)

文章目录1. 题目2. 解题1. 题目 给定两个句子 A 和 B 。 (句子是一串由空格分隔的单词。每个单词仅由小写字母组成。) 如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。 返回所有…

iphone屏幕上的圆圈怎么设置_iPhone手机屏幕突然变暗或者黑屏怎么办?看这里你就知道该怎么办...

阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以继续免费收到各种有关娱乐的文章了。每天都有分享,完全是免费订阅,请放心关注。 …

C语言库函数大全及应用实例六

C语言库函数大全及应用实例六 原文:C语言库函数大全及应用实例六[编程资料]C语言库函数大全及应用实例六函数名: getlinesettings 功 能: 取当前线型、模式和宽度 用 法: void far getlinesettings(struct linesettingstype far *lininfo): 程序例: <?xml:namespace prefix…

python开发自己的工具包_爬虫开发python工具包介绍 (4)

本文来自网易云社区作者&#xff1a;王涛此处我们给出几个常用的代码例子&#xff0c;包括get,post(json,表单),带证书访问&#xff1a;Get 请求gen.coroutinedef fetch_url():try:c CurlAsyncHTTPClient() # 定义一个httpclientmyheaders {"Host": "weixin.…

天池 在线编程 最小的行程(动态规划)

文章目录1. 题目2. 解题1. 题目 给定一个二维矩阵&#xff0c;找到从上到下的最小路径。只能向左下&#xff0c;下&#xff0c;右下移动 所有的元素都是正整数 矩阵大小 < 200x200 样例 1: 输入: 1 2 3 4 5 6 7 8 9 输出: 12 解释: 最短的路径为:1->4->7, 返回12.样…

messagebox

private void button1_Click(object sender, EventArgs e){/*//弹出消息对话框&#xff0c;包含确定按钮MessageBox.Show("消息","标题");//弹出消息对话框&#xff0c;包含确定按钮MessageBox.Show("消息", "标题",MessageBoxButtons…

centos 升级php5.5_CentOS 5.x 系统yum 升级php到5.2.x的方法(测试可用)

在用的centos 5.4系统中&#xff0c;目前提供php版本为5.1.6&#xff0c;通过以下方法升级PHP到5.2比较方便。先将以下地址导入&#xff1a;复制代码 代码示例:# rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka# vi /etc/yum.repos.d/CentOS-Base.repo 增加…

fluent瞬态计算终止条件在哪里设置_Fluent案例7【圆柱绕流】

一个瞬态的圆柱绕流案例知识点&#xff1a;瞬态圆柱绕流的模拟一个后处理的方法&#xff1a;将瞬态模型中一个点的速度变化绘成图表并将数值导出excel文件模型如下图所示&#xff0c;左边界为速度边界进口速度0.5m/s&#xff0c;试模拟出计算域中的速度变化打开workbench&#…

qq登录界面句柄_别小看QQ邮箱测试,80%的测试新手都不能写出完整的测试用例~...

对于很多刚进入测试行业的新手来说&#xff0c;由于自身的工作经验不足&#xff0c;虽有测试基础知识傍身&#xff0c;但仍然很难将测试用例写的尽善尽美。因此&#xff0c;学习别人的测试经验&#xff0c;将是你成为测试达人的必经之路。今天&#xff0c;我们就以QQ邮箱为例&a…

LeetCode 878. 第 N 个神奇数字(二分查找)

文章目录1. 题目2. 解题1. 题目 如果正整数可以被 A 或 B 整除&#xff0c;那么它是神奇的。 返回第 N 个神奇数字。由于答案可能非常大&#xff0c;返回它模 10^9 7 的结果。 示例 1&#xff1a; 输入&#xff1a;N 1, A 2, B 3 输出&#xff1a;2示例 2&#xff1a; 输…

js中的四舍五入函数

刚学到这部分时&#xff0c;感觉特别简单。可最近写个ajax分页时&#xff0c;忽然忘记应该怎么使用哪种函数来计算总的页数。。。哎&#xff0c;好记星不如烂笔头啊&#xff0c;还是老老实实的写下来吧。随时查看。 1.Math.ceil(x)&#xff1a;对x向上取整&#xff0c;即返回大…

为什么百度统计里面的广告那么多_里面东西一模一样的桶装方便面为什么比袋装贵那么多?...

今天特地买了一桶桶装的和一袋袋装的&#xff0c;同品牌同系列同口味&#xff0c;里面面饼&#xff0c;配料包也一模一样&#xff0c;桶装的只是多了一个小勺子&#xff0c;为什么一袋二元五&#xff0c;一桶就要卖4元&#xff1f;并且大家好像都不觉得有什么不妥……(好吧我就…

php获取页面视频文件,PHP获取各大视频网站页面中的Flash播放地址

先看一个简单的,我用PHP实现了这个功能,我觉得用PHP来做这项工作简直是一种享受&#xff01;使用其提供的强大的HTML页面处理函数和正则表达式&#xff0c;短短的几行代码就能搞定这个功能。贴一下关键代码://获取优酷页面中的flash地址function get_flash_url( $url ){$lines …

LeetCode 1790. 仅执行一次字符串交换能否使两个字符串相等

文章目录1. 题目2. 解题1. 题目 给你长度相等的两个字符串 s1 和 s2 。 一次 字符串交换 操作的步骤如下&#xff1a;选出某个字符串中的两个下标&#xff08;不必不同&#xff09;&#xff0c;并交换这两个下标所对应的字符。 如果对 其中一个字符串 执行 最多一次字符串交换…

gradle 上传jar包_Gradle学习记录014 关于依赖的声明

详细学习Gradle构建的依赖声明。该学习记录基于Gradle官方网站资料。本篇参考链接如下&#xff1a;https://docs.gradle.org/current/userguide/declaring_dependencies.html声明一个模块作为依赖通常声明一个模块作为依赖&#xff0c;需要指定这个模块的版本。Gradle提供了一套…

win10版本查看_想知道电脑中安装的win10版本号,用这3招就对了,一键查看

自从微软在Windows 10中更改了发布模型后&#xff0c;很多用户就对找出他们在电脑上安装的Windows 10版本感兴趣。大家可能都已经知道&#xff0c;微软不会再发布Windows的主要版本&#xff0c;而是会不断发布更新&#xff0c;这让人想起许多Linux发行版的滚动发行模型。如果你…

php熊掌号api,织梦dedecms熊掌号自动API提交当日资源php代码

你是不会代码&#xff0c;没有代码基础&#xff1f;是否每次还需要登录熊掌号后台&#xff1f;每次发表文章都需要登录熊掌号后台站点天级收录&#xff0c;进行提交资源网站链接&#xff1f;今天分享一段代码轻松解决这些问题。require_once ("include/common.inc.php&quo…

LeetCode 1791. 找出星型图的中心节点(图出入度)

文章目录1. 题目2. 解题1. 题目 有一个无向的 星型 图&#xff0c;由 n 个编号从 1 到 n 的节点组成。 星型图有一个 中心 节点&#xff0c;并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。 给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ui, vi] 表示在节…

ole db 错误 通讯链接失败_西门子PLC1200的S7通讯(同一项目下)--GET接收指令

西门子PLC1200的S7通讯&#xff08;同一项目下&#xff09;--GET接收指令1.0 首先在同一项目下&#xff0c;组态两个PL&#xff0c;如下图&#xff0c;组态了2个1200PLC 1214C的PLC2.0 点击链接里面&#xff0c;在窗口的右上角选择S7连接&#xff0c;这个窗口可以看到本地ID&am…