使用Cloudsim实现基于多维QoS的资源调度算法之二:实现基于多维QoS的资源调度算法

1.Cloudsim体系结构及核心类

CloudSim是一款云计算仿真软件,其由澳大利亚墨尔本大学网格实验室和Gridbus项目于2009年推出,它是一个函数库,可在Windows和Linux系统上跨平台运行,CloudSim的体系结构主要分为四个层次,如图1所示:

图1 Cloudsim 体系结构

Cloudsim仿真层为云计算的虚拟数据中心环境的配置和仿真提供支持,包括虚拟机、内存、容量及带宽的接口,该层用于主机分配到虚拟机的策略研究,并通过扩展核心的虚拟机调度函数实现。

Cloudsim最上层是用户代码层,该层提供一些基本的实体,如主机、应用、虚拟机,用户数和应用类型,以及代理调度策略等。通过扩展这些实体,云应用开发人员可以在该层开发各种用户需求分布、应用配置、云可用性场景等应用调度技术,并执行Cloudsim支持的云配置的Robust测试。

通过扩展Cloudsim提供的基本功能,研究者能基于特定环境和配置进行测试,完成云计算关键技术的开发研究。

CloudSim继承了GridSim并支持云计算的研究和开发,CloudSim的组件工具均为开源的。其中CloudSim具有两个独特功能:

第一,提供虚拟化的引擎,使用户可在数据中心的节点上建立和管理独立的、协同的虚拟化服务;

第二,在对虚拟化服务分配处理核心时,可在时间共享和空间共享之间灵活切换。

在CloudSim函数库中有几个主要核心类,如表1所示:

表1 Cloudsim主要核心类

2.Cloudsim工作模型

在云数据中心,将特定应用的虚拟机分配给主机由虚拟机分配控制器(VmAllocationPolicy)完成,Cloudsim在主机层和虚拟机层都实现了基于时间共享和空间共享的调度策略。

通常情况下,来自不同用户的任务相对独立,假设有m个用户User={User1, User2,…, Userm},n个任务Task={t1,t2,…,tn},n个虚拟化资源VM={VM1,VM2,…VMn},以及p个数据中心Datacenter={Datacenter1, Datacenter2,…Datacenterp},Cloudsim的工作模型如图2所示:

图2 Cloudsim的工作模型

其中,CIS(Cloud Information Service)将用户请求映射到合适的云服务提供商,DatacenterBroker模拟SaaS提供商代理,根据QoS的需求协商资源和服务的分配策略。VmScheduler是实现主机组件的抽象类,模拟虚拟机的分配调度策略,扩展此抽象类能调整处理器的共享策略。VmAllocationPolicy代表虚拟机监视器调度策略,该策略用于将虚拟机分配给主机。

3.实现基于多维QoS的资源调度算法

开始仿真模拟时,首先需要创建一个数据中心,然后再数据中心中创建CPU、内存等资源,此时只需要向代理中心注册资源信息,用户就可以使用数据中心的资源进行仿真模拟。

在仿真资源分配试验中,其步骤及其各个步骤中的代码如下:

(1) 初始化Cloudsim包,代码如下:

Int num_user= 1 ; //定义用户数量

Calendar calendar=Calendar.getInstance();

boolean trace_flag=false;

CloudSim.init(num_user, calendar, trace_flag); //初始化CloudSim包

(2)创建数据中心(Datacenter),代码如下所示:

DataCenter datacenter()=createDatacenter("Datacenter_0");

(3) 创建数据中心代理(Broker),代码如下所示:

DatacenterBroker broker=createBroker();

Int brokerId=broker.get_id();

(4) 创建虚拟机,代码如下所示:

vmlist=new VirtualMachineList(); //创建虚拟机列表

Vmvm=new Vm(vmid, brokerld, mips, PesNumber, ram, bw, size,

vmm,new CloudletSchedulerTimeShared()); //创建虚拟机

vmlist.add(vm); //加入虚拟机列表

broker.submitVMList(vmlist);//提交虚拟机列表

(5) 创建云任务,代码如下所示:

cloudletList = new CloudletList();//创建云任务列表

Cloudlet cloudlet=new Cloudlet(id, length, file_size, output_size);

cloudlet.setUserlD(brokerld);

……

cloudletList.add(cloudlet); //将任务加入任务列表

……

broker.submitCloudletList(cloudletList);//向代理提交任务列表

(6) 执行资源调度算法,完成任务到虚拟机的映射,代码如下所示:

broker. bindCloudletsToVms();

(7) 启动仿真程序,代码如下所示:

CloudSim.startSimulation();

(8) 打印仿真结果,代码如下所示:

List<Cloudlet> newList = broker.getCloudletReceivedList();

CloudSim.stopSimulation();

printCloudletList(newList);

注:任务到虚拟机的映射是由DatacenterBroker类中的bindCloudletsToVms()函数实现。该函数根据不同的策略来实现任务的映射。在《云计算》刘鹏著的示例中,提供了两种映射算法,一种是作业顺序分配的算法、另一种是以总完成时间最短为导向的贪心算法。本人的目标是基于多维QoS的资源调度算法,所以重载了云任务Cloudlet类,在类中增加了与QoS相关的属性,比如资源需求、QoS需求、作业优先级等。然后在资源分配函数中根据这些属性的值,选定分配策略,来完成任务到虚拟机的映射。另外个人认为,在资源调度层面,并不需要指定每维QoS的具体来源、具体意义,映射算法中只需要将其作为一个参数做相应的运算即可。

