<!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>Survey of software configuration management tools of nodes in heterogeneous distributed computing environment</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>R. O. Kostromin</string-name>
          <email>kostromin@icc.ru</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Matrosov Institute for System Dynamics and Control Theory of SB RAS</institution>
          ,
          <addr-line>Lermontov St. 134, Irkutsk, Russia, 664033</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>The paper discusses the problem of preparing a computing environment for largescale scientific experiments in the process of continuous integration of applied and system software. A comparative analysis of software configuration management tools (such as Chef, Ansible, Puppet, and SaltStack) of computational nodes in a heterogeneous environment is being performed. These tools are intended for automating the configuration of different nodes. Such automation reduces the setup time of nodes and increases the reliability of computations by minimizing the number of software and hardware failures, associated with the human factor in the manual configuration process. For the development of scientific applications, the Orlando Tools framework is used. Based on the results of the comparative analysis and requirements of this framework, the Ansible framework was selected for further integration into the chain of continuous integration of applied and system software. Practical experiments have shown the advantages of using Ansible in comparison with other systems of a similar purpose.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        Currently, software development is a complex and multi-step process [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Usually, these processes
include the steps of testing, debugging, and delivering software to end-users. The development of an
automated chain of effective delivery for both the applications in a whole and their components and
modules is still a vital problem. In practice, a useful approach to solving this problem is the Continuous
Integration (CI) of software [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>The CI tools create an automated chain of steps from receiving updated source code from the
repository to deploying a finished scientific application. Within of CI, users receive a software product
as a service. They regularly develop new or modify existing versions of applications, debug their
software, and test it.</p>
      <p>
        Developers are forced to accompany both the application and computing infrastructure with software
development environment necessary for debugging and testing during the CI process. This leads to a
new concept of representing the infrastructure in the form of code (Infrastructure as Code [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]). As a
result, a manual configuration of such infrastructure takes significant time in preparing an application
for release.
      </p>
      <p>
        Manual infrastructure management obstructs the development and maintenance of software. Using
own automation scripts complicates its development and maintenance. In particular, this refers to the
Parallel SSH tools for a parallel script execution [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. The above-listed problems arise in both the
commercial and scientific sphere of software development.
      </p>
      <p>
        Applications for assisting in solving research and applied problems on supercomputers are truly
important in the scientific field [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Usually, such applications have a modular structure and represent a
distributed applied software package [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. Such packages are designed for multiple runs with different
sets of input data in environments with the various configurations and sets of resources.
      </p>
      <p>
        Software packages for the public access Irkutsk Supercomputer Center (ISC) [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] are developed using
the Orlando Tools framework [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. The specifics of the problems solved with these packages determine
the frequent modifications of the application software. In this regard, new CI tools are integrated into
its architecture [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
      </p>
      <p>
        However, infrastructure configuration automation for debugging and testing packages is still a
challenge [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. In particular, there remains a need to prepare and store various Virtual Machine (VM)
images for different Operating Systems (OSes) and software versions. In this case, the disk space is
quickly exhausted. In addition, this complicates the infrastructure maintenance.
      </p>
      <p>Thus, the following requirements for configuration management tools are formulated:
 Support managing a wide range of OSes,
 Full control at every stage of node configurations for the computing infrastructure,
 Easy deployment with the minimal preparation of user nodes,
 Free distribution,
 Server-side initialization of slave node configuration changes (within of the CI chain),
 Node management using the SSH protocol (in particular, for managing low-performance
peripherals used in fog computing).</p>
      <p>
        The paper discusses the well-known Software Configuration Management (SCM) tools of nodes in
a computing environment [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. The important properties of such systems and configuration management
scheme are considered.
      </p>
      <p>The rest of the paper is organized as follows. Section 2 reviews the properties of four SCM tools.
Particular attention is paid for two systems. Their characteristics are compared in section 3. A
comparative analysis of different methods for managing configurations of nodes in an experimental
environment is presented in Section 4. The last section concludes the paper.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related work</title>
      <p>
        Currently, a wide range of the SCM tools is known [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. These tools automate the configuration
processes of various nodes and deploy a computing infrastructure with the subsequent delivery of
applications to its nodes.
      </p>
      <p>In addition, such systems can improve the manageability and reliability of both the configuration
processes and maintenance of infrastructure nodes. However, preparing and launching VMs are not
supported in SCM. This process is implemented using hypervisors or special add-ons [11].</p>
      <p>It is assumed that the SCM tools executed on OS with a clean installation. Tools configure and
prepare the nodes for work. Thus, the software developer defines the configuration requirements for the
node. During the operation of nodes, their configurations are monitored and configured by the SCM
tools in accordance with the requirements. The general SCM scheme is presented in Figure 1.</p>
      <p>By executing special program code (scripts), the SCM tools allow us automatically lead the
computing infrastructure to the target state [12]. Such code is conveniently developed, modified, and
maintained using version control systems such as Git [13] and Mercurial [14]. The software developer
creates and stores the infrastructure specification in the repository. Then the translation component
(agent) independently or at the signal of the administrator passes the specification (profile) to the slave
nodes. In nodes, these profiles are represented as a set of executable commands by deployment
components (agents). On slave nodes, these profiles are represented as a set of executable commands
by deployment components (agents).</p>
      <p>The most popular SCM tools are Puppet [15], Chef [16], Ansible [17], and SaltStack [18]. Their
general characteristics are presented in Table 1. Among them the system development language,
Configuration Description Language (CDL), system architecture, software distribution license, and
supported platform. Within the execution of distributed application packages, an important requirement
is a support for managing Windows and Linux OSes families. The paper does not discuss systems whose
development is suspended or discontinued, as well as proprietary systems.</p>
      <p>In a client-server architecture, an agent is a host-side software that manages the configuration of its
node within SCM. The agentless architecture allows us to control nodes without installing additional
software via the SSH protocol. The presence of a special (proprietary) agent in the SCM tools limits the
types of OSes whose configurations can be controlled. Among the systems reviewed, only Ansible is a
system with a completely agentless architecture. At the same time, SaltStack also allows us to use the
agentless mode. However, in this mode, it works much slower than its proprietary protocol. In general,
in each system, there are agents to support the most popular OSes.</p>
      <p>All of the considered systems are actively developing. The official websites of the systems present
ull manuals. They describe all processes from the installation of systems to their usage in software
development. Each system is surrounded by an international community of users and enthusiasts. This
positively affects the development of the systems.</p>
    </sec>
    <sec id="sec-3">
      <title>Configuration Description Language</title>
      <p>YAML-like,</p>
      <p>JSON</p>
      <p>Ruby-like
(proprietary)
YAML-like</p>
    </sec>
    <sec id="sec-4">
      <title>Platform support</title>
    </sec>
    <sec id="sec-5">
      <title>Linux Windows</title>
      <p>+
+
+
+
+
+
+
+
System
Ansible</p>
      <p>System
development
language</p>
      <p>Puppet
SaltStack
C++ &amp;
Clojure
Python
Apache</p>
      <p>2.0
Apache</p>
      <p>2.0
Apache
2.0
Client-server
Agentless /
Client-server</p>
    </sec>
    <sec id="sec-6">
      <title>License</title>
    </sec>
    <sec id="sec-7">
      <title>Architecture</title>
      <p>Python</p>
      <p>GPLv3+</p>
      <p>Agentless
Chef</p>
      <p>Ruby, Erlang</p>
      <p>Client-server</p>
      <p>Ruby</p>
      <p>All four systems provide a web-interface for configuration management. It can be used to create
reports and visualize the infrastructure configuration. In addition, all of the systems have the ability for
connecting to an external monitoring system. SaltStack uses its own implementation for that.</p>
      <p>The features of the considered SCM tools are reflected in the system characteristics, description
specifics, delivery methods, and installation of system configurations. These characteristics are shown
in Table 2.</p>
      <p>Database. On deploying Puppet and Chef, the PuppetDB and PostgreSQL database systems are used,
respectively. These databases provide centralized configuration storage. The performance and
scalability of each system directly depend on the database used. In addition, the database server requires
additional maintenance.</p>
      <p>Enterprise version of Ansible uses PostgreSQL. In addition, it is allowing to install MongoDB
(MySQL) to build fault-tolerant architectures and for storing logs.</p>
      <p>Configuration Delivery. Each of the considered systems uses its own method of the configuration
delivery (transportation) from the repository to the node. At the same time, only Ansible uses SSH
(Powershell on Windows) to deliver configurations. Theoretically, Ansible allowing control of any
device that supports SSH.</p>
      <p>Supported server OS. Ansible provides support for a wide range of OSes on the master node.
Theoretically, any OS that supports Python 2.6 is also supported. SaltStack runs on both Linux and BSD.
Puppet and Chef master nodes work only on Linux-kernel OSes. Among them are RHEL, SLES, and
the latest versions of Ubuntu.</p>
      <p>Step-by-step installation. Only Ansible and Chef use a step-by-step approach to configuring nodes.
Within the SCM, a step-by-step execution is understood as a sequential execution of all the actions
described in the configuration file. This approach is called an imperative configuration. Puppet and
SaltStack use a declarative configuration. This means that the configuration file describes only the final
state of the node. In this case, the system itself chooses the best path to achieve this state. A declarative
configuration is preferred for nodes of the same type. At the same time, the imperative configuration
provides full control over the process of changing the state of the node.</p>
      <p>Method for delivering configuration changes from a master node to slave nodes. The following two
delivery methods are considered: Push and Pull. In the case of Push, the master node itself monitors
changes and, if necessary, initiates an update from clients. For the Pull method, client agents periodically
request the server for updates.</p>
      <p>The monitoring of changes in configurations is an important characteristic in creating an
experimental and production computing infrastructure. Push-approach provides quick delivery of
configurations to nodes. Only Puppet and Ansible support Push. In this case, Chef is not considered,
since the use of Push is available only in the commercial version. In this regard, only the Puppet and
Ansible systems are discussed in more detail below. Both of these systems have integration tools with
Docker, Kubernetes, and Jenkins, which are actively used in the framework of CI.</p>
    </sec>
    <sec id="sec-8">
      <title>3. Puppet vs Ansible</title>
      <p>Node Management in Puppet and Ansible. The first step in configuring Ansible is to select the master
node. If there is an Ansible package in the repository of the OS of the node, this node may be the
masternode. At this stage, we need to install Ansible and specify a list of IP-addresses of slave nodes
(inventory). In this case, there is no need to configure client software. The only condition is providing
access via SSH from the master node to the slave nodes. The node management scheme in Ansible is
shown in Figure 2. The node configuration description in Ansible is presented as a PlayBook.</p>
      <p>The node management scheme in Puppet is shown in Figure 3. Preparing Puppet for functioning is
more difficult. First, it is necessary to synchronize time and time zone on all nodes. Next, it is required
to install the server and client software. In addition, the following operations must be performed:
 Editing a configuration file for each slave node on the Puppet server,
 Opening port 8140,
 Starting the PuppetServer service,
 Specifying the IP-address of the master node and generating an SSL certificate on slave nodes.</p>
      <p>The need to generate an SSL certificate is determined by the fact that the protocol uses HTTPS
for communication.</p>
      <p>Configuration description in Ansible. Listing 1 demonstrates the YAML code snippet of an Ansible
PlayBook from the official Ansible examples repository [19]. In this example, the Tomcat web-server
is installed on Centos on slave nodes. The first step is to install Java JDK 1.7. After that, the creation
and configuration of the tomcat user are performed. In particular, super-user rights are added to him.
Next, downloading the Tomcat source code from the repository, unpacking, configuring, and installing
are performed. The YAML code is well readable. This simplifies the development with Ansible.
--- name: Install Java 1.7</p>
      <p>yum: name=java-1.7.0-openjdk state=present
- name: add group "tomcat"</p>
      <p>group: name=tomcat
- name: add user "tomcat"
user: name=tomcat group=tomcat home=/usr/share/tomcat createhome=no
become: True
become_method: sudo
- name: Download Tomcat</p>
      <p>get_url:
url=http://archive.apache.org/dist/tomcat/tomcat7/v7.0.61/bin/apache-tomcat-7.0.61.tar.gz
dest=/opt/apache-tomcat7.0.61.tar.gz
- name: Extract archive</p>
      <p>command: chdir=/usr/share /bin/tar xvf
/opt/apache-tomcat7.0.61.tar.gz -C /opt/ creates=/opt/apache-tomcat-7.0.61
- name: Symlink install directory</p>
      <p>file: src=/opt/apache-tomcat-7.0.61 path=/usr/share/tomcat state=link
- name: Change ownership of Tomcat installation</p>
      <p>file: path=/usr/share/tomcat/ owner=tomcat group=tomcat
state=directory recurse=yes
- name: Configure Tomcat server
template: src=server.xml dest=/usr/share/tomcat/conf/
notify: restart tomcat
- name: Configure Tomcat users
template: src=tomcat-users.xml dest=/usr/share/tomcat/conf/
notify: restart tomcat
- name: Install Tomcat init script</p>
      <p>copy: src=tomcat-initscript.sh dest=/etc/init.d/tomcat mode=0755
- name: Start Tomcat</p>
      <p>service: name=tomcat state=started enabled=yes
- name: deploy iptables rules
template: src=iptables-save dest=/etc/sysconfig/iptables
when: "ansible_os_family == 'RedHat' and
ansible_distribution_major_version == '6'"</p>
      <p>notify: restart iptables
- name: insert firewalld rule for tomcat http port</p>
      <p>firewalld: port={{ http_port }}/tcp permanent=true state=enabled
immediate=yes</p>
      <p>when: "ansible_os_family == 'RedHat' and
ansible_distribution_major_version == '7'"
- name: insert firewalld rule for tomcat https port</p>
      <p>firewalld: port={{ https_port }}/tcp permanent=true state=enabled
immediate=yes</p>
      <p>when: "ansible_os_family == 'RedHat' and
ansible_distribution_major_version == '7'"
- name: wait for tomcat to start</p>
      <p>wait_for: port={{http_port}}
Listing 1: YAML-code snippet of Ansible PlayBook from the official Ansible examples repository.</p>
      <p>Configuration description in Puppet. The configuration description (Puppet manifest) is created in a
subject-oriented Ruby-like language. Listing 2 demonstrates a code snippet of the configuration
description in Puppet from the repository puppetlabs/mysql, which covers the installation and
configuration of MySQL [20].</p>
      <p>Consider the advantages and disadvantages of Puppet and Ansible.</p>
      <p>In general, each of the systems has its own advantages and disadvantages. Based on the requirements
formulated in the introduction, it was decided to integrate the Ansible system into the CI chain of the
Orlando Tools framework. This is due to the following reasons:
 Support for managing the most popular OSes,
 Using an agentless approach that simplifies a system setup,
 Using an imperative configuration of nodes provides complete control over the installation
of software at each stage,
 Free distribution under the GPLv3+ license,
 Using the Push method to deliver configurations,
 Node control via the SSH protocol, which allows us to manage any device that supports
this protocol.</p>
    </sec>
    <sec id="sec-9">
      <title>4. Comparative analysis</title>
      <p>In a comparative analysis, the makespan of preparing 10 nodes of the experimental computing
environment is estimated. 10 VMs are launched on 10 nodes of the environment using a special
hypervisor add-on developed in addition to OpenStack [11]. VMs are launched using prepared images.</p>
      <p>The experimental environment is based on the ISC resources. Centos 7 is installed on five nodes,
Ubuntu 18.04 is used on the remaining nodes. Each OS provides SSH key access.</p>
      <p>All VMs should be prepared to deploy Orlando Tools framework. It is requires Apache Web server,
PHP version 7.2, Maria DB version 10, and other system software. There are several ways to prepare an
experimental computing environment without using Ansible:
 Preparation of the fully customized VM images for all possibleible cases,
 Manually installation and configuration of each executed VM,
 Automation of the installation using parallel execution of commands (scripts) through</p>
      <p>Parallel SSH.</p>
      <p>Storing the customized images of VMs for all possible cases is impractical since the requirements
for versions of system and application software can often change. In addition, in this approach, free disk
space runs out rapidly.</p>
      <p>In general, automating of a manual installation using Parallel SSH reduces a makespan to configure
nodes. In this case, it is necessary to develop several versions of such scripts for each OS and its versions.
The number of such scenarios is growing very fast since for each case it is necessary to prepare an
appropriate script that will bring the node to working condition. Obviously, the use of Parallel SSH is
unacceptable for numerous heterogeneous nodes in an experimental environment. In addition, the use
of Parallel SSH can lead to additional errors in the development, maintenance, and debugging of
various scripts.</p>
      <p>The histogram in Figure 4 shows the significant reduction of the time for automatic configuration of
nodes, compared to manual configuration. At the same time, the short time for nodes configuration using
scripts is spoiled by the complexity of maintaining and deploying of own scripts. Ansible has no
such problems.</p>
    </sec>
    <sec id="sec-10">
      <title>5. Conclusions</title>
      <p>The paper provides a comparative analysis of the SCM tools for computing infrastructures. Such tools
are designed to automate the configuration of infrastructure nodes. As a result of automation, the time
of node configurations is significantly reduced. In addition, the reliability of nodes is improved by
reducing the configuration errors associated with the human factor.</p>
      <p>The advantages of SCM are especially evident in its integration into the CI chain. At the same time,
the required number of VMs is launched using virtualization tools. Further VM configuration is
performed automatically by SCM.</p>
      <p>Based on the results of the performed analysis, Ansible was selected for integration into the CI chain
in Orlando Tools. The results of an experimental analysis of the preparation of an experimental
computing environment have demonstrated the advantages of in using Ansible. Thus, it provides an
improvement in the quality of development, testing, and distribution of modules of distributed applied
software packages.</p>
    </sec>
    <sec id="sec-11">
      <title>Acknowledgments</title>
      <p>The study is supported by the Basic Research Program of SB RAS, project no. IV.38.1.1.
[11] Feoktistov A, Sidorov I, Sergeev V, Kostromin R and Bogdanova V 2017 Virtualization of
heterogeneous HPC-clusters based on OpenStack platform South Ural State University
Bulletin: Computational Mathematics and Software Engineering series 6(2) 37–48
[12] Delaet T, Joosen W and Vanbrabant B 2010 A survey of system configuration tools Proc. of the
24th Int. conf. on Large installation system administration (USENIX Association, USA)
pp 1–8
[13] GitHub. Available at: https://github.com/ (accessed: 10.06.2020)
[14] Mercurial. Available at: https://www.mercurial-scm.org/ (accessed: 10.06.2020)
[15] Puppet. Available at: https://puppet.com/ (accessed: 10.06.2020)
[16] Chef. Available at: https://www.chef.io/products/chef-infra (accessed: 10.06.2020)
[17] Ansible. Available at: https://www.ansible.com/ (accessed: 10.06.2020)
[18] SaltStack. Available at: https://www.saltstack.com/ (accessed: 10.06.2020)
[19] Ansible PlayBook examples repository. Available at:
https://github.com/ansible/ansibleexamples/tree/master/tomcat-standalone (accessed: 10.06.2020)
[20] Puppetlabs manifest examples repository. Available at:
https://forge.puppet.com/puppetlabs/mysq (accessed: 10.06.2020)</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Kim</surname>
            <given-names>G</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Debois</surname>
            <given-names>P</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Willis</surname>
            <given-names>J</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Humble J 2016 The DevOps Handbook: How to Create World-Class</surname>
            <given-names>Agility</given-names>
          </string-name>
          , Reliability, and Security in Technology Organizations (IT Revolution Press) p
          <fpage>480</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Shahin</surname>
            <given-names>M</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Babar</surname>
            <given-names>M A</given-names>
          </string-name>
          and
          <string-name>
            <surname>Zhu L 2017</surname>
          </string-name>
          <article-title>Continuous integration, delivery and deployment: a systematic review on approaches, tools, challenges</article-title>
          and
          <source>practices IEEE Access</source>
          <volume>5</volume>
          <fpage>3909</fpage>
          -
          <lpage>3943</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Morris</surname>
            <given-names>K 2016</given-names>
          </string-name>
          <string-name>
            <surname>Infrastructure as Code (O'Reilly Media</surname>
          </string-name>
          ) p
          <fpage>362</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Parallel-SSH</surname>
          </string-name>
          . Available at: https://parallel-ssh.
          <source>org/ (accessed: 10.06</source>
          .
          <year>2020</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Inggs</surname>
            <given-names>G</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Thomas D B and Luk W 2017 A Domain</surname>
          </string-name>
          <article-title>Specific Approach to High Performance Heterogeneous Computing IEEE Transactions on Parallel</article-title>
          and
          <source>Distributed Systems</source>
          <volume>28</volume>
          (
          <issue>1</issue>
          )
          <fpage>2</fpage>
          -
          <lpage>15</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Feoktistov</surname>
            <given-names>A G</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kostromin</surname>
            <given-names>R O</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sidorov</surname>
            <given-names>I A</given-names>
          </string-name>
          and
          <string-name>
            <surname>Gorsky</surname>
            <given-names>S A</given-names>
          </string-name>
          <year>2018</year>
          <article-title>Development of Distributed Subject-Oriented Applications for Cloud Computing through the Integration of Conceptual and Modular Programming Proceedings of the 41st Intern. Convention on information and communication technology, electronics and microelectronics (MIPRO-</article-title>
          <year>2018</year>
          )
          <article-title>(Riejka</article-title>
          : IEEE) pp
          <fpage>256</fpage>
          -
          <lpage>261</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <article-title>[7] Public access center Irkutsk Supercomputer Center</article-title>
          . Available at: http://hpc.icc.
          <source>ru (accessed: 10.06</source>
          .
          <year>2020</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Tchernykh</surname>
            <given-names>A</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Feoktistov</surname>
            <given-names>A</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gorsky</surname>
            <given-names>S</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sidorov</surname>
            <given-names>I</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kostromin</surname>
            <given-names>R</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bychkov</surname>
            <given-names>I</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Basharina</surname>
            <given-names>O</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Alexandrov</surname>
            <given-names>A</given-names>
          </string-name>
          and
          <string-name>
            <surname>Rivera-Rodriguez R 2019 Orlando</surname>
          </string-name>
          <article-title>Tools: Development, Training,</article-title>
          and
          <article-title>Use of Scalable Applications in Heterogeneous Distributed Computing Environments Comm</article-title>
          . Com. Inf. Sc.
          <volume>979</volume>
          <fpage>265</fpage>
          -
          <lpage>279</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Feoktistov</surname>
            <given-names>A</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gorsky</surname>
            <given-names>S</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sidorov</surname>
            <given-names>I</given-names>
          </string-name>
          and
          <article-title>Tchernykh A 2019 Continuous Integration in Distributed Applied Software Packages Proc. of the 42th Int. Convention on information and communication technology, electronics and microelectronics (Riejka</article-title>
          : IEEE) pp
          <fpage>1775</fpage>
          -
          <lpage>1780</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Quigley J M</surname>
            ,
            <given-names>Robertson K L 2015 Configuration Management: Theory</given-names>
          </string-name>
          , Practice, and
          <string-name>
            <surname>Application</surname>
          </string-name>
          (Auerbach Publications) p
          <fpage>438</fpage>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>