
CloudSim:
支持云计算的资源管理和调度模拟的仿真平台
EdgeCloudSim
针对边缘计算场景的一个仿真环境,基于CloudSim开发,主要针对边缘环境下的计算资源和网络资源的管理。在cloudsim的基础上添加了边缘中资源管理的特性。
主要分为6个模块:默认情况下各个模块以及其中的主要元素的关系
如下:

移动模块
为设备增加位置信息,可以通过扩展抽象类Mobility Model实现不同的设备移动模型
负载生成模块:
通过扩展抽象类LoadGeneratorModel实现不同的计算任务生成模式。
边缘协调模块:
负责从其他模块收集信息,并决定如何让处理传入的客户端请求,可以通过扩展抽象类EdgeOrchestrator来条件不同类型的边缘协调器。
网络模块:
包括wlan和wan,同时考虑数据的上传和下载,默认实现是单个服务器队列模型,可以通过扩展抽象类NetworkModel实现其他网络行为模型。
核心仿真模块:
负责从配置文件夹中初始化边缘场景的参数并运行和管理所有的边缘实体。提供日记记录,数据以csv数据格式保存,可以通过matlab绘图。
核心仿真模块功能的大致介绍:
ScenarioFactory.java
工厂接口
通过实现接口中的方法对其他模块的对象进行实例化。
SimSettings.Java
仿真参数设置:
Initialize():从文件中初始化参数
ConfigFile,参数设置 通过load a properties file
包含一些仿真中可能用到的参数,云服务器的配置,卸载策略,调度策略等。
EdgeDevicesFile:边缘设备设置 parseEdgeDevicesXML()
设置中包括边缘服务器的参数,每个边缘服务器是一个datacenter的对象,其中包含host,host中又包含虚拟机。每部分都有其对应的计算、存储资源等。
应用程序设置 parseApplicationsXML()
应用程序设置中包含了可能存在的不同类型的任务,包括各种任务对应的计算存储资源的开销,以及任务在总任务中所占的比例。