时间: 2024-10-28 17:47:20

使用Cloudsim实现基于多维QoS的资源调度算法之二:实现基于多维QoS的资源调度算法的相关文章

Android基于Google Zxing实现二维码/条形码扫描、生成二维码/条形码

 二维码/条形码生成器 二维码/条形码扫描器 一.二维码与条形码工作原理 目前的很多应用上都有扫码功能,当时微信推出二维码扫码功能时,觉得imagine,通过一张简单的图片就能扫描添加还有,还有分享名片功能(也是一张二维码图片,识别扫描). 下面小编将通过文章主要介绍QRCode方面技术. QRCode是被广泛应用的一种二维码,解码速度快.二维码相对于条形码来说,二维码的存储数据量更大,空间利用率高,有一定的容错性. 二维码原理介绍: 二维码是用某种特定的几何图形按一定的规律在平面上分布的黑

游戏运维的最佳实践:搜狐畅游自动化运维之旅!

搜狐黎志刚见证了畅游游戏自动化运维平台的从无到有,通过在其中踩过的坑.解过的结,他向大家来阐述游戏运维的进阶之路.本文主要围绕畅游游戏管理体系与运维自动化的演变历程.运维自动化的实现及未来运维四方面展开. 畅游运维管理体系与运维自动化的演变历程 畅游运维管理体系演变历程 从 2008 年毕业以实习生的身份进入搜狐畅游,我同公司一起成长,经历了整个运维管理体系从小到大的过程. 整个运维管理体系是从最初石器时代(脚本化),之后的青铜时代(半自动化).蒸汽时代(DevOPS)一路演变过来,现在处于自动

构建基于Javascript的移动CMS——生成博客(二).路由

在有了上部分的基础之后,我们就可以生成一个博客的内容--BlogPosts Detail.这样就完成了我们这个移动CMS的几乎主要的功能了,有了上节想必对于我们来说要获取一个文章已经不是一件难的事情了. 获取每篇博客 于是我们照猫画虎地写了一个BlogDetail.js define([ 'jquery', 'underscore', 'mustache', 'text!/blog_details.html' ],function($, _, Mustache, blogDetailsTempl

[运维] 第六篇:告警是数据中心运维的核心驱动力!

告警事件是数据中心运维的核心驱动力,我们做的所有运维工作都是要减少业务出现故障的概率,提供更高的业务可用性.不知道大家是否认可这句话?还是看这张图,通过这张图,把这个问题讲透:        作为综合事件管理平台自身,需要有这样几个部件:1 丰富事件接口.作为数据中心的核心驱动引擎,需要有丰富的事件接口可以将各种IT事件,甚至非IT事件接收过来,常见的接口有rest.web service.snmp.soap.socket.xml.文本.jdbc等.因为面对的对象不同,所以能够使用的方式是完全不

数据结构实验之图论二:基于邻接表的广度优先搜索遍历

数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列.(同一个结点的同层邻接点,节点编号小的优先遍历) 输入 输入第一行为整数n(0< n <100),表示数据的组数. 对于每组数据,第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(二)基于SpringMVC+Shiro的用户登录权限验证

序: 在上一篇中,咱们已经对于项目已经做了基本的配置,这一篇文章开始学习Shiro如何对登录进行验证. 教学: 一.Shiro配置的简要说明. 有心人可能注意到了,在上一章的applicationContext.xml配置文件中,包含以下配置. <!-- 項目自定义的Realm --> <bean id="shiroDbRealm" class="org.shiro.demo.service.realm.ShiroDbRealm" ><

ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(goole)生的,QRCode就不用说了吧,虽说技术无国界,但是国人还是有点.... 好,言归正传,java用ZXi

sharepoint 2013基于AD的Form表单登录(二)——form登录页面自定义

配置好了sharepoint 2013基于AD的Form登录,只是成功了第一步,如何自定义登录页呢?特别是不要出现sharepoint2013自带登录页面,每次登录前还需要选择是否是form或者windows验证. 打开vs2012新建sharepoint 2013 project,在layouts目录下添加application page,页面命名为CustomLogin.aspx. 前台页面:为避免母版页中其他控件影响,注意继承的是simple.master         后台页面:继承F

聊聊运维(1)证明你是坏运维的七个迹象,不要做CPR运维

大部分运维都有迷茫的阶段 干上几年运维,肯定感到迷惑和彷徨,因为运维是一个要求沉下心来了,不断精益求精的职业,而当下的大背景是浮躁,运维不是小鲜肉,明显是一个收益低,见效慢的职业. 运维有没有前途? 论职位,在一般企业最高级别到中层: 论收入,在任何企业肯定不会超过核心业务部门员工收入: 论压力,出现问题,永远是运维在背锅,因为不管什么起因,最终的操作都是运维. 所以浮躁的运维也非常多,浮躁的运维通常有以下七个迹象之一: 一 从不或者很少备份 数据是企业运行的基石,备份是使自己处于不败之地的终极

SDUT 2142 【TEST】数据结构实验之图论二:基于邻接表的广度优先搜索遍历

数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列.(同一个结点的同层邻接点,节点编号小的优先遍历) Input 输入第一行为整数n(0< n <100),表示数据的组数.对于每组数据,第一行是三个整数k,m,t(0<