当前位置: 首页 > news >正文

云计算实验(三)CloudSim练习

1、实验目的
CloudSim 是一个云计算仿真平台软件,提供给研究和设计人员做仿真实验。通过本次实验,初步了解 CloudSim,通过学习 CloudSim 内置的仿真实例,理解云计算应用设计的方法。
2、实验内容
(1)CloudSim 平台的安装
CloudSim 是用 java 开发的跨平台软件,在个人电脑上安装部署 CloudSim。
由于本人深入学习过java相关技术,从java基础到jsp,ssh,ssm之类的都已经学习过,现在已经在学习spring boot微服务了,所以java安装,构建工具maven的安装这些常规操作不再赘述。
在这里插入图片描述
打开cloudsim的下载页面,记得下载的是source code而不是上面两个打包好的,下载后得到cloudsim-cloudsim-4.0.zip
在这里插入图片描述
解压后如下,发现是一个maven项目(含有pom.xml文件)
在这里插入图片描述
使用IDEA导入该maven项目后发现该项目为maven聚合项目
在这里插入图片描述
项目下有三个子项目distribution、documentation和modules,modules项目下又有cloudsim和cloudsim-examples项目
直接运行CloudSimExample1的mian方法
在这里插入图片描述
运行成功
(2)运行 CloudSim 的 Examples——CloudSimExample5
CloudSim 带有 Basic Examples、Network Examples、Power Examples
、Container Examples 等例子。尝试正确运行其中的一个,并理解过程和运行结果。
参考资料(不限于):
https://blog.csdn.net/lhakuma/article/details/78754957
http://www.cloudbus.org/cloudsim/examples.html

依据CloudSim源代码介绍几个核心类:
(1) Cloudlet类:构建云环境下的任务。
(2) DataCenter类:数据中心,提供虚拟化的网格资源,处理虚拟机信息的查询,包含虚拟机对资源的分配策略,云计算采用VMProvisioner 处理虚拟机。
(3) DataCenterBroker类:隐藏了虚拟机的管理,如创建、任务提交、虚拟机的销毁等。
(4) Host类:扩展了机器对虚拟机除处理单元(PE)之外的参数分配策略,如带宽、存储空间、内存等,一台 Host 可对应多台虚拟机。
(5) VirtualMachine类:虚拟机类,运行在 Host上,与其它虚拟机共享资源,每台虚拟机由一个拥有者所有,可提交任务,并由VMScheduler 类定制该虚拟机的调度策略。
(6) VMSchedult类:虚拟机的调度策略,用来管理执行任务,实现了任务接口。
(7) VMCharacteristics类:提供虚拟机描述。
(8) VMMAlocationPolicy类:虚拟机监视器策略类,描述同- Host 上的多台虚拟机共享资源的策略。
(9) VMProvisioner类:实现数据中心的主机到虚拟机的映射。

本次实验分析了CloudSimExample5这个例子
它创建了两个数据中心,每个数据中心有1个主机并且运行两个用户。

维基百科对cloudlet的介绍https://en.wikipedia.org/wiki/Cloudlet

A cloudlet is a mobility-enhanced small-scale cloud datacenter that is located at the edge of the Internet. The main purpose of the cloudlet is supporting resource-intensive and interactive mobile applications by providing powerful computing resources to mobile devices with lower latency. It is a new architectural element that extends today’s cloud computing infrastructure. It represents the middle tier of a 3-tier hierarchy: mobile device - cloudlet - cloud. A cloudlet can be viewed as a data center in a box whose goal is to bring the cloud closer. The cloudlet term was first coined by M. Satyanarayanan, Victor Bahl, Ramón Cáceres, and Nigel Davies,[1] and a prototype implementation is developed by Carnegie Mellon University as a research project.[2] The concept of cloudlet is also known as follow me cloud,[3] and mobile micro-cloud.[4]

可以看出cloudlet简单理解就是一个小型的移动数据中心,适合边缘计算。在这里是云任务的意思

先创建4个静态列表,存放两个云任务列表和虚拟主机列表。
在这里插入图片描述
Main函数开始:

点进去看到源码后就知道Log这个类就是在控制台打印字符串的。
在这里插入图片描述
第一步,初始化CloudSim包,这里我们有两个用户,calendar直译日历,还有个traceflag,熟悉java日志处理的都知道java的日志等级分为8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL),越后面粒度越小,简而言之就是trace是false的话就少打印一些trace级别的信息。ZZ

