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 是自己的


云计算实验(三)CloudSim练习相关推荐

  1. 头歌Educoder云计算与大数据——实验三 分布式文件系统HDFS

    实验三 分布式文件系统HDFS 第1关:HDFS的基本操作 任务描述 相关知识 HDFS的设计 分布式文件系统 NameNode与DataNode HDFS的常用命令 编程要求 测试说明 代码实现 第 ...

  2. 云计算仿真框架CloudSim介绍

    幻灯片1 云计算仿真框架CloudSim介绍 jiangzw#ihep.ac.cn (以下为本人某次报告做的调研的PPT及其它一些实践记录,为保证清晰度,一些插入的图片较大,可在新标签页中打开) (  ...

  3. 实验三-密码破解技术

    学   号 201421430010   中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验三 密码破解技术   ...

  4. 计算机导论excel,[计算机导论实验三Excel.doc

    [计算机导论实验三Excel 实验三 Excel表格处理 实验报告 姓名(学号):_______________ 年级(专业):_____ ________成绩:________ 实验时间:_____ ...

  5. 20155222卢梓杰 实验三 免杀原理与实践

    实验三 免杀原理与实践 1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 实验步骤如下 1.先对实验二中生 ...

  6. 实验三 JSP应用开发进阶

    全部:https://download.csdn.net/download/weixin_42859280/11218260 实验三 JSP应用开发进阶:PDF版本[已经完成所有代码] 想看文档上面有 ...

  7. IaaS, PaaS和SaaS是云计算的三种服务模式

    原文链接:https://zhidao.baidu.com/question/584394281.html IaaS, PaaS和SaaS是云计算的三种服务模式. SaaS:Software-as-a ...

  8. 实验三:XML模型(一)

    实验三:XML模型(一) 1 学时  2学时 2.实验目的与要求 通过实验,使学生理解XML模型的概念:能够掌握DTD的基本语法.作用和使用方式.要求学生能够根据XML文档推出满足要求的DTD文件,并 ...

  9. c语言程序设计江宝钏实验六答案,《C语言程序设计》(江宝钏著)实验三答案.doc...

    <C语言程序设计>(江宝钏著)实验三答案 取木汹嘉蓝杀绥胶碘仑做工坝穗兔移猿花吾摧骑盏净苯哑亢剩洲挝己昭韦痉何路乃庆碑保隋呐湛肿腕观蓟匡踏蝉勋霸奄御笋组儒凶斡剖搽呐吼缘叉尝伯分铁屏沥芋忧柏 ...

最新文章

  1. Exchange Server 2010 灾难恢复
  2. json loads No JSON object could be decoded 问题解决
  3. allure 测试报告本地打开_Allure--自动化测试报告生成
  4. Python -- dict 类
  5. MATLAB 线型 颜色 和 标记点组合使用
  6. HDU 1875 畅通工程再续 (最小生成树)
  7. 推荐阅读《大话设计模式》的策划编辑陈禹成写的新书《电脑使用说明书》
  8. 前端学习(1436):vue特点
  9. 新的log4j2.xml
  10. Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
  11. kingbase 修改数据库密码
  12. 金融信息化及交易管理系统(股票交易系统APP)
  13. 分号与逗号的区别及举例_顿号与逗号与分号间的区别是什么?
  14. clojure语言_Clojure编程语言
  15. 安装程序将在重启您的计算机后黑屏,解决Windows 10登陆后黑屏问题
  16. 【Excel】可浮动利率(LPR)和提前还款的房贷计算器
  17. 像差分析(更新。。。)
  18. mysql case when 优化_SQL 逻辑优化 case when 转为 union all
  19. golang快速入门--爬虫--基于colly框架的爬虫案例
  20. 商汤绝影车路协同“进城”!10+个智能网联应用,100+场景算法应用,感知范围扩大1000倍...

热门文章

  1. macos 下制作 windows 安装盘的教程
  2. Everything搜索知识总结
  3. Wox启动后出现Everything Service或Everything Client 没有运行的解决办法
  4. DAMA数据管理知识体系指南-读书笔记3
  5. 火山视窗CEF浏览器实现简单的网页填表
  6. 怎样改变conda创建虚拟环境的python版本
  7. 服务器开启虚拟内存有用吗,服务器设置虚拟内存有用吗
  8. 彻底解决:Apache启动问题—(OS 10022)提供了一个无效的参数。
  9. 【图像检测】基于直方图实现火灾检测matlab代码
  10. 纠正训练和测试分辨率差异