以上import部分用于解析和读取xml文件中的参数
包括DOM解析器对象实例化和解析xml文件
DocumentBuilderFactory doc=DocumentBuilderFactory.newInstance();
DocumentBuilder db=doc.newDocumentBuilder();
调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进而可以利用DOM特性对整个XML文档进行操作了。
后续其他代码中的上述对象大部分用于解析xml或者利用dom特性来操作Document对象。
SimManager(ScenarioFactory _scenarioFactory, int _numOfMobileDevice, String _simScenario, String _orchestratorPolicy)
//SimManager(sampleFactory, j, simScenario, orchestratorPolicy)
生成对应的仿真管理实例
SimManager 继承SimEntity 用于管理仿真实体
仿真管理文件:
包括初始化卸载策略、调度策略、设备数量、移动模型mobilityModel,网络模型networkModel,边缘协调器edgeOrchestrator,云服务器manager cloudServerManager,边缘服务器管理edgeServerManager,移动服务器管理mobileServerManager,移动设备管理mobileDeviceManager;,负载生成器loadGeneratorModel
SimLogger类用于进行日志记录,并在每次任务完成后将结果从内存写入到文件中。
SimLogger.getInstance().simStarted(outputFolder,"SIMRESULT_" + simScenario + "_" + orchestratorPolicy + "_" + j + "DEVICES");
simstarted用于进行一些准备工作:这部分主要是和不同类型的app相关的,这些app信息来自applications.xml文件,applications.xml中记录了不同类型app的比例和对应任务的属性,大小,数据等。
日志文件需要记录app的完成情况。
CloudSim.init()
在创建任何的cloudsim实例前,都应该先调用init()进行初始化操作。
Simmanager的其他部分:
Simmanager->startSimulation()//初始化完成后开始仿真
//任务是创建并开启云、边、端的数据中心,创建对应数量的VM
主要是边缘部分:
startSimulation()->edgeServerManager.startDatacenters()
edgeServerManager.createVmList(mobileDeviceManager.getId())
EdgeVM(vmCounter, brokerId, mips, numOfCores, ram, bandwidth, storage, vmm, new CloudletSchedulerTimeShared());
//cloudServerManager和mobileServerManager过程相同
startDatacenters()介绍//数据中心创建
数据中心列表localDatacenters//
->createDatacenter(int index, Element datacenterElement) //创建数据中心,具体包含6个步骤,
->createHosts(datacenterElement)//创建用于存储主机的列表hostList
EdgeHost extends Host加入了主机的location信息setplace() or getlocation()
Host模拟真实主机,可用于虚拟机VM的放置
先初始化用于创建主机的参数,包括core,mips,ram,storage等,接着创建pe,这是主机的处理单元,即cpu核心。Pe(i, new PeProvisionerSimple(mips)用于创建pe,包含核心的id和处理速度,加入pe到pe的列表中。
EdgeHost(
hostIdCounter,
new RamProvisionerSimple(ram),
new BwProvisionerSimple(bandwidth), //kbps
storage,
peList,
new VmSchedulerSpaceShared(peList)
);
//用于创建边缘主机
创建完后添加主机到hostlist
vm_policy = EdgeVmAllocationPolicy_Custom(hostlist,datacenter_index)//虚拟机分配策略
创建数据中心:
Datacenter(name, characteristics, vm_policy, storageList, 0);
创建完数据中心,为每个主机创建对应的VM列表
根据数据中心->主机->VM依次遍历的方式创建所有的虚拟机。
EdgeVM extends Vm
EdgeVM(vmCounter, brokerId, mips, numOfCores, ram, bandwidth, storage, vmm, new CloudletSchedulerTimeShared())
创建包含参数和后续可能分配的虚拟机的任务队列。
云和移动端部分在某些情况下不提供服务,如果提供服务,则与边缘数据中心创建过程类似。
开始仿真
CloudSim.startSimulation();
执行已经创建的实体,直到所有实体被执行完毕。
CloudSim.stopSimulation();
下面是其他模块的核心部分:
包括负载生成和网络模型生成和移动模型生成,这些是仿真实体的数据来源。还有一部分是edge-client和edge-orchestrator,前者负责将任务发送到边缘或者云服务器,后者则负责对任务进行编排,选择对应的虚拟机。
负载生成模块:
抽象类LoadGeneratorModel()
负载生成器模块负责为给定配置生成任务。并把任务分配到移动设备,默认情况下,根据泊松分布生成任务,并且移动设备根据移动性移动模型移动。
IdleActiveLoadGenerator(numOfMobileDevice,simulationTime, simScenario) extends LoadGeneratorModel()
默认生成的任务模型,这些规则可以通过配置文件来设置。
网络模块:
抽象类networkModel
主要功能是获取任务上传和下载数据的时延,结果是基于数学公式的计算,默认实现方法是基于单个服务器队列模型。
MM1Queue extends NetworkModel
核心函数calculateMM1(double propagationDelay, double bandwidth /*Kbps*/, double PoissonMean, double avgTaskSize /*KB*/, int deviceCount)//参数包 括传播时延,带宽,平均任务大小,设备数量
移动模块:
抽象类MobilityModel.java
主要功能是提供设备的地理位置.根据移动模型对边缘设备的路径进行模拟生成。
边缘协调模块:
用于任务的调度
simScenario:
包括三种模式SINGLE_TIER,TWO_TIER,TWO_TIER_WITH_EO
单层、两层和带边缘协调器的三种卸载模式。一层和两层没有利用边缘协调模块,
包括卸载策略:选择云或者边来处理任务(一层模式没有)
调度策略:选择哪个虚拟机用来处理任务
其中单层是只卸载到边缘上,两层为卸载到边缘或者云上,但边缘协调器的方式可以实现把任务调度到其他位置的数据中心上。
在这个部分可以实现卸载算法的设计。
Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile
昨晚看到IDEA官推宣布IntelliJIDEA2023.1正式发布了。简单看了一下,发现这次的新版本包含了许多改进,进一步优化了用户体验,提高了便捷性。至于是否升级最新版本完全是个人意愿,如果觉得新版本没有让自己感兴趣的改进,完全就不用升级,影响不大。软件的版本迭代非常正常,正确看待即可,不持续改进就会慢慢被淘汰!根据官方介绍:IntelliJIDEA2023.1针对新的用户界面进行了大量重构,这些改进都是基于收到的宝贵反馈而实现的。官方还实施了性能增强措施,使得Maven导入更快,并且在打开项目时IDE功能更早地可用。由于后台提交检查,新版本提供了简化的提交流程。IntelliJIDEA
介绍pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:简单灵活,容易上手支持参数化能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等测试用例的skip和xfail处理可以很好的和jenkins集成
📝学技术、更要掌握学习的方法,一起学习,让进步发生👩🏻作者:一只IT攻城狮。💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。❤️《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。项目demo:源码地址👉🏻SpringCloud入门实战系列不迷路👈🏻:SpringCloud入门实战(一)什么是SpringCloud?SpringCloud入门实战
文章目录一,什么是kaliPurle(卡利紫)二,如何安装kaliPurple。(有步骤没图片直接是默认)1,复制它的下载链接到迅雷可以让你下镜像变得更快。2,打开你的虚拟机创建新的虚拟机3,点击后面浏览然后找到镜像的所在地选中确定,下一步4,这里默认就可以,因为Ubuntu和这个差不多架构。5,然后,名字自己改一下,然后把他安到你想要装的盘,容量默认。之后一直下一步就可以**6,打开它,然后第一个图形界面安装,直接回车,然后选中文点continue之后没有图片的直接点继续。7,密码想设什么设什么。然后一直继续到我的图片那里改一下就可以了。8,软件默认就行。9,耐心等待。然后点手动配置dvc然
目录关于MPU6050芯片关于小板关于厂家和DATASHEET关于漂移关于角加速度还是角速度关于精度和量程(可调,可选)关于功耗,陀螺仪+加速器工作电流:3.8mA(全功率,陀螺仪在所有速率下,在1kHz采样率下加速)采样率高,功耗也高可以参考 MPU6050陀螺仪与Processing和匿名上位机飞控联动实录-知乎关于MPU6050芯片MPU6050传感器模块是6轴运动跟踪设备。包含3轴陀螺仪、3轴加速度计、运动处理器、温度传感器。I2C总线接口,可与微控制器进行通信。通过辅助I2C总线与其他传感器设备通信,如3轴磁力计、压力传感器等。如果3轴磁力计连接到辅助I2C总线,则MPU6050可
MySQL为您提供了一个有用的字符串函数REPLACE(),它允许您用新的字符串替换表的列中的字符串。REPLACE()函数的语法如下:REPLACE(str,old_string,new_string);SQLREPLACE()函数有三个参数,它将string中的old_string替换为new_string字符串。注意:有一个也叫作REPLACE的语句用于插入或更新数据。所以不要将REPLACE语句与这里的REPLACE字符串函数混淆。REPLACE()函数非常方便搜索和替换表中的文本,例如更新过时的URL,纠正拼写错误等。在UPDATE语句中使用REPLACE函数的语法如下:UPDATE
SM4为分组对称密码算法,明文、密文以及密钥长度均为128128128bits。SM4算法主要包括加解密算法和密钥扩展算法,采用323232轮非线性迭代的数学结构,其中算法中每一次迭代运算为一轮非线性变换。主要操作包括异或、合成置换、非线性迭代、反序变换、循环移位以及S盒变换等。加密算法和解密算法的数学架构、运算法则、运算操作等都是完全相同的,解密运算只需要将加密算法中生成的轮密钥进行反序使用。其流程图如下图所示。图1.SM4密码算法加密流程图密钥扩展算法 设加密主密钥MK=(MK0,MK1,MK2,MK3)MK=(MK_0,MK_1,MK_2,MK_3)MK=(MK0,MK1,MK
前言本文为Json简介与基本使用相关知识,下边具体将对什么是JSON,XML与JSON的区别,JSON的语法格式,JSON数据的转换(包括:Java对象转换为JSON格式、JSON格式转换为Java对象)等进行详尽介绍~📌博主主页:小新要变强的主页👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少
这个赛题的训练数据其实和去年是一样的,只是是语义分割的评价指标改成了类似实例分割的指标。1.赛道背景变化检测对“耕地红线”、土地利用监管等应用具有重要意义。利用多时相遥感数据,采用多种图像处理和模式识别方法提取变化信息,并定量分析和确定地表变化的特征与过程,便是遥感变化检测的本质。传统遥感行业基于人工两期影像标注从而判别地物时相变化的方法受限于效率低、成本高等问题,难以满足实际应用需求,本赛道希望遴选出高效的遥感图像变化检测算法模型,对图像中的变化图斑信息进行高效识别,提高空间信息网络建设中遥感图像快速变化识别能力。2.赛道任务变化检测赛道力求对通过前后两时相的遥感影像,提取出地物发生变化的斑