×

OpenStack资源调度和现状分析

消耗积分:2 | 格式:rar | 大小:0.8 MB | 2017-10-10

分享资料个

 OpenStack云端的资源调度和优化剖析2016-07-03 19:12
  作者简介:胡晓亮,目前就职于IBM Platform Computing 系统科技部云计算部门,担任云计算开发部工程师。自2013年8月开始参与OpenStack相关的开发工作,涉及Nova、Cinder、Heat、等项目。本文节选自《程序员》,谢绝转载,更多精彩,请订阅《程序员》
  OpenStack简介:OpenStack是旨在为公有及私有云的建设与管理提供软件的一个开源项目,采用Apache授权协议,它的核心任务是简化云系统的部署过程,并且赋予其良好的可扩展性和可管理性。它已经在当前的基础设施即服务(IaaS)资源管理领域占据领导地位,成为公有云、私有云及混合云管理的“云操作系统”事实上的标准,在政府、电信、金融、制造、能源、零售、医疗、交通等行业成为企业创新的利器。OpenStack基于开放的架构,支持多种主流的虚拟化技术,许多重量级的科技公司如RedHat,AT&T,IBM,HP,SUSE,Intel,AMD,Cisco,Microsoft,Citrix,Dell等参与贡献设计和实现,更加推动了OpenStack的高速成长, 打破了Amazon等少数公司在市场上垄断的局面,解决了云服务被单一厂商绑定的问题并降低了云平台部署成本。
  OpenStack资源调度和优化现状
  OpenStack的虚拟机调度策略主要是由FilterScheduler和ChanceScheduler实现的,其中FilterScheduler作为默认的调度引擎实现了基于主机过滤(filtering)和权值计算(weighing)的调度算法,而ChanceScheduler则是基于随机算法来选择可用主机的简单调度引擎。如图1是FilterScheduler的虚拟机调度过程,它支持多种built-in的filter和weigher来满足一些常见的业务场景。在设计上,OpenStack基于filter和weigher支持第三方扩展,因此用户可以通过自定义filter和weigher,或者使用json资源选择表达式来影响虚拟机的调度策略从而满足不同的业务需求。
  OpenStack资源调度和现状分析
  图 1:OpenStack调度workflow
  Built-in的filter(部分):
  ComputeFilter过滤计算节点down机的主机CoreFilter过滤vcpu不满足虚拟机请求的主机DiskFilter过滤disk不满足虚拟机请求的主机RamFilter过滤ram不满足虚拟机请求的主机ImagePropertiesFilter过滤 architecture, hypervisor type不满足虚拟机请求的主机SameHostFilter过滤和指定虚拟机不在同一个主机上的主机DifferentHostFilter过滤和指定虚拟机在同一个主机上的主机JsonFilter过滤不满足OpenStack自定义的json资源选择表达式的主机:json资源选择表达式形如 query=’[“》”, “$cpus”,4]’表示过滤掉cpus小于等于4的主机
  Built-in的weigher(部分):
  RAMWeigher根据主机的可用ram排序IoOpsWeigher根据主机的io负载排序
  在一个复杂的云系统中,对云计算资源的监控和优化对于保证云系统的健康运行,提高IT管理的效率有重要的作用。最新版本的OpenStack也没有提供类似的功能,这可能是由于云系统的监控的对象和优化目标对于不同的用户有不同的要求,难于形成统一实现和架构,但是OpenStack已经意识到这部分的重要性并且启动了2个项目来弥补这个短板,当前它们都处于孵化阶段:
  Watcher(https://github.com/openstack/watcher):一个灵活的、可伸缩的多租户OpenStack-based云资源优化服务,通过智能的虚拟机迁移策略来减少数据中心的运营成本和增加能源的利用率。Congress(https://github.com/openstack/congress):一个基于异构云环境的策略声明、监控,实施,审计的框架。
  PRS简介
  由于OpenStack开源的特性,直接投入商业使用可能面临后期升级,维护,定制化需求无法推进的问题,因此一些有技术实力的公司都基于OpenStack开发了自己商业化的版本,这些商业化版本的OpenStack都包含了一些独有的特性并和社区开源的OpenStack形成了差异化, 比如完善了OpenStack虚拟机的调度和编排功能,加强了云系统的运行时监控和优化,弥补了云系统自动化灾难恢复的空缺,简化了云系统的安装和部署,引入了基于资源使用时长的帐务费用系统等等。PRS(Platform Resource Scheduler)是IBM Platform Computing公司的基于OpenStack的商业化资源调度,编排和优化的引擎,它基于对云计算资源的抽象和预先定义的调度和优化策略,为虚拟机的放置动态地分配和平衡计算容量,并且不间断地监控主机的健康状况,提高了主机的利用率并保持用户业务的持续性和稳定性,降低IT管理成本。PRS采用可插拔式的无侵入设计,100%兼容OpenStack API, 并且对外提供标准的接口,方便用户进行二次开发,以满足不同用户的业务需求。本文将会从虚拟机初始调度策略,实时监控和优化策略,用户自定义OpenStack Filter,虚拟机调度失败的Trouble Shooting Report和基于拓扑结构调度等方面概括介绍PRS的主要功能和使用场景,之后将有一系列文章对每个主题展开深入介绍。
  虚拟机初始调度策略
  虚拟机的初始放置策略指的是用户根据虚拟机对资源的要求决定虚拟机究竟应该创建在哪种类型的主机上,这种资源要求就是一些约束条件或者策略。例如,用户的虚拟机需要选择CPU或者内存大小满足一定要求的主机去放置,虚拟机是需要放置在北京的数据中心还是西安的数据中心,几个虚拟机是放在相同的主机上还是放置在不同的主机上等等。原生OpenStack调度框架在灵活的支持第三方的filter和weigher的同时也丧失了对调度策略的统一配置和管理,当前PRS支持如图2的初始放置策略,并且可以在运行时动态的修改放置策略。
  

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'OpenStack资源调度和现状分析',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);