<!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>
      <journal-title-group>
        <journal-title>Edge Computing Workshop, April</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.1109/KST.2017.7886112</article-id>
      <title-group>
        <article-title>Advanced software framework for comparing balancing strategies in container orchestration systems</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Yevhenii V. Voievodin</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Inna O. Rozlomii</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>The Bohdan Khmelnytsky National University of Cherkasy</institution>
          ,
          <addr-line>81 Shevchenka Blvd., Cherkasy, 18031</addr-line>
          ,
          <country country="UA">Ukraine</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2024</year>
      </pub-date>
      <volume>5</volume>
      <issue>2024</issue>
      <fpage>0000</fpage>
      <lpage>0002</lpage>
      <abstract>
        <p>This paper introduces a detailed software design for a system that evaluates scheduling strategies in container orchestration systems. Focusing on software architecture, it elaborates on the various components such as dynamic cluster topology and container configuration streams, cluster packing algorithms, metric collectors and a state machine for tracking experiment progress. The system incorporates malfunction scenarios, testing the resilience of diferent strategies. The system is designed to be flexible and open to be extended with new key performance indicators and test scenarios. The experiment flow is split into independent iterations that can be eficiently run in parallel enabling faster experiment executions. The paper reviews related work, positioning this system as an essential tool in the current research landscape for resource distribution and management in distributed systems. A key aspect of the design is the client-server architecture, which not only ensures scalability and adaptability for various experiments but also includes an API for enhanced interaction and result analysis. This comprehensive design approach makes the designed system a helpful tool for nuanced analysis and informed decision-making in container orchestration, with the potential to advance in the field by speeding up researches and creating a collection of strategy evaluation techniques.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;container orchestration systems</kwd>
        <kwd>Kubernetes</kwd>
        <kwd>Docker</kwd>
        <kwd>Docker Swarm</kwd>
        <kwd>software design</kwd>
        <kwd>distributed systems</kwd>
        <kwd>resources distribution</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        Container orchestration systems (COS) are modern software that provide capabilities to maintain large
and complex systems [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. The primary technology that COS relies on is a container. Containers can be
described as applications packed with all the dependencies they require, making the deployment of such
applications easy and reproducible across diferent operating systems and platforms. The convenience
of such deployments accelerates the development of applications [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>
        There are multiple components that COS consists of, as illustrated in figure 1: a cluster containing
nodes, with nodes containing containers, and also a scheduler. The scheduler decides which node to
use for deploying the next container in the sequence. To do so, the scheduler uses a scheduling strategy.
Typical strategies include “binpack” and “spread”, each aiming for diferent goals [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. For example,
“binpack” aims to maximize the utilization of nodes, while “spread” allows for better fault tolerance [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]
of the deployed application.
      </p>
      <p>
        The role of the strategy cannot be undervalued, but the choice of strategy is not easy to make. It
depends on a variety of factors, such as resilience to failures, usage of resources, and resource locality.
Machine learning is one direction where strategy development is heading, which makes the comparison
process even more challenging [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>The key goal of this article is to provide a comprehensive design for an application capable of
evaluating the performance of two or more scheduling strategies. Such an application must be flexible
enough to compare strategies regardless of their implementation and be easily extendable with new
metrics and comparison techniques.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related works</title>
      <p>
        The approach described by Voievodin et al. [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] to evaluate scheduling strategies provides a deep dive
into the important role of the scheduling strategy choice. It proposes key performance indicators for
comparing scheduling strategies and enlists ideas about which algorithms can be used to complete
the evaluation from start to end. This includes packing algorithms, fault tolerance testing, and the
aggregation of experiment results. This article delves deeper into the topic of strategy evaluation and
proposes a more complete and sophisticated design for such evaluation software. While it builds on
the proposed approach and algorithms, it extends the topic further by suggesting a concrete system
structure and software techniques that can be used to implement such a system.
      </p>
      <p>
        In the context of distributed systems, particularly those utilizing microservices architecture [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], COS
serves as an essential tool, ensuring the eficient and easily scalable operation of independently deployed
services across various computing environments at low overhead [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. Saboor et al. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] emphasize the
importance of resource utilization in such applications, noting that they have gained rapid adoption in
the software industry. A study on the aging and fault tolerance of microservices in Kubernetes provides
useful insights on how COS, in the representation of Kubernetes, can achieve diferent fault tolerance
properties and what options there are [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. Gogouvitis et al. [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] discuss how container orchestration
can be beneficial to seamless computing in industrial systems, which is software distributed across
diferent computing domains. Akuthota [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] covers a technique of chaos engineering in distributed
systems, which involves introducing controlled failures to the system to help make them more robust.
      </p>
      <p>
        Many scheduling strategies have been developed recently, which higlights the actuality of the topic.
An eficient virtual central processor unit scheduling in cloud computing [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. Container scheduling
using TOPSIS algorithm [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. A combined priority scheduling method for distributed machine learning
[
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. A new container scheduling algorithm based on multi-objective optimization [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. Improvement
of container scheduling for docker using ant colony optimization [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. A particle swarm
optimizationbased container scheduling algorithm of docker platform [18]. Contention-aware container placement
strategy for docker swarm with machine learning based clustering algorithms [19].
      </p>
    </sec>
    <sec id="sec-3">
      <title>3. Key components of the system</title>
      <p>The experiment is a key component and consists of multiple parts, each of which must be separately
configured. These parts include: a stream of configurations, a strategy, a packer, an iteration result
collector, a malfunction algorithm, and a malfunction result collector. Diferent phases of the experiment
are represented by its state. The state machine includes the states: NEW, RUNNING, COMPLETED,
INTERRUPTED, and FAILED (figure 2).</p>
      <p>• NEW – indicates that the experiment can be configured. It has not been run yet, and new
experiments might be incomplete in terms of configuration. Experiment components can be
configured step by step.
• RUNNING – indicates that the experiment is currently running, which technically means going
through the experiment flow (figure 3). Experiments that are running can no longer be modified
in terms of configuration; the only change is that they accumulate data points for each new
computed result.
• COMPLETED – indicates that the experiment has successfully completed. Such an experiment
has run through all the configured steps and collected the desired metrics, which can now be
analyzed.
• FAILED – indicates that the experiment was unable to complete successfully. This could be due
to an unexpected error during execution or insuficient resources to finalize the experiment.
• INTERRUPTED – indicates that the execution of the experiment was deliberately interrupted.</p>
      <p>The reasons might vary, but primarily it could be to save resources when it’s clear from the results
produced so far that no further executions are necessary.</p>
      <p>The class diagram (figure 4) covers the key components of the experiment, ofering a detailed look
into interfaces and structures. Before the first iteration starts, there is a setup phase, as illustrated in
ifgure 3b. The iteration setup includes the propagation of cluster topology to all the strategies. The
topology essentially comprises a set of nodes that have limits and can contain deployed containers. This
topology is generated by the topology stream (figure 3a), a crucial first step. The topology stream allows
for the definition of virtually any cluster structure, including the placement of nodes in physical racks
for further fault tolerance testing. Additionally, the topology stream determines when the experiment
stops, as it concludes when there are no more topologies to run the experiment for. The generated
topology then serves as a prototype [20] for subsequent experiment iterations.</p>
      <p>The stream of configurations is responsible for generating container configurations (requirements)
to be placed within a cluster. Firstly, the stream can be either finite or infinite. An infinite stream will
continue generating configurations as long as the packer demands it. Finite streams, on the other hand,
can be used to test scheduling strategies for a very specific set of container configurations, to seek a
better strategy, or for strategy monitoring purposes. Regardless of whether a finite or infinite stream
is used, virtually any sequence of containers can be provided, including random sequences. A crucial
aspect is ensuring that the same sequence is fed to diferent strategies, where each strategy operates its
own copy of the cluster to fill.</p>
      <p>Secondly, the stream can be used to define application families. For instance, it can generate several
configurations that depend on each other and form a larger application, as commonly seen in
microservices architecture [21]. The specific implementation of the stream determines how to establish these
dependencies, and the container configuration structure allows for such connections to be specified.</p>
      <p>Thirdly, the stream can replicate a single container configuration multiple times, for example, if an
application must be deployed multiple times within a cluster to ensure better response to failures [22].
Each aspect can be implemented as a separate stream representation. The decorator pattern [20] can
be employed to combine these implementations in a desired manner, allowing for a variety of system
demands to be covered.</p>
      <p>
        The packer is tasked with making decisions regarding when to stop in the case of an infinite stream
of configurations. As discussed by Voievodin et al. [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], such decisions are highly specific to the use-case
being tested. For instance, the packer might stop after encountering the first scheduling request error,
or once the cluster is full. While it is the packer’s responsibility to execute scheduling algorithms, the
packer itself does not depend on the specifics of the strategy implementation.
      </p>
      <p>After the packing process is completed, the results aggregator collects the packing results based on
the state of clusters filled by diferent strategies. Firstly, the aggregator’s job is to collect important data
points, which it does after the execution of every iteration. Secondly, it produces an aggregate that
represents these data points. For example, the aggregator might count the number of containers deployed
by each strategy and then compute the average number of containers deployed. The aggregation phase
occurs after the last iteration for the current topology has been executed. The flexible interface of the
results aggregator allows for the production of a wide range of statistical information. For instance, with
all the data points collected, an aggregate might include percentile or median values. The aggregated
results are stored within the experiment and get associated with the corresponding topology.</p>
      <p>One of the desired characteristics of a strategy is its management of the fault tolerance of the deployed
system. The “malfunction” component assists in testing this aspect [23]. It’s important to describe
the malfunction in combination with the malfunction results collector. This collector is similar to the
previously described collector, with the primary diference being that it collects results twice: before
and after the malfunction is introduced. This approach enables the malfunction results collector to
compare changes resulting from the operation of the malfunction algorithm. For instance, it can assess
how many applications or application families survived a network partition [24]. The malfunction
operates within the cluster, deliberately causing a disruption, such as removing a node from the cluster
(figure 5) or reducing the percentage of available connections. Since everything is interconnected by
default, the cluster provides a means to disconnect two nodes.</p>
    </sec>
    <sec id="sec-4">
      <title>4. Parallel execution</title>
      <p>The organization of the flow facilitates faster experiment execution in multiprocessor systems [ 25].
Each experiment iteration is executed in a separate thread, which accelerates the overall experiment
execution speed, especially since most of the work occurs in the packer. To efectively collect results
between iterations, proper synchronization techniques must be employed. In this context, a common
Mutex implementation will sufice. Within the scope of a single experiment, it definitely makes sense
to parallelize both iterations and topologies, as they can be executed independently of each other.</p>
      <p>Furthermore, the application architecture allows for a higher level of parallelization, presenting
additional opportunities. The system can be utilized to identify the most suitable topology for a given
sequence of containers. This can be achieved by executing diferent experiments, each with a distinct
topology stream. Virtually any configuration or additional testing techniques can be applied at this
higher level, utilizing the existing experiment mechanics. Since each experiment is self-contained, these
algorithms can also be parallelized.</p>
    </sec>
    <sec id="sec-5">
      <title>5. High level organisation of the system</title>
      <p>A client-server architecture [19] is a recommended choice for such an application. Firstly, the
implementation of the previously described components is separate from the visualization of the experiment
results. The system’s flexible state allows for the choice of whether to represent such results with user
interface components, or whether another system should simply delegate the execution of experiments
to this one while making decisions based on the experiment results. Another advantage of adopting a
client-server architecture is the ability to have multiple server instances, thereby enabling high-level
parallelization of experiment execution. Additionally, having multiple server instances enhances the
overall resilience of the system.</p>
      <p>The server component of the system must expose an application programming interface (API) to
utilize the previously described features (figure 6). Modern client-server systems typically use REST
API [26] or gRPC [27]. The API functions of the proposed software are straightforward and can be
implemented using the most preferred approaches. These functions include:
• Create experiment: This function creates a new experiment with all default values set, which
cannot be run yet. The created experiment will be in the NEW state.
• Update experiment: This method adds new configurations to the experiment. It allows for
stepby-step configuration of the experiment, cloning of experiments, and modification of their parts.</p>
      <p>It technically facilitates quick testing of various hypotheses.
• Find experiments by id or other attributes: This function enables the retrieval of information on
previously run experiments and their results, as the results are part of the experiment data.
• Clone experiment: This creates an identical clone of an experiment, which can then be modified
to observe diferent behaviors. With many configuration options available, it makes sense to
change some dimensions and observe how the results vary. For example, adding a new strategy
to the list of tested ones and observing the impact on results.
• Execute experiment: This starts the experiment execution, transitioning the experiment to the</p>
      <p>EXECUTING state and commencing the broadcasting of all previously described events.
• Interrupt experiment execution: This stops the experiment execution and transitions the
experiment to the INTERRUPTED state. In cases where it becomes apparent that the experiment is not
yielding expected results, continuing the execution would be unproductive and consume more
resources. The experiment can thus be interrupted to conserve resources.
• Subscribe to experiment events: Once a subscription is made, the subscriber will receive all the
events of interest.</p>
      <p>The state of the experiment encompasses all the experiment results, even if the experiment is currently
running. Since intermediate results are still useful, they must be distributed over the API to interested
consumers. These events include:</p>
      <p>• Experiment state changes.
• Experiment iteration completion. This event can be throttled to avoid overwhelming the client
system.
• Experiment result available. Sent every time the experiment is executed for one of the cluster
topologies, indicating that there is a new experiment result entry available, which can then be
represented on the client side.
• Experiment execution for a topology started. This event is purely technical and ensures that the
client side accurately displays the necessary progress.</p>
      <p>Internally, broadcasting is implemented following the event listener pattern [20], where the system’s
role is to send the event to interested subscribers. Externally, these events will be broadcast over
the network to connected clients, enabling them to make quick decisions regarding the progress of
experiment execution.</p>
    </sec>
    <sec id="sec-6">
      <title>6. Interpretation of experiment results</title>
      <p>The aim of results interpretation is to determine which strategy performs better or worse in certain
scenarios. Charts and tables are ideal tools for illustrating such comparisons. The comparison itself is
based on the experiment results, which include values produced by the aggregators. Each set of values
has an identification that allows for diferentiating between the aggregates.</p>
      <p>For instance, suppose an aggregator computes the average number of containers created by diferent
strategies. The results are then represented as the average number of containers per strategy for each
topology. To analyze these results, a histogram chart can be used [28]. An example histogram (figure 7a)
might clearly indicate that, for all topologies, the binpack strategy managed to create fewer containers
on average before the packing condition was met in this particular experiment setup.</p>
      <p>Additionally, rates, such as the container creation rate (the percentage of successfully satisfied
scheduling requests), can be displayed using a line chart. In an example (figure 7b), the “binpack”
strategy may be shown to reject significantly fewer container scheduling requests compared to the
“spread” strategy.</p>
    </sec>
    <sec id="sec-7">
      <title>7. Discussion</title>
      <p>While this article comprehensively covers the design of the application, it is important to remember
that this is not the software itself. The choice of technology and the discussion around the alternative
higher-level organization of components remain open topics. A judicious selection of technology and
supporting infrastructure is crucial to ensure that the designed software remains both flexible and
scalable. One efective approach to organize such a project is to make it open source, thus allowing
contributions from all interested parties.</p>
      <p>Another promising direction for this system is the development of a real-time system that relies on
experiment results to make further scheduling decisions. It’s also important to ensure that the system
can be extended with new key performance indicators and strategy algorithms. A potential next step
could be exploring the most suitable structure for the cluster, rather than just looking for a strategy
that fits a certain setup. By doing so, the experiment could provide even more valuable insights.</p>
    </sec>
    <sec id="sec-8">
      <title>8. Conclusion</title>
      <p>This paper delves into the design of a system that enables the evaluation of scheduling strategy
algorithms within the context of distributed systems, particularly in relation to microservices architectures
where COS is extensively utilized. The related works underline the importance of selecting the
appropriate strategy and show how such a decision could afect diferent parts of distributed systems, like
resource utilization or fault tolerance.</p>
      <p>One of the main goals when designing such a system is to ensure its flexibility. This flexibility allows
for the testing of diferent aspects of distributed systems reliant on COS. The proposed division of
responsibilities among diferent components, such as the topology stream, configuration stream, packer,
strategy, cluster, nodes, containers, aggregators, and malfunctions, allows for extensive customization
of the experiment flow to achieve the desired behavior. For example, such system can be used to
compare the degree of resource fragmentation on the cluster nodes and thus assess the eficiency of
resource utilization, measure the rates of containers creation or rejection, evaluate the availability of
applications encountering various network partitions or node failures. The client-server organization
of these components separates the representation of results from the experiment execution itself. This
separation removes any assumptions about how experiment results can be utilized, thereby opening up
a variety of other use cases, such as enabling a higher-level system that relies on the experiment’s API
for making scheduling decisions.</p>
      <p>The next step would be the implementation of such a system. This could significantly accelerate
further research in the fields of resource distribution and distributed systems. The system would not only
ofer a platform for experimentation but also become a valuable source of knowledge about scheduling
algorithms.</p>
    </sec>
    <sec id="sec-9">
      <title>9. Authors contribution</title>
      <p>The authors confirm contribution to the paper as follows: study conception and design: Voievodin Y.,
Rozlomii I.; data collection: Voievodin Y.; analysis and interpretation of results: Voievodin Y., Rozlomii
I.; manuscript preparation: Voievodin Y. All authors reviewed the results and approved the final version
of the manuscript.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Rodriguez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Buyya</surname>
          </string-name>
          ,
          <article-title>Container-based cluster orchestration systems: A taxonomy and future directions</article-title>
          ,
          <source>Software: Practice and Experience</source>
          <volume>49</volume>
          (
          <year>2019</year>
          )
          <fpage>698</fpage>
          -
          <lpage>719</lpage>
          . doi:https://doi.org/ 10.1002/spe.2660.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>T.</given-names>
            <surname>Siddiqui</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. A.</given-names>
            <surname>Siddiqui</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N. A.</given-names>
            <surname>Khan</surname>
          </string-name>
          ,
          <source>Comprehensive Analysis of Container Technology, in: 2019 4th International Conference on Information Systems and Computer Networks (ISCON)</source>
          ,
          <year>2019</year>
          , pp.
          <fpage>218</fpage>
          -
          <lpage>223</lpage>
          . doi:
          <volume>10</volume>
          .1109/ISCON47742.
          <year>2019</year>
          .
          <volume>9036238</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>H. M.</given-names>
            <surname>Fard</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Prodan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Wolf</surname>
          </string-name>
          ,
          <article-title>Dynamic Multi-objective Scheduling of Microservices in the Cloud</article-title>
          ,
          <source>in: 2020 IEEE/ACM 13th International Conference on Utility and Cloud Computing (UCC)</source>
          ,
          <year>2020</year>
          , pp.
          <fpage>386</fpage>
          -
          <lpage>393</lpage>
          . doi:
          <volume>10</volume>
          .1109/UCC48980.
          <year>2020</year>
          .
          <volume>00061</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>P.</given-names>
            <surname>Kumari</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Kaur</surname>
          </string-name>
          ,
          <article-title>A survey of fault tolerance in cloud computing</article-title>
          ,
          <source>Journal of King Saud University - Computer and Information Sciences</source>
          <volume>33</volume>
          (
          <year>2021</year>
          )
          <fpage>1159</fpage>
          -
          <lpage>1176</lpage>
          . doi:
          <volume>10</volume>
          .1016/j.jksuci.
          <year>2018</year>
          .
          <volume>09</volume>
          . 021.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Zhong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Xu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Rodriguez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Xu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Buyya</surname>
          </string-name>
          ,
          <article-title>Machine Learning-based Orchestration of Containers: A Taxonomy and Future Directions</article-title>
          ,
          <source>ACM Comput. Surv</source>
          .
          <volume>54</volume>
          (
          <year>2022</year>
          )
          <article-title>217</article-title>
          . doi:
          <volume>10</volume>
          .1145/ 3510415.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Voievodin</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Rozlomii</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Yarmilko</surname>
          </string-name>
          ,
          <article-title>Approach to Evaluate Scheduling Strategies in Container Orchestration Systems</article-title>
          , in: Modeling,
          <source>Control and Information Technologies: Proceedings of International scientific and practical conference</source>
          ,
          <volume>6</volume>
          ,
          <year>2023</year>
          , pp.
          <fpage>292</fpage>
          -
          <lpage>295</lpage>
          . doi:
          <volume>10</volume>
          .31713/
          <string-name>
            <surname>mcit</surname>
          </string-name>
          .
          <year>2023</year>
          .
          <volume>089</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>V.</given-names>
            <surname>Bushong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. S.</given-names>
            <surname>Abdelfattah</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. A.</given-names>
            <surname>Maruf</surname>
          </string-name>
          ,
          <string-name>
            <surname>D. Das</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Lehman</surname>
            , E. Jaroszewski,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Cofey</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Cerny</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Frajtak</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Tisnovsky</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Bures</surname>
          </string-name>
          ,
          <article-title>On Microservice Analysis and Architecture Evolution: A Systematic Mapping Study</article-title>
          ,
          <source>Applied Sciences</source>
          <volume>11</volume>
          (
          <year>2021</year>
          )
          <article-title>7856</article-title>
          . doi:
          <volume>10</volume>
          .3390/app11177856.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>I. M. A.</given-names>
            <surname>Jawarneh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Bellavista</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Bosi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Foschini</surname>
          </string-name>
          , G. Martuscelli,
          <string-name>
            <given-names>R.</given-names>
            <surname>Montanari</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Palopoli</surname>
          </string-name>
          , Container Orchestration Engines:
          <article-title>A Thorough Functional and Performance Comparison</article-title>
          , in: ICC 2019
          <article-title>-</article-title>
          2019
          <source>IEEE International Conference on Communications (ICC)</source>
          ,
          <year>2019</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>6</lpage>
          . doi:
          <volume>10</volume>
          .1109/ ICC.
          <year>2019</year>
          .
          <volume>8762053</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A.</given-names>
            <surname>Saboor</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. F.</given-names>
            <surname>Hassan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Akbar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. N. M.</given-names>
            <surname>Shah</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Hassan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. A.</given-names>
            <surname>Magsi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Siddiqui</surname>
          </string-name>
          ,
          <article-title>Containerized Microservices Orchestration and Provisioning in Cloud Computing: A Conceptual Framework</article-title>
          and Future Perspectives,
          <source>Applied Sciences</source>
          <volume>12</volume>
          (
          <year>2022</year>
          )
          <article-title>5793</article-title>
          . doi:
          <volume>10</volume>
          .3390/app12125793.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>J.</given-names>
            <surname>Flora</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Gonçalves</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Teixeira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Antunes</surname>
          </string-name>
          ,
          <string-name>
            <surname>A</surname>
          </string-name>
          <article-title>Study on the Aging and Fault Tolerance of Microservices in Kubernetes</article-title>
          ,
          <source>IEEE Access 10</source>
          (
          <year>2022</year>
          )
          <fpage>132786</fpage>
          -
          <lpage>132799</lpage>
          . doi:
          <volume>10</volume>
          .1109/ACCESS.
          <year>2022</year>
          .
          <volume>3231191</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>S. V.</given-names>
            <surname>Gogouvitis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Mueller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Premnadh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Seitz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Bruegge</surname>
          </string-name>
          ,
          <article-title>Seamless computing in industrial systems using container orchestration</article-title>
          ,
          <source>Future Generation Computer Systems</source>
          <volume>109</volume>
          (
          <year>2020</year>
          )
          <fpage>678</fpage>
          -
          <lpage>688</lpage>
          . doi:
          <volume>10</volume>
          .1016/j.future.
          <year>2018</year>
          .
          <volume>07</volume>
          .033.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Akuthota</surname>
          </string-name>
          ,
          <article-title>Chaos Engineering for Microservices, A Starred Paper Submitted in Partial Fulfillment of the Requirements for the Degree Master of Science in Computer Science</article-title>
          , St. Cloud State University,
          <year>2023</year>
          . URL: https://repository.stcloudstate.edu/csit_etds/42/.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>J.</given-names>
            <surname>Jang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Jung</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hong</surname>
          </string-name>
          ,
          <article-title>An eficient virtual cpu scheduling in cloud computing</article-title>
          ,
          <source>Soft Computing</source>
          <volume>24</volume>
          (
          <year>2020</year>
          )
          <fpage>5987</fpage>
          -
          <lpage>5997</lpage>
          . doi:
          <volume>10</volume>
          .1007/s00500-019-04551-w.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>A. P.</given-names>
            <surname>Shriniwar</surname>
          </string-name>
          , Container Scheduling Using TOPSIS Algorithm, Msc research project,
          <source>National College of Ireland</source>
          , Dublin,
          <year>2020</year>
          . URL: https://norma.ncirl.ie/4551/.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>T.</given-names>
            <surname>Du</surname>
          </string-name>
          , G. Xiao,
          <string-name>
            <given-names>J.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Sun</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Geng</surname>
          </string-name>
          ,
          <article-title>A combined priority scheduling method for distributed machine learning</article-title>
          ,
          <source>EURASIP Journal on Wireless Communications and Networking</source>
          <year>2023</year>
          (
          <year>2023</year>
          )
          <article-title>45</article-title>
          . doi:
          <volume>10</volume>
          .1186/s13638-023-02253-4.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>B.</given-names>
            <surname>Liu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Lin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Shu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Chang</surname>
          </string-name>
          ,
          <article-title>A new container scheduling algorithm based on multi-objective optimization</article-title>
          ,
          <source>Soft Computing</source>
          <volume>22</volume>
          (
          <year>2018</year>
          )
          <fpage>7741</fpage>
          -
          <lpage>7752</lpage>
          . doi:
          <volume>10</volume>
          .1007/ s00500-018-3403-7.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>C.</given-names>
            <surname>Kaewkasi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Chuenmuneewong</surname>
          </string-name>
          ,
          <article-title>Improvement of container scheduling for Docker using Ant Colony Optimization</article-title>
          ,
          <source>in: 2017 9th International Conference on Knowledge and Smart Technology</source>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>