<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Investigation of Containerizing Distributed Petri Net Simulations</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jan Henrik Röwekamp</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Daniel Moldt</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Matthias Feldmann</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>University of Hamburg</institution>
          ,
          <addr-line>Vogt-Kölln-Straße 30, 22527</addr-line>
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <fpage>133</fpage>
      <lpage>142</lpage>
      <abstract>
        <p>Reference nets combine the power of an object-oriented programming language with the formalism of Petri nets. Using them makes it possible to model complex concurrent systems easier. By doing so with a tool like Renew, we achieve a directly executable (local) simulation of the system. In recent publications, ideas have been presented to transpose these simulations into one distributed simulation. However, being a genuinely concurrent system, the problem arises, that some nodes are less utilized than others slowing down the simulation in its entirety. In this paper, we define requirements to a distributed simulation and evaluate how specific technical approaches harmonize with them. We present a first - reference net based - prototype for an approach using containerization and Docker for the execution of a single net simulation truly distributed on several (virtual) machines. As an example of a workload with differing complexity, the prototype calculates parts of the Mandelbrot set in a distributed manner. A significant advantage of the approach is that inherent complexity of a problem may be unknown without restraining the method.</p>
      </abstract>
      <kwd-group>
        <kwd>High-level Petri nets Reference nets Distributed Simulation Docker</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Reference nets are a high-level Petri net formalism and provide a strong
