State-of-the-art Framework 🏗 for Cloud Computing ⛅️ Simulation: a modern, full-featured, easier-to-use, highly extensible 🧩, faster 🚀 and more accurate ☕️ Java 17+ tool for cloud computing research 🎓. Examples: https://github.com/cloudsimplus/cloudsimplus-examples
batchVmCreation
(available example here).CloudSim Plus started in 2016 (7 years ago, considering the date of this new release) as a fork of CloudSim in order to provide a more well-engineered, fully extensible, easier-to-use, more accurate, and reliable cloud simulation framework. All the changes performed were intended to make the framework easier to maintain and extend, while providing an industry-standard tool to carry out cloud computing research.
After all these years, this release is a major restructuring of the project that breaks some compatibility with previous versions. It took a lot of thought before stepping ahead to make these changes. Despite CloudSim and CloudSim Plus having lots of similarities and being easy to migrate simulation scenarios to CloudSim Plus, internally they are very different at this time.
This way, in order to break the ties with CloudSim and enable a healthier and faster evolution, these structural changes presented below were performed.
Maven artifact name changed from cloudsim-plus
to cloudsimplus
.
Despite the former is available at Maven Central, it's deprecated.
Use the following code to include CloudSim Plus 8 as a dependency into your pom.xml:
<dependency>
<groupId>org.cloudsimplus</groupId>
<artifactId>cloudsimplus</artifactId>
<version>8.0.0</version>
</dependency>
org.cloudbus.cloudsim
to org.cloudsimplus
Everything in CloudSim Plus is now under the org.cloudsimplus
package.
Probably, there isn't a single class inherited from CloudSim which was not updated in CloudSim Plus. Most of them passed through a huge refactoring, remodeling and documentation improvement and extension.
Therefore, keeping these files inside the org.cloudbus.cloudsim
gives the wrong impression that the classes and interfaces are the same. CloudSim Plus just exists thanks to CloudSim. This way, all the copyright notes inside the original files were kept, as required to conform to CloudSim's license. Accordingly, all the credits to the original CloudSim authors are still given.
CloudSimPlus
class to be used as the Simulation engine.In order to make it clear that the simulation scenarios are using CloudSim Plus, a new CloudSimPlus
subclass was created, moving all the new code this project introduced in the CloudSim
class to this new one.
Adds Lombok support to reduce boilerplate code and verbosity. Futhermore, it makes the code cleaner, concise and easier to document and maintain. Lombok automatically changes the bytecode to introduce getters, setters, toString, equals, hashCode, builders and other features. It needs IDE support, however all major IDEs (including VS Code Editor) currently have default support for it.
The introduction of Lombok enabled a thorough code clean-up, removing all boilerplate that was just polluting the code, making it harder to understand and maintain. Since these boilerplates were mixed inside the code that really matters, it just made it more difficult for new researchers to understand and extend the framework.
The code automatically produced by Lombok for getters, setters, equals and hashCode are well tested and avoids the introduction of bugs when the researcher has to implement them by him/herself. A smaller codebase means less code to maintain and test, increasing code coverage.
In order to provide more concise names, Cloudlet
and Vm
interfaces had their getNumberOfPes()
and setNumberOfPes()
methods renamed to getPesNumber()
and setPesNumber()
. If you are passing this attribute to the Vm and Cloudlet constructor, you don't need to change anything on your simulation scenarios.
;
to ,
DatacenterBroker.getVmCreation()
method that returns an object enabling configuration of max number of VM creation retries to avoid infinite loops when there is no suitable host available (PR #398).In this new release, some structural changes were performed in the repository. Firstly, all CloudSim Plus projects were moved to the new CloudSim Plus organization. Project modules were removed from the CloudSim Plus API (the one you use inside your own projects) and created as independent repositories, namely: