cambio-project / misim Goto Github PK
View Code? Open in Web Editor NEWA simulator that shows the resilience of distributed software systems.
License: Apache License 2.0
A simulator that shows the resilience of distributed software systems.
License: Apache License 2.0
Currently GsonHelper is not static. This is due to be in line with the old style of Gson (where Gson/GsonBuilder were not static).
By now, Gson has also enabled static usage of its library so GsonHelper should switch aswell.
e.g. 8,11,15,19
Queue-based communication is an alternative load balancing strategy.
Requests are stored in a queue and may be pulled from the queue by workers.
Load balancing may monitor the queue length as an additional scaling parameter.
Currently, the report framework collects all metrics automatically. However, a user should be able to select which metrics he would like to have exported to ensure a minimized memory impact and (potentially) slight performance improvements.
Currently, a d3 graph of the system should be generated inside the ./Report folder.
This graph should be moved over into the Report folder of the experiment run.
This also requires the ./Report directory (or better: the d3 scripts in it) to be part of the resources of the final jar to allow singe jar usage.
Currently, load generators can only target single endpoints.
They should be able to target a whole service and then distribute the load (roundrobin/random) over all endpoints.
Currently the "duration" property is not mandatory, causing simulations to potentially run indefinitely.
Checkstyle does now enforce the CamelCase naming. The current parsing framework, still relies on an equal naming between JSON properties (snake_case) and class members. This essentially breaks the current parser.
Solution:
Use Gsons' @Expose
, @SerializedName
Annotations and the transient
modifier to enable compatibility.
Should allow
This can e.g. be useful when parsing Scenarios to add environment noise onto a load model.
Currently, the report location is only determined by the name of the experiment.
This is evaluated inside the MainModel class. The parameter/property of the experiment meta model is not considered.
Microservice
s are the main part of the architecture.
They own Operation
s which span a dependencies net that requires some sort of graph parsing algorithm.
The parser system should have no dependencies on any methods (except for getters and setters) of the parsed classes to ensure decoupling.
Curently no _Load files are written to the Report folder
The simulator output originally supported the output of an html-based (d3.js) site that illustrated the dependencies between services and instance counts. For this, it monitored the origins and targerts of all requests
This graph broke with version 3 and is not properly fixed by now.
The graph originally showed the effective dependencies (so only dependendencies that were actually used).
Instead of storing or creating the graph, the simulator should actually create a trace that is compatible with OpenTelemetry (Jäger/Zipkin/Kieker). See here for instructions.
So the dependency/performance analysis of the results can be done using external tools.
The dependency graph can actually be created during parse-time, before the actual simulation.
This is way less complicated
However, this will not result in an effective dependencies graph.
Shaded jars are more compact than assembly jars
DesmoJ creates a HashMap entry for each new event or entity name (see class NamingCatalog
).
Since a dependency request and CPU execution event names in MiSim are unique, it creates multiple entries for each (!) simulated request. This creates a HUGE memory impact that can be easily prevented by improving the naming scheme.
However, this might make the DesmoJ event execution traces less readable.
see Release workflow.
Replace all System.out.println with a proper logger such as log4j2.
e.g. by adding log4j-slf4j-impl
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.20.0</version>
</dependency>
to the pom and adding a logger.
Also setup Lombok for convenience.
currently a csv fiel only contains 2 columns ("simulation time" & "Value")
The Value
column should be renamable and further columns should be possible to add.
E.g see the Circuitbreaker output, which currently does not look nice.
... to ease the release process.
This is not simple, due to the protected master/main branch.
Current solution most likely will be an automated pull request.
Option to always output to a fixed directory, overwriting previous results.
Allow a scaling factor (linear, log, exp) for Intervalgenerators to generate simple varying workloads easily.
The readme need to be updated to better represent versions 3.+
Some things that need updates:
Currently only the report location is overwritable, but almost all properties of the simulation meta data should be for for easier automation.
In the parser Warning "[Warning] Potential unsafe parsing of value " , <name>
should be in quotation marks to make clear which value causes this warning.
This regard the tests within cambio.simulator.entities.networking
.
The current Framework stores all collected data in-memory. For larger Simulations, this data can get quite large and also might impact performance as the simulator has to keep track of it within multiple HashMaps.
Therefore, I'd propose a "continous" mode for the reporting framework that constantly streams out data.
This might negatively impact the performance of the simulator but keeps it memory profile a lot lower.
ScenarioDescription is the current parsing class for ATAM-Scenarios. With the full switch to Gson this should also be moved or at least wrapped by an Adapter.
Otherwise ATAM-Scenarios are not parsible.
Some of the test within ModelLoaderTest
are flaky and sometimes fail during the test workflow without any obvious reason.
Specifically, those are parsesTestModels
and parsesTestModelsWithScenario
.
Locally, I've never had any issues with these tests as far as I can remember, and I don't see why those are sometimes failing...
Currently, the network latency is defined inside the NetworkRequestSendEvent
event. However, this requires source code access and recompiling to change it. That is very cumbersome and unpractical.
Rather, there should be a short way of describing the current network latency inside the architecture description/model file.
Specifically for paths and service names, the naming should not be case dependent and MiSim should be case insentitve
Both the ArchitectureModel and the ExperimentModel are designed as Singletons in MiSim 3.0.
This is an Anti-Pattern and breaks the consecutive execution of tests.
Therefore, the creation should be handled via the parsing framework (preferred since convenient) or a Factory class need to be introduced.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.