objectoriented foundation to model complex systems. Because reference nets follow the
principal of nets within nets, use net instances (similar to object orientation)
and are organized hierarchically, communication between nets imposes a certain
overhead. Synchronous channels are a practical solution in local cases. However
to find a binding unification is required, which gets complicated in the context
of synchronous channels in the distributed case. A solution using very simple
synchronous channels has been proposed [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. Later we have shown a simple
prototype using these simple channels in combination with virtual machines
[
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. In this paper, we discuss the requirements for a distributed simulation and
present a simple Docker-based prototype of a distributed simulation.
      </p>
    </sec>
    <sec id="sec-2">
      <title>Motivation</title>
      <p>When simulating reference nets, it is desirable to not only simulate a distributed
system but to distribute the simulation altogether. Having a simulation
infrastructure that copes with different complications inherent to a distributed
system, gives the possibility to achieve this goal. Using a distributed net simulation
has several advantages, for example, it benefits all parts of the software
engineering life cycle. It can be used to model prototypes and mock-ups during
requirements engineering, implement the actual system during implementation
or help with verification during maintenance.
2
2.1</p>
      <sec id="sec-2-1">
        <title>Basics, Related Work, and Technical Background</title>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Net Basics and Tools</title>
      <p>Some Petri Net basics of reference nets and their toolset are explained, as they
form the basis for our conceptual and technical proposal.</p>
    </sec>
    <sec id="sec-4">
      <title>Nets within Nets and Synchronous Channels Petri nets are usually con</title>
      <p>sidered as monolithic structures. High-level Petri nets introduced hierarchies and
allowed splitting of nets into subcomponents of the whole structure. Binding of
subnets with the embedding nets has been discussed intensively.</p>
      <p>
        Reference nets [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] used synchronous channels [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] for the integration of Object
Petri nets [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] and Object-oriented Petri Nets [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. Synchronous channels allow
an active coupling of net instances at runtime. The binding ensures that all
variables of all involved transitions are matched entirely before they are executed
atomically. As mentioned above the binding is a highly sophisticated operation.
A distributed synchronization across different physical machines is not feasible.
Therefore we introduced a simpler version of the synchronous channels [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </p>
      <p>In Figure 1 the left net is the System net called SystemNet and other net
is the Object net called subnet. An instance of the SystemNet net template is
instantiated, fires the first transition and generates a token that contains a string
"Demo", an integer 42 and the reference to the generated Object net instance
of a subnet net template called subnet. Binding of the two transitions via the
channel ch is first collecting the possible bindings in the SystemNet, binding it to
the parameters of the channel (str will be bound to "Demo", x to 42 and subnet
to the net instance reference in this example). Subsequently, the binding of the
nonbound parameters attached to the transition in the subnet is calculated (a
possible binding in the example would be localY to 42, givenStr to the same
value as str and by that "Demo", and givenInt to the value of x, which is
also 42). Then the firing of the transitions in both nets occurs concurrently.
Resulting in the marking of 1764 (the value, that will be bound to prod) in the
right most place in the SystemNet and the tuple ["Demo,42"] in the right most
place in the Object net. Please note the asymmetric call: the caller (SystemNet)
has to have the reference of the callee (subnet) to invoke the channel ch with
subnet:ch(str,x,prod).</p>
      <p>Renew For reference nets, the tool Renew has been developed. While it can
be used for many other formalisms reference nets and its channels are the
primary formalism. It allows the modeling and the execution of reference nets in a
genuinely concurrent mode.</p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] a prototype for distributed simulation has been introduced. It uses
RMI (Remote Method Invocation) as the technical implementation of
communication. Synchronous channels are implemented with a two-way synchronization:
Transitions of a net instance (caller) with special inscriptions call a remote
transition (callee). The caller proposes a binding for all parameters of the synchronous
channel for which it can provide some values to the callee. The callee then acts
as a caller for other synchronous channels attached to it. The callee calculates
the missing values of the parameters of its caller (with the help of its callees)
and reports the values back to its caller. The caller then decides if all involved
transitions that contributed to the calculation of the binding will fire atomically.
In that case, it initiates the firing, which is performed in all involved simulators.
      </p>
      <p>Other formalisms than the reference nets of Renew allow slightly modified
channel inscriptions. However, they provide only synchronous channels for local
calls of other nets. Communication with other machines is only realized via other
frameworks like RMI, ActiveMQ, and others.
2.2</p>
    </sec>
    <sec id="sec-5">
      <title>Containers vs. Virtual Machines</title>
      <p>
        Virtual machines are designed to run applications on a particular system. A
hypervisor is located on top of the infrastructure and creates and runs virtual
machines [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Each virtual machine runs its unique operating system, allowing
different operating systems to be run on the same infrastructure. Since each
virtual machine has its own binaries, libraries, and applications, virtual machines
may use multiple gigabytes of size [
        <xref ref-type="bibr" rid="ref11 ref3">3, 11</xref>
        ].
      </p>
      <p>
        Divergent to virtual machines, containers are located on top of the
infrastructure and its host OS. The containers share the OS Kernel and may share the
binaries and libraries [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. These shared components are read-only to the
containers [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Therefore containers are lightweight and may use only a few megabytes in
size, allowing them to start faster [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. By sharing the components, only a single
OS is necessary, and by this, the management overhead is reduced [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
Docker Docker is an open source container virtualization technology [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Docker
allows reusing components over multiple containers, by using components of their
base image (which can also have a base image) and by this minifying the size
and the start-up time of containers [
        <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
        ]. By assigning a different namespace to
each container, docker prevents containers from having access to anything other
than what was defined when creating the container [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
2.3
      </p>
    </sec>
    <sec id="sec-6">
      <title>Container management</title>
      <p>
        Container management is responsible for all actions concerning containers [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
Management software can be used to simplify the administration of containers
and help to set the access of containers [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Automation can be used to configure
and start containers depending on the requirements [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
      </p>
      <p>
        Autoscaling Multiple containers of the same image can be used to split a load
across multiple containers. Autoscaling is responsible for adjusting the number
of containers to meet the demand [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
2.4
      </p>
    </sec>
    <sec id="sec-7">
      <title>Requirements</title>
      <p>For further evaluation, it is desirable to outline our requirements for a distributed
simulation. To run a distributed simulation several (technical) aspects need to
be considered. The three main categories of interest are: The net formalism,
the infrastructure and finally the engine used to run the simulation. We assume
that all these are possibly alterable. As a distributed simulation itself is also
a distributed system, well-known requirements for distributed systems apply as
well. Therefore, resources are a crucial term in all three categories. A distributed
simulation should keep the resource demand as low as possible. Also, derived
from distributed systems, security concerns are to be considered. This is mainly
an infrastructural topic, but to a degree applies to the engine itself and the net
formalism as well. In our context security is a generalized term on how good
components of the net are protected from unauthorized access, regardless of it
originating from within or without the simulation itself. Finally, a net formalism
related requirement is splitability and distributability of net parts. While in an
ideal world every concurrent transition firing could run distributed as well, this
is very hard to achieve due to synchronization constraints. However, achieving
a good distributability is one major goal in designing a distributed simulation
environment.</p>
      <sec id="sec-7-1">
        <title>Distribution of the Simulation</title>
        <p>Partitioning of the simulation is crucial for a distributed simulation. Out of the
net formalisms we choose reference nets, because of their net instance
capabilities. Similar to object-oriented programming nets are like classes, of which net
instances can be created. Net instances themselves can be treated as a token in
a place in another net instance. Being able to create net instances on demand
results in significantly increased flexibility. However, there is a drawback: The
resource demand of the simulation may increase during running time. This also
means that the simulation environment might not be known in its entirety when
starting the simulation. To be able to dynamically provide more computation
power, in case the simulation is already fully utilizing the underlying system, we
investigate three kinds of infrastructure and their capabilities of extending the
simulation on demand. These three main approaches are bare metal machines,
virtual machines, and containers.
3.1</p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>Simulation Extension using Bare Metal Machines</title>
      <p>The classic approach is to start one part of the simulation directly on a physical
machine. This method has the least overhead but is also somewhat static. Adding
an additional unit requires a fully installed machine, that is connected to the
network. The simulation also needs to wait until the new machine is booted
before it can be used. There is also a significant installation overhead to be
considered, as all components need to be installed before the first run.
3.2</p>
    </sec>
    <sec id="sec-9">
      <title>Simulation Extension using Multiple Virtual Machines</title>
      <p>
        The next logical step is to migrate the distributed simulation into virtual
machines as we have proposed earlier [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. Using virtual machines renders parts of
the simulation transportable, which reduces dependency on the infrastructure.
However, virtual machines are large, and the aspect of delayed integration into
the running simulation remains, as the virtual machines also have to boot.
3.3
      </p>
    </sec>
    <sec id="sec-10">
      <title>Simulation Extension using Containers</title>
      <p>The main shortcomings of the virtual machine approach are size and boot time.
The usage of containers can elegantly address both. As mentioned earlier Docker
as a container virtualization technology comes with integrated security
features despite sharing resources on a machine. Using containers finally allows
for portable, isolated simulation parts, that can be added to the simulation
promptly.
4</p>
      <sec id="sec-10-1">
        <title>Prototype</title>
        <p>Per assumption (see section 2.4) net formalism, infrastructure and engine may be
altered. Using Renew (with Distribute plugin) we can apply changes to the base
formalism of reference nets and also extend the engine using plugins. Distributed
synchronous channels are an example of an element diverging from the base
reference net formalism. As this work examines the use of containers a possibly
changing underlying infrastructure is of primary interest. We present a brief
prototype to show the general extendability of a simulation using Renew with
Distribute plugin. Extendability is a necessary precondition to be able to adapt
to changing infrastructure. Renew is technically a Java extension. However, it
provides true concurrency, non-determinism and conflict management (fairness).
Also note, that the Distribute plugin is based on Java RMI, but completely
abstracts this fact from the modeler.
4.1</p>
      </sec>
    </sec>
    <sec id="sec-11">
      <title>Concept</title>
      <p>A central work distributor will be used to offer work packages. Other parts of
the simulation can synchronize with it to fetch packages and deliver done work.
These other parts are realized within prepared (container-)images, so by merely
launching such an image into a container, the simulation gets extended. To realize
a proper utilization of the system, partitioning the workload is desirable in such
a manner every simulation node is utilized. Note, that we use a centralized
approach (instead of, e.g., work stealing) to avoid the necessity for each (maybe
newly initialized) worker to know each other currently active worker.
4.2</p>
    </sec>
    <sec id="sec-12">
      <title>Hypothesis</title>
      <p>With the proposed prototype we mainly want to evaluate the hypothesis, whether
it is possible to dynamically extend a running reference net simulation during
runtime using containerization technology. As a secondary goal, a high system
load is desirable to avoid inefficient utilization of resources.
4.3</p>
    </sec>
    <sec id="sec-13">
      <title>Technical Realization</title>
      <p>
        The concept is realized using Docker as container technology, Renew 2.5 as
simulator using the ‘Distribute’ plugin [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] running on OpenJDK 1.8. Reference
nets with Distribution extensions are used as underlying formalism. For
demonstration purposes, the simulation runs on six different Linux Mint 18.3 virtual
machines using Oracle Virtualbox 5.2.8 on top of a Windows 10 system with
an Intel Core i7-6800K CPU and 64GB of RAM. Each VM was set up with 10
GB of ram and a single CPU core. Please note, that the realization with nested
containers inside virtual machines is due to simplicity to set up, isolation from
other processes and uniformity of the used machines. The proposed solution is
to use containers as mean to extend the simulation instead of virtual machines.
One VM is used to run the distributor, one VM runs the central registry, and the
remaining four VMs each run a net, that fires up docker containers containing
additional parts of the simulation.
      </p>
    </sec>
    <sec id="sec-14">
      <title>Application</title>
      <p>
        There are several possible application scenarios, like modeling of a complex
system, multi agent applications, software verification and more. However, all of
these are rather complex and since this prototypes intended use is to evaluate,
whether a simulation is dynamically extendable with containers, a more
straightforward task was chosen. The computation and visualization of the Mandelbrot
set [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] serves as a good vehicle to acquire readily splittable workloads, as well as
different workload severities to potentially observe load balance problems. It is
also an easy enough problem to fit this prototype.
The Mandelbrot Set Given z0 2 C and zi+1 = zi2 + z0, the Mandelbrot set is
defined as M = fz0 2 Cjlimn!1zn &lt; 1g. Projecting the n from which onwards
the progression diverges onto the color spectrum yields the well-known
visualization of the Mandelbrot set depicted in figure 2. Given a maximum number of
iterations to evaluate, note that the black areas are very computation intensive,
as the computation cannot be aborted early.
      </p>
      <p>
        To demonstrate the difference between the dynamic distribution of work
packages and the static distribution onto a fixed number of instances, the image
is computed twice in two alternative ways: First, the image is split into four equal
parts. Four workers are launched and each worker processes its equal sized part
of the problem. Second, the image is split into 16 parts. These are dynamically
assigned to newly created containerized simulation parts (workers). By doing so
the second alternative automatically adds computation agents to the simulation,
which is a very basic form of autoscaling (see section subsec:containerMgmt)
without dynamic load adaption. Both alternatives are calculated with the same
nets, only the configuration is different to implement these two approaches. The
blueprint for a worker net can be found in figure 3 and the distributor net in
figure 5. A launcher net starts new net parts (docker containers). The launcher
is shown in figure 4. Please note that the transition inscription for the channel
differs from the channel explained in Figure 1: d!passWorkload() -&gt; wp. The
syntax is part of the distributed reference net formalism and required for the
binding search, but are too complicated to elaborate on here. As for intuition
imagine -&gt; as output parameter of a firing, &lt;- as input parameter and ! as
synchronization with a non-local net instance. For further details see [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
Overall the Docker-based simulation ran very well. Additional simulation parts
were launched as expected to extend the simulation accordingly. The image in
figure 2 was computed in all tests using a resolution of 1920x1080 pixels and
an iteration depth of 100.000. The first test with equal deterministic workload
distribution took an average of 150 seconds to complete, while the second test
with dynamic workload distribution took an average of 107 seconds. Despite
the overhead of launching new simulations in the second test the approach using
fixed workload distribution took about 40% more time in this specific example to
complete. The overall observed system load was higher using the dynamic
distribution, as expected. These numbers are the average of about fifteen independent
runs, but each diverging only by 3-5 seconds from the average.
In this paper requirements on a distributed Petri net simulation have been
presented. This distributed simulation is performed for a single net system using
the distributed resources to form a single simulation.
      </p>
      <p>Different approaches using bare metal machines, virtual machines and
containerization have been discussed. Finally, a simple prototype using the
containerization technology has been shown.</p>
      <p>Future work can include but is not limited to fully fledged reference net based
autoscaling, net partitionability considerations, and evaluation of more complex
net tasks.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Anderson</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <string-name>
            <surname>Docker</surname>
          </string-name>
          .
          <source>IEEE Software 32(3)</source>
          ,
          <fpage>102</fpage>
          -
          <lpage>105</lpage>
          (
          <year>2015</year>
          ). https://doi.org/10.1109/MS.
          <year>2015</year>
          .
          <volume>62</volume>
          , https://doi.org/10.1109/MS.
          <year>2015</year>
          .62
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Bernstein</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Containers and cloud: From LXC to Docker to Kubernetes</article-title>
          .
          <source>IEEE Cloud Computing</source>
          <volume>1</volume>
          (
          <issue>3</issue>
          ),
          <fpage>81</fpage>
          -
          <lpage>84</lpage>
          (
          <year>2014</year>
          ). https://doi.org/10.1109/
          <string-name>
            <surname>MCC</surname>
          </string-name>
          .
          <year>2014</year>
          .
          <volume>51</volume>
          , https://doi.org/10.1109/
          <string-name>
            <surname>MCC</surname>
          </string-name>
          .
          <year>2014</year>
          .51
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Brey</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Containers vs. Virtual Machines (VMs): What's the Difference? j NetApp Blog (Mar</article-title>
          <year>2016</year>
          ), https://blog.netapp.com/blogs/containers-vs-vms,
          <source>last accessed 22 Apr 2018</source>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Brooks</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Matelski</surname>
            ,
            <given-names>J.P.:</given-names>
          </string-name>
          <article-title>The dynamics of 2-generator subgroups of PSL (2, C)</article-title>
          .
          <source>In: Riemann surfaces and related topics: Proceedings of the 1978 Stony Brook Conference</source>
          , Ann. of Math. Stud. vol.
          <volume>97</volume>
          , pp.
          <fpage>65</fpage>
          -
          <lpage>71</lpage>
          (
          <year>1981</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Christensen</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hansen</surname>
            ,
            <given-names>N.D.</given-names>
          </string-name>
          :
          <article-title>Coloured Petri nets extended with channels for synchronous communication</article-title>
          . In: Valette,
          <string-name>
            <surname>R</surname>
          </string-name>
          . (ed.)
          <source>Application and Theory of Petri Nets</source>
          <year>1994</year>
          , 15th International Conference, Zaragoza, Spain, June 20-24,
          <year>1994</year>
          ,
          <source>Proceedings. Lecture Notes in Computer Science</source>
          , vol.
          <volume>815</volume>
          , pp.
          <fpage>159</fpage>
          -
          <lpage>178</lpage>
          . Springer (
          <year>1994</year>
          ). https://doi.org/10.1007/3-540-58152-9_
          <fpage>10</fpage>
          , http://dx.doi.org/10.1007/3- 540-58152-9_
          <fpage>10</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Inagaki</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ueda</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ohara</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Container management as emerging workload for operating systems</article-title>
          .
          <source>In: 2016 IEEE International Symposium on Workload Characterization (IISWC)</source>
          . pp.
          <fpage>1</fpage>
          -
          <lpage>10</lpage>
          (
          <year>Sept 2016</year>
          ). https://doi.org/10.1109/IISWC.
          <year>2016</year>
          .7581267
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Kummer</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          :
          <string-name>
            <surname>Referenznetze</surname>
          </string-name>
          . Logos Verlag, Berlin (
          <year>2002</year>
          ), http://www.logosverlag.de/cgi-bin/engbuchmid?isbn=0035&amp;lng=eng&amp;id=
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Maier</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moldt</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Object coloured Petri nets - A formal technique for object oriented modelling</article-title>
          . In: Agha,
          <string-name>
            <given-names>G.</given-names>
            ,
            <surname>De Cindio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            ,
            <surname>Rozenberg</surname>
          </string-name>
          ,
          <string-name>
            <surname>G</surname>
          </string-name>
          . (eds.)
          <source>Advances in Petri Nets: Concurrent Object-Oriented Programming and Petri Nets, Lecture Notes in Computer Science</source>
          , vol.
          <year>2001</year>
          , pp.
          <fpage>406</fpage>
          -
          <lpage>427</lpage>
          . Springer-Verlag (
          <year>2001</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Netto</surname>
            ,
            <given-names>M.A.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cardonha</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cunha</surname>
            ,
            <given-names>R.L.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Assuncao</surname>
          </string-name>
          , M.D.:
          <article-title>Evaluating auto-scaling strategies for cloud computing environments</article-title>
          .
          <source>In: 2014 IEEE 22nd International Symposium on Modelling, Analysis Simulation of Computer and Telecommunication Systems</source>
          . pp.
          <fpage>187</fpage>
          -
          <lpage>196</lpage>
          (
          <year>Sept 2014</year>
          ). https://doi.org/10.1109/MASCOTS.
          <year>2014</year>
          .32
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Röwekamp</surname>
            ,
            <given-names>J.H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moldt</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Simon</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>A simple prototype of distributed execution of reference nets based on virtual machines</article-title>
          .
          <source>In: Proceedings of the Algorithms and Tools for Petri Nets (AWPN) Workshop 2017</source>
          . pp.
          <fpage>51</fpage>
          -
          <lpage>57</lpage>
          (
          <year>Oct 2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Salah</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zemerly</surname>
            ,
            <given-names>M.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yeun</surname>
            ,
            <given-names>C.Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Al-Qutayri</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Al-Hammadi</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          :
          <article-title>Performance comparison between container-based and vm-based services</article-title>
          .
          <source>In: 2017 20th Conference on Innovations in Clouds, Internet and Networks (ICIN)</source>
          . pp.
          <fpage>185</fpage>
          -
          <lpage>190</lpage>
          (
          <year>March 2017</year>
          ). https://doi.org/10.1109/ICIN.
          <year>2017</year>
          .7899408
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Simon</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Concept and Implementation of Distributed Simulations in Renew</article-title>
          .
          <source>Bachelor thesis</source>
          , University of Hamburg, Department of Informatics, Vogt-Kölln Str. 30,
          <string-name>
            <given-names>D</given-names>
            <surname>-</surname>
          </string-name>
          22527
          <string-name>
            <surname>Hamburg</surname>
          </string-name>
          (Mar
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Simon</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moldt</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Extending Renew's algorithms for distributed simulation</article-title>
          . In: Cabac,
          <string-name>
            <given-names>L.</given-names>
            ,
            <surname>Kristensen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.M.</given-names>
            ,
            <surname>Rölke</surname>
          </string-name>
          , H. (eds.) Petri Nets and
          <string-name>
            <given-names>Software</given-names>
            <surname>Engineering</surname>
          </string-name>
          . International Workshop, PNSE'16,
          <string-name>
            <surname>Toruń</surname>
          </string-name>
          , Poland, June 20-21,
          <year>2016</year>
          .
          <source>Proceedings. CEUR Workshop Proceedings</source>
          , vol.
          <volume>1591</volume>
          , pp.
          <fpage>173</fpage>
          -
          <lpage>192</lpage>
          . CEUR-WS.org (
          <year>2016</year>
          ), http://CEUR-WS.org/Vol-
          <volume>1591</volume>
          /
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Valk</surname>
          </string-name>
          , R.:
          <article-title>Petri nets as token objects - an introduction to elementary object nets</article-title>
          . In: Desel,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Silva</surname>
          </string-name>
          , M. (eds.) 19th
          <source>International Conference on Application and Theory of Petri nets</source>
          , Lisbon, Portugal. pp.
          <fpage>1</fpage>
          -
          <lpage>25</lpage>
          . No. 1420
          <source>in Lecture Notes in Computer Science</source>
          , Springer-Verlag, Berlin Heidelberg New York (
          <year>1998</year>
          ). https://doi.org/10.1007/978-3-
          <fpage>540</fpage>
          -27793-4_
          <fpage>29</fpage>
          , http://dx.doi.org/10.1007/978-3-
          <fpage>540</fpage>
          -27793-4_
          <fpage>29</fpage>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>