在这里插入图片描述
第二步,创建两个数据中心Datacenter_0和Datacenter_1
在这里插入图片描述
createDatacenter是一个单独的函数,定义如下:
1、创建主机列表
在这里插入图片描述
2、创建pe列表,pe的意思是Processing Element 处理单元,代表物理主机的一个cpu
在这里插入图片描述
Mips的意思是Millions Instructions Per Second 百万条指令/秒,不懂的同学可以简单理解为和主频类似的概念MHZ,因为两者成正比例,衡量了cpu的计算能力,总之越大越强。

3、创建PE并加入到pelist中,每个pe的构造函数需要传入它的id和它的计算能力mips。
在这里插入图片描述
4、创建主机,指定id,pelist(计算单元列表,简单理解就是几个cpu),内存大小,磁盘大小,bw(带宽大小)

在这里插入图片描述
在这个例子中,虚拟主机分配策略是每个pe只有一个虚拟主机,又因为在这个例子中每个主机只有一个pe,所以每个主机只有一个虚拟主机
在这里插入图片描述
5、创建数据中心的一些特征(描述),这里架构是x86,系统是linux,Xen是一个开放源代码虚拟机监视器,vmm的意思是the virtual machine monitor used。。。。。。
DatacenterCharacteristics构造函数的注释里面已经说的很清楚了,所以不再赘述。Cost是花费的意思,这里还没有存储中心的配置。
在这里插入图片描述

DatacenterCharacteristics构造函数的注释
在这里插入图片描述
6、最后自然是完成数据中心的配置并返回构建好的对象。
在这里插入图片描述
至此createDatacenter函数结束。

第三步,创建两个代理broker1和broker2用来代理用户对象,简化操作,createBroker函数比较简单,就不拿出来说了。
在这里插入图片描述
第四步,为每个borker/user 创建虚拟主机
先分别创建两个虚拟主机列表
在这里插入图片描述
创建两个参数一样的虚拟主机
在这里插入图片描述
添加到虚拟主机列表里并提交给代理(只是提交给broker,broker还没创建主机列表里面的主机)
在这里插入图片描述
第五步,创建两个云任务列表,都只有一个元素。配置参数并提交给broker,参数分别为id,任务长度,文件大小,输出文件大小,期待cpu,期待完成时间,期待带宽。这里三个期待都是无限制。
在这里插入图片描述
Cloudlet的构造函数的参数的注释,讲的很详细了。
在这里插入图片描述
第六步,开始模拟
在这里插入图片描述

最后一步,当运行结束时打印结果
在这里插入图片描述

有一个printCloudletList函数,用来打印运行结果
至此main函数结束

CloudSimExample5结果分析:
Starting CloudSimExample5…
Initialising…
Starting CloudSim version 3.0

创建并启动两个数据中心
Datacenter_0 is starting…
Datacenter_1 is starting…

#创建并启动两个代理
Broker1 is starting…
Broker2 is starting…

#实体都已启动
Entities started.
0.0: Broker1: Cloud Resource List received with 2 resource(s)
0.0: Broker2: Cloud Resource List received with 2 resource(s)

#两个Broker都尝试在Datacenter_0(Datacenter #2)上分配虚拟主机
0.0: Broker1: Trying to Create VM #0 in Datacenter_0
0.0: Broker2: Trying to Create VM #0 in Datacenter_0

#可以看到,因为mips的限制(实际上是cpu的限制),在host0上分配虚拟主机0失败了。
这个原因呢之前的代码的注释中已经解释过了,“在这个例子中,虚拟主机分配策略是每个pe只有一个虚拟主机,又因为在这个例子中每个主机只有一个pe,所以每个主机只有一个虚拟主机”,两个Broker都想在Datacenter_0(Datacenter #2)上创建虚拟机0,那么后者就会创建失败,
[VmScheduler.vmCreate] Allocation of VM #0 to Host #0 failed by MIPS

#Broker1成功在Datacenter_0(Datacenter #2)上分配了虚拟主机0
0.1: Broker1: VM #0 has been created in Datacenter #2, Host #0

#分配云任务给VM #0
0.1: Broker1: Sending cloudlet 0 to VM #0
#Broker2在Datacenter_0(Datacenter #2)上创建虚拟主机失败
0.1: Broker2: Creation of VM #0 failed in Datacenter #2
#剩下来的Broker2尝试在Datacenter_1(Datacenter #3)上分配虚拟主机
0.1: Broker2: Trying to Create VM #0 in Datacenter_1
#分配成功
0.2: Broker2: VM #0 has been created in Datacenter #3, Host #0
#分配云任务给VM #0
0.2: Broker2: Sending cloudlet 0 to VM #0

#所有的云计划完成执行,退出
160.1: Broker1: Cloudlet 0 received
160.1: Broker1: All Cloudlets executed. Finishing…
160.1: Broker1: Destroying VM #0
Broker1 is shutting down…

160.2: Broker2: Cloudlet 0 received
160.2: Broker2: All Cloudlets executed. Finishing…
160.2: Broker2: Destroying VM #0
Broker2 is shutting down…

Simulation: No more future events
CloudInformationService: Notify all CloudSim entities for shutting down.
Datacenter_0 is shutting down…
Datacenter_1 is shutting down…
Broker1 is shutting down…
Broker2 is shutting down…
Simulation completed.
Simulation completed.
=============> User 4
========== OUTPUT ==========
Cloudlet ID STATUS Data center ID VM ID Time Start Time Finish Time
0 SUCCESS 2 0 160 0.1 160.1
=============> User 5
========== OUTPUT ==========
Cloudlet ID STATUS Data center ID VM ID Time Start Time Finish Time
0 SUCCESS 3 0 160 0.2 160.2
CloudSimExample5 finished!

Q&A:ID的问题
为什么是Datacenter2 和Datacenter3 和User4和User5呢?进过调试后发现id是按照entities先后顺序分配的,此id不是传进去的那个int的id,两个不一样,分配到第一个broker的时候,id=4,所以给broker1的id是4,第二个broker的id是5
在这里插入图片描述

发现有6个entities,分别是CloudSimShutdown id为0,CloudInfomationService id为1,Datacenter_0 id为2,Datacenter_1 id为3,名称为Broker1的DatacenterBroker id为4,名称为Broker2的DatacenterBroker id为5,而且非常重要的一点是这几个类都是抽象类SimEntity的实现,查看SimEntity以后发现它有个id属性,也就是说,这6个entities是按照这个id按先后顺序排的。

SimEntity
在这里插入图片描述
SimEntity的实现类
在这里插入图片描述

特别注意Vm和Host这两个类并不是SimEntity的实现类,它们的id 是自己的

在这里插入图片描述
在这里插入图片描述

相关文章:

  • 信息安全实验一:DES分组密码算法 2019.03.21
  • 信息安全实验二:分组密码工作模式 2019.04.15
  • 信息安全实验三:求模逆算法 2019.04.18
  • 信息安全实验四:RSA公钥加密算法 2019.04.28
  • 信息安全实验五:散列算法 2019.05.18
  • 信息安全实验六:RSA数字签名算法 2019.06.01
  • 基于寒武纪平台的边缘智能实践课程-实验报告 2019.7.5
  • 基于深度学习的实时人脸识别 2019.3.6
  • YOLO论文阅读 ⽬标检测: You Only Look Once: Unified, Real-Time Object Detection 2018.12.20
  • TensorFlow与Flask结合打造手写体数字识别 https://www.imooc.com/learn/994
  • 云计算第2次作业
  • C#读取xml
  • JS对话框
  • Div弹出框
  • .pyc文件是什么?
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Apache Zeppelin在Apache Trafodion上的可视化
  • JavaScript设计模式之工厂模式
  • Java多态
  • js
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • leetcode46 Permutation 排列组合
  • PHP CLI应用的调试原理
  • React组件设计模式(一)
  • 欢迎参加第二届中国游戏开发者大会
  • 记录一下第一次使用npm
  • 看域名解析域名安全对SEO的影响
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 如何合理的规划jvm性能调优
  • 如何利用MongoDB打造TOP榜小程序
  • 微信小程序设置上一页数据
  • 终端用户监控:真实用户监控还是模拟监控?
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​flutter 代码混淆
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​决定德拉瓦州地区版图的关键历史事件
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (算法)Game
  • (转)Sql Server 保留几位小数的两种做法
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET文档生成工具ADB使用图文教程
  • .net项目IIS、VS 附加进程调试
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .sys文件乱码_python vscode输出乱码