<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article  PUBLIC "-//NLM//DTD Journal Publishing DTD v3.0 20080202//EN" "http://dtd.nlm.nih.gov/publishing/3.0/journalpublishing3.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="3.0" xml:lang="en" article-type="research article"><front><journal-meta><journal-id journal-id-type="publisher-id">JSEA</journal-id><journal-title-group><journal-title>Journal of Software Engineering and Applications</journal-title></journal-title-group><issn pub-type="epub">1945-3116</issn><publisher><publisher-name>Scientific Research Publishing</publisher-name></publisher></journal-meta><article-meta><article-id pub-id-type="doi">10.4236/jsea.2021.148026</article-id><article-id pub-id-type="publisher-id">JSEA-111587</article-id><article-categories><subj-group subj-group-type="heading"><subject>Articles</subject></subj-group><subj-group subj-group-type="Discipline-v2"><subject>Computer Science&amp;Communications</subject></subj-group></article-categories><title-group><article-title>
 
 
  Towards a Framework for Evaluating Technologies for Implementing Microservices Architectures
 
</article-title></title-group><contrib-group><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Aristide</surname><given-names>Massaga</given-names></name><xref ref-type="aff" rid="aff1"><sup>1</sup></xref><xref ref-type="corresp" rid="cor1"><sup>*</sup></xref></contrib><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Georges</surname><given-names>Edouard Kouamou</given-names></name><xref ref-type="aff" rid="aff1"><sup>1</sup></xref></contrib></contrib-group><aff id="aff1"><addr-line>Department of Computer Engineering, National Advanced School of Engineering, Yaoundé, Cameroon</addr-line></aff><pub-date pub-type="epub"><day>03</day><month>08</month><year>2021</year></pub-date><volume>14</volume><issue>08</issue><fpage>442</fpage><lpage>453</lpage><history><date date-type="received"><day>13,</day>	<month>July</month>	<year>2021</year></date><date date-type="rev-recd"><day>27,</day>	<month>August</month>	<year>2021</year>	</date><date date-type="accepted"><day>30,</day>	<month>August</month>	<year>2021</year></date></history><permissions><copyright-statement>&#169; Copyright  2014 by authors and Scientific Research Publishing Inc. </copyright-statement><copyright-year>2014</copyright-year><license><license-p>This work is licensed under the Creative Commons Attribution International License (CC BY). http://creativecommons.org/licenses/by/4.0/</license-p></license></permissions><abstract><p>
 
 
  Microservice architecture is an architectural style, which allows structuring software as a suite of fine-grained services, each running in its process and deployed independently. Knowing the strengths and limitations of this architectural style, the development team is responsible to select the appropriate technologies which guarantee the consistency between the implementation and the design. This study proposes an evaluation framework which consists of a set of evaluation criteria that are architectural patterns recognized by the community and covering all the implementation aspects of software; and an evaluation function which combines these criteria for a given technology to determine its compatibility score with the microservice style, while taking into account the specific requirements of the software under development. Applying this approach to Spring Boot and JAVA EE technologies, we found that Spring Boot scores 96.3% while JAVA EE scores 44.4%. These scores reflect the effort required to conform software with the principles of this development style.
 
</p></abstract><kwd-group><kwd>Microservice Architecture</kwd><kwd> Evaluation Criteria</kwd><kwd> Architectural Patterns</kwd><kwd> Spring Boot</kwd><kwd> JAVA EE</kwd></kwd-group></article-meta></front><body><sec id="s1"><title>1. Introduction</title><p>Like all architectural styles, the microservice style is a solution to a software structuring problem that the software industry has faced. A microservice is a lightweight, independent service that performs unique functions and collaborates with other similar services using a well-defined interface [<xref ref-type="bibr" rid="scirp.111587-ref1">1</xref>]. Microservice architecture is an architectural style that structures software as a collection of services: Highly maintainable and testable; loosely coupled; independently deployable; organized around enterprise capabilities; developed by a small team [<xref ref-type="bibr" rid="scirp.111587-ref2">2</xref>].</p><p>With the emergence of cloud computing and the increasing use of agility in software development processes, the microservice architecture offers many advantages, such that it becomes one of the most suitable styles for these new industry needs, as it offers developers: 1) Ease of integration and automatic deployment; 2) Freedom to develop and deploy independently; 3) Ease of understanding and modification for developers, allowing a new team member to be productive quickly. However, the decomposition of a monolithic software, into microservices also causes problems: 1) Due to distributed deployment, testing can become complicated and tedious; 2) Increasing the number of services can lead to information barriers; 3) Splitting the software into microservices is a highly complex operation.</p><p>Knowing the strengths and limitations of this architectural style, the responsibility is given to the development team to make the right technological choices so that the implementation is as consistent as possible with the design. This requires being able to verify that a technology retains the strengths of the style, that it provides optimal solutions to the problems underlying the style, and that it respects the development standards of the style. The reflection that we carry out in this work is part of this same problem, which is to know how to evaluate the contribution of technology for the implementation of a microservice oriented architecture.</p><p>In the literature, research is mainly oriented towards the verification of the architectural conformity of software [<xref ref-type="bibr" rid="scirp.111587-ref3">3</xref>] [<xref ref-type="bibr" rid="scirp.111587-ref4">4</xref>] [<xref ref-type="bibr" rid="scirp.111587-ref5">5</xref>]. Several approaches have been proposed [<xref ref-type="bibr" rid="scirp.111587-ref6">6</xref>] based on the recognition of code structuring (packages), design patterns or architectural patterns present in software.</p><p>Weinreich et al. [<xref ref-type="bibr" rid="scirp.111587-ref7">7</xref>] address the problem of verifying the conformity of software with the SOA architectural style. Their three-step approach is based on the identification of architectural patterns in software.</p><p>The main contributions of this paper are: 1) A catalog of microservice implementation architectural patterns; 2) A correlation between microservice (distributed systems) issues and architectural patterns; 3) An evaluation function taking as parameters a technology and the requirements of the developed software to assign a compatibility score.</p><p>In the reminder of this paper, Section 2 describes the methodology applied in this study, which consists of the identification of the criteria and the construction of the evaluation function. Section 3 presents an illustration based on the evaluation of two technologies Spring Boot and JAVA EE from the constructed framework. Section 4 concludes the paper, then discusses the future works.</p></sec><sec id="s2"><title>2. Methodology</title><p>Evaluating the compatibility of an architectural style with a certain technology (programming language or framework), consists in verifying that this technology preserves the assets of the style, that it brings solutions to the underlying problems but especially that it respects the standards on which the style is built. The evaluation framework that we propose is articulated in 2 parts:</p><p>1) Choice of Evaluation Criteria: A list of architectural criteria that technology must verify. This checklist is made up of architectural patterns universally recognized and accepted by the microservice community. They are solutions to implement the style at the service level and in their relationships. In fact, if they are respected, they cover all the aspects of the implementation of microservice software, lead to the conservation of the assets of the style, and are solutions to the problems presented.</p><p>2) Evaluation Function: This is a parametric function that: a) For a candidate technology t; b) A set of architectural patterns P from the identified architectural patterns deemed necessary for the software under development; c) And a vector of weighting coefficients E to express the levels of importance varying from one architectural pattern to another. This function returns a score, expressing the degree of compatibility of the studied technology according to the past parameters.</p><sec id="s2_1"><title>2.1. Choice of Evaluation Criteria</title><p>In terms of implementation, the architectural requirements of software vary greatly from one software to another. Therefore, the evaluation criteria to be established must cover as many implementation cases as possible. To achieve this goal, we proceeded in two steps:</p><p>1) Divide the implementation of software into design domains following the domain-driven design (DDD) methodology. At the end of this step, 11 main domains were identified, covering the main crosscutting concerns in the implementation of the microservice style.</p><p>2) Research the architectural patterns that serve as best practices for the implementation of each design domain. At the end of this step 27 main architectural patterns have been identified.</p><p>From this process we obtain the following <xref ref-type="table" rid="table1"><xref ref-type="table" rid="table">Table </xref>1</xref> consisting of 3 columns:</p><p>• The identified domains;</p><p>• The problem covered by the domain: this is stated in the form of a question;</p><p>• Architectural patterns/evaluation criteria: these are the patterns that fall within this domain.</p></sec><sec id="s2_2"><title>2.2. Evaluation Function</title><p>Let P be the set of evaluation criteria to study the compatibility of a technology. The elements of this set are taken from the 27 architectural patterns determined in Section 2.1, so we have: P = { p 1 , p 2 , ⋯ , p n } with n ≤ 27 .</p><table-wrap id="table1" ><label><xref ref-type="table" rid="table1"><xref ref-type="table" rid="table">Table </xref>1</xref></label><caption><title> <xref ref-type="table" rid="table">Table </xref>of evaluation criteria</title></caption><table><tbody><thead><tr><th align="center" valign="middle" >Domains</th><th align="center" valign="middle" >Issues covered</th><th align="center" valign="middle" >Architectural patterns/evaluation criteria</th></tr></thead><tr><td align="center" valign="middle"  rowspan="5"  >Data management</td><td align="center" valign="middle"  rowspan="5"  >Which architecture to adopt for data management (reading, writing)?</td><td align="center" valign="middle" >Database per service</td></tr><tr><td align="center" valign="middle" >API Composition</td></tr><tr><td align="center" valign="middle" >SAGA</td></tr><tr><td align="center" valign="middle" >Domain Event</td></tr><tr><td align="center" valign="middle" >Event sourcing</td></tr><tr><td align="center" valign="middle"  rowspan="2"  >Test management (Testing)</td><td align="center" valign="middle"  rowspan="2"  >How to test processes involving several microservices?</td><td align="center" valign="middle" >Testing of service components</td></tr><tr><td align="center" valign="middle" >Service Integration Contract Testing</td></tr><tr><td align="center" valign="middle"  rowspan="3"  >Deployment</td><td align="center" valign="middle"  rowspan="3"  >How to deploy services written in different languages while ensuring devops requirements?</td><td align="center" valign="middle" >Multiple service instances per host</td></tr><tr><td align="center" valign="middle" >Service instance per container</td></tr><tr><td align="center" valign="middle" >Serverless deployment</td></tr><tr><td align="center" valign="middle" >Cross-cutting concerns</td><td align="center" valign="middle" >How to allow a service to run in multiple environments without modification?</td><td align="center" valign="middle" >Externalized configuration</td></tr><tr><td align="center" valign="middle"  rowspan="2"  >Communication style</td><td align="center" valign="middle"  rowspan="2"  >How to make services communicate?</td><td align="center" valign="middle" >Remote Procedure Invocation (RPI)</td></tr><tr><td align="center" valign="middle" >Message exchange (Messaging)</td></tr><tr><td align="center" valign="middle"  rowspan="2"  >External API</td><td align="center" valign="middle"  rowspan="2"  >How do clients access individual services?</td><td align="center" valign="middle" >API Gateway</td></tr><tr><td align="center" valign="middle" >Backends for frontends</td></tr><tr><td align="center" valign="middle"  rowspan="4"  >Service discovery</td><td align="center" valign="middle"  rowspan="4"  >How does the client of a service, the API gateway or another service, discover the location of a service instance?</td><td align="center" valign="middle" >Service Registry</td></tr><tr><td align="center" valign="middle" >Client-side service discovery</td></tr><tr><td align="center" valign="middle" >Server-side service discovery</td></tr><tr><td align="center" valign="middle" >Self-registration</td></tr><tr><td align="center" valign="middle" >Reliability</td><td align="center" valign="middle" >How do you prevent a network or service failure from affecting other services?</td><td align="center" valign="middle" >Circuit breaker</td></tr><tr><td align="center" valign="middle" >Security</td><td align="center" valign="middle" >How do you communicate the identity of the applicant to the departments processing the software?</td><td align="center" valign="middle" >Access token</td></tr><tr><td align="center" valign="middle"  rowspan="4"  >Observability</td><td align="center" valign="middle"  rowspan="4"  >How to understand the behavior of a software and solve problems?</td><td align="center" valign="middle" >Log aggregation</td></tr><tr><td align="center" valign="middle" >Implementation measures</td></tr><tr><td align="center" valign="middle" >Distributed tracing</td></tr><tr><td align="center" valign="middle" >API Health Check</td></tr><tr><td align="center" valign="middle"  rowspan="2"  >User interface templates</td><td align="center" valign="middle"  rowspan="2"  >How do you implement a screen or UI page that displays data from multiple services?</td><td align="center" valign="middle" >Composition of the page fragment on the server side</td></tr><tr><td align="center" valign="middle" >Composition of the client-side user interface</td></tr></tbody></table></table-wrap><p>Let E = { e 1 , e 2 , ⋯ , e n } with e i ∈ { 1 , 2 , 3 , 4 , 5 } where e i represents the weighting coefficient associated with the architectural pattern p i . It is used to express the level of importance of the pattern p i with respect to the other patterns, for the software that is under development. Thus, the least important patterns will have the value 1 and the most important value 5.</p><p>Let h be the function whose role is to indicate if an architectural pattern is implemented or not in technology. It receives as input two parameters: the technology t and a pattern p i . If this pattern is implemented in the given technology, then h ( t , p i ) = 1 , otherwise h ( t , p i ) = 0 .</p><p>The evaluation function is thus of the form f ( t , P , E ) , where t is a candidate technology for implementation of a microservice software.</p><p>The output of this function is a score, which indicates the level of compatibility of the technology with the microservice style according to the parameters received as input. <xref ref-type="fig" rid="fig1">Figure 1</xref> shows a graphical representation of this function.</p><p>Our evaluation function is therefore as follows:</p><p>f ( t , P , E ) = e 1 &#215; h ( t , p 1 ) + ⋅ ⋅ ⋅ + e n &#215; h ( t , p n ) = ∑ i = 1 n e i &#215; h ( t , p i ) (1)</p><p>Knowing that:</p><p>0 ≤ h ( t , p i ) ≤ 1 and 1 ≤ e i ≤ 5</p><p>⇒ 0 ≤ e i &#215; h ( t , p i ) ≤ 5</p><p>⇒ ∑ i = 1 n 0 ≤ ∑ i = 1 n e i &#215; h ( t , p i ) ≤ ∑ i = 1 n 5</p><p>⇒ 0 ≤ ∑ i = 1 n e i &#215; h ( t , p i ) ≤ 5 n since n ≤ 27 .</p><p>Therefore, the frame of the function f is:</p><p>f ( t , P , E ) ∈ [ 0 , M a x ( E ) &#215; n ] ⊂ ℕ (2)</p><p>From this, we see that the degree of accounting of technology according to the evaluation function varies between 0 and 135.</p></sec></sec><sec id="s3"><title>3. Illustration</title><p>In this section, we illustrate the evaluation of two technologies for the implementation of the microservice style: Spring Boot 2.2.2 and JAVA EE 7. The reasons for this choice are: 1) They are technologies based on the same language; 2) The widely used language [<xref ref-type="bibr" rid="scirp.111587-ref8">8</xref>]; 3) They are backend technologies; 4) The Spring</p><p>Boot framework and the JAVA EE platform are strongly used by the community [<xref ref-type="bibr" rid="scirp.111587-ref8">8</xref>] [<xref ref-type="bibr" rid="scirp.111587-ref9">9</xref>].</p><p>Before the evaluation begins, it is necessary to make some assumptions:</p><p>• Assumption 1: Since we are doing a broad study, the set P will correspond to the 27 patterns identified in Section 2.1.</p><p>• Assumption 2: All patterns p i ∈ P have the same importance level equal to 1, ∀ e i ∈ E , e i = 1 .</p><p>• Assumption 3: The value of the function h, is obtained by checking whether in the universe of official packages of the studied technology there is a package that implements the criterion passed as a parameter.</p><p>From hypotheses 1 and 2, it appears that the compatibility score resulting from the evaluation function will vary between 0 and 27.</p><p>Any evaluation will be done in two steps:</p><p>• Search for the value of the function h, for each criterion;</p><p>• Calculation of the value of the evaluation function f ( t , P , E ) .</p><sec id="s3_1"><title>3.1. Evaluation of Spring Boot 2.2.2</title><p>Spring Boot is a project or a micro framework that aims to facilitate the configuration of a Spring project and to reduce the time allocated to the start-up of a project. To achieve this goal, Spring Boot is based on several elements [<xref ref-type="bibr" rid="scirp.111587-ref10">10</xref>]:</p><p>• A web site (https://start.spring.io/) that allows to quickly generate the project structure;</p><p>• The use of “Starters” to manage the dependencies;</p><p>• Auto-configuration, which applies a default configuration at the start of the software for all dependencies present in it.</p><p>Spring cloud [<xref ref-type="bibr" rid="scirp.111587-ref11">11</xref>] is a project based on Spring Boot, designed to address the specific issue of microservices. It provides developers with tools to quickly create some common patterns in distributed systems.</p><p>From <xref ref-type="table" rid="table">Table </xref>2 obtained by analysis of the Spring Boot technology, the value obtained for the function f is:</p><p>f ( t , P , E ) = 26 .</p><p>Thus, Spring Boot is 96.3% compatible with the microservice architecture.</p></sec><sec id="s3_2"><title>3.2. Evaluation of JAVA EE 7</title><p>JEE (Java Enterprise Edition) is a specification for Oracle’s Java platform for enterprise software. The platform extends Java Platform, Standard Edition (Java SE) by providing an object-relational mapping API, distributed and multi-tier architectures, and web services. The platform is primarily based on modular components running on a software server as in <xref ref-type="fig" rid="fig2">Figure 2</xref>.</p><p>The JAVA EE platform proposes an organization of the code, according to the MVC model (<xref ref-type="fig" rid="fig3">Figure 3</xref>). In the JAVA EE universe, each element has a specific designation:</p><p>• The Controller is called Servlet;</p><table-wrap id="table2" ><label><xref ref-type="table" rid="table">Table </xref>2</label><caption><title> <xref ref-type="table" rid="table">Table </xref>of values of the function h, for the Spring Boot 2.2.2 technology</title></caption><table><tbody><thead><tr><th align="center" valign="middle" ></th><th align="center" valign="middle" >Evaluation criteria</th><th align="center" valign="middle" >h</th><th align="center" valign="middle" >Justification</th></tr></thead><tr><td align="center" valign="middle" >p1</td><td align="center" valign="middle" >Database per service</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Since Spring offers packages for connecting to and manipulating most existing DBMS, it is fully compatible with this criterion.</td></tr><tr><td align="center" valign="middle" >p2</td><td align="center" valign="middle" >API Composition</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to Spring’s data-flow starter, it is possible to compose APIs to obtain data.</td></tr><tr><td align="center" valign="middle" >p3</td><td align="center" valign="middle" >SAGA</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the JMS and ActiveMQ starter, Spring software can manage the events (transmission and reception) necessary for this criterion.</td></tr><tr><td align="center" valign="middle" >p4</td><td align="center" valign="middle" >Domain Event</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the JMS and ActiveMQ starter, Spring software can manage the events (transmission and reception) necessary for this criterion.</td></tr><tr><td align="center" valign="middle" >p5</td><td align="center" valign="middle" >Event sourcing</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the JMS and ActiveMQ starter, Spring software can manage the events (transmission, reception, subscription) necessary for this criterion.</td></tr><tr><td align="center" valign="middle" >p6</td><td align="center" valign="middle" >Testing of service components</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the Spring starter, especially the MOCK tool.</td></tr><tr><td align="center" valign="middle" >p7</td><td align="center" valign="middle" >Service Integration Contract Testing</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the cloud-contract starter, we test the integration of services.</td></tr><tr><td align="center" valign="middle" >p8</td><td align="center" valign="middle" >Multiple service instances per host</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >As soon as a JVM is installed on a host, Spring software can be launched and the execution port is dynamically assigned.</td></tr><tr><td align="center" valign="middle" >p9</td><td align="center" valign="middle" >Service instance per container</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the web-starter, Spring embeds its own web server, making deployment in a container extremely easy.</td></tr><tr><td align="center" valign="middle" >p10</td><td align="center" valign="middle" >Serverless deployment</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the dependency managers that exist in JAVA, it is possible to send just its source code for deployment.</td></tr><tr><td align="center" valign="middle" >p11</td><td align="center" valign="middle" >Externalized configuration</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >By a simple modification of the Spring configuration file, it is possible to tell it where to go to get its configuration, depending on the execution that is done.</td></tr><tr><td align="center" valign="middle" >p12</td><td align="center" valign="middle" >Remote Procedure Invocation (RPI)</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >As Spring uses JAVA, it embeds all the remote procedure calling techniques.</td></tr><tr><td align="center" valign="middle" >p13</td><td align="center" valign="middle" >Message exchange (Messaging)</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the JMS and ActiveMQ starter, services can exchange messages and subscribe.</td></tr><tr><td align="center" valign="middle" >p14</td><td align="center" valign="middle" >API Gateway</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Spring boot offers starters to return data in almost any format including JSON, XML.</td></tr><tr><td align="center" valign="middle" >p15</td><td align="center" valign="middle" >Backends for frontends</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to different starters allowing to create controllers (MVC) according to the call method, we can have several APIs per client.</td></tr><tr><td align="center" valign="middle" >p16</td><td align="center" valign="middle" >Service Registry</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Several implementations are available including the most used eureka-zuul of netflix.</td></tr><tr><td align="center" valign="middle" >p17</td><td align="center" valign="middle" >Client-side service discovery</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Several implementations are available including the most used eureka-zuul of netflix.</td></tr><tr><td align="center" valign="middle" >p18</td><td align="center" valign="middle" >Server-side service discovery</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Several implementations are available including the most used netflix service-registry.</td></tr><tr><td align="center" valign="middle" >p19</td><td align="center" valign="middle" >Self-registration</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Several implementations are available including the most used eureka-client of netflix.</td></tr><tr><td align="center" valign="middle" >p20</td><td align="center" valign="middle" >Circuit breaker</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Several implementations are available including the most used Hystrix from netflix.</td></tr><tr><td align="center" valign="middle" >p21</td><td align="center" valign="middle" >Access token</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >By combining the security starter and the jjwt dependency of maven, we obtain a secure system by token.</td></tr><tr><td align="center" valign="middle" >p22</td><td align="center" valign="middle" >Log aggregation</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the sleuth starter and RabbitMQ, Spring allows a centralized management of the Log.</td></tr><tr><td align="center" valign="middle" >p23</td><td align="center" valign="middle" >Implementation measures</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the Actuator starter, it is possible to have the health status of the software at any time; thanks to available URLs, REST.</td></tr><tr><td align="center" valign="middle" >p24</td><td align="center" valign="middle" >Distributed tracing</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the sleuth starter and RabbitMQ, Spring allows for distributed log management.</td></tr><tr><td align="center" valign="middle" >p25</td><td align="center" valign="middle" >API Health Check</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to the Actuator starter, it is possible to have the health status of the software at any time; thanks to available REST URLs.</td></tr><tr><td align="center" valign="middle" >p26</td><td align="center" valign="middle" >Composition of the page fragment on the server side</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Using the thymeleaf starter, we can do server-side fragment composition and make a view functional.</td></tr><tr><td align="center" valign="middle" >p27</td><td align="center" valign="middle" >Composition of the client-side user interface</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >Spring is server only.</td></tr><tr><td align="center" valign="middle"  colspan="2"  >Total</td><td align="center" valign="middle"  colspan="2"  >h = 1, 26 times &amp; h = 0, 1 time</td></tr></tbody></table></table-wrap><p>• The Model is generally managed by Java objects or JavaBeans;</p><p>• The View is managed by JSP pages.</p><p>From <xref ref-type="table" rid="table">Table </xref>3 obtained by analysis of the JAVA EE 7 technology, the value obtained for the function f is:</p><p>f ( t , P , E ) = 12 .</p><p>Thus, JAVA EE is 44.4% compatible with the microservice architecture.</p></sec><sec id="s3_3"><title>3.3. Discussion</title><p>For the Spring Boot platform, the score obtained is 96.3% of compatibility. This can be explained on the one hand by the fact that it is a framework based on a very popular, very rich language, with a great deal of maturity and a large community, and on the other hand by the very design of this framework, which makes it capable of evolving rapidly and integrating new packages (starters) that are configured automatically but that can also be configured as desired. These packages make development very simple and cover a wide range of needs.</p><p>For the JAVA EE platform, the score obtained is 44.4% of compatibility. However, this figure may vary depending on the software server used, which may offer additional services. This score indicates an incompatibility of the specification with the microservice style. This incompatibility can be explained by the very design of the platform. Indeed, the platform is designed in a purely SOA style and therefore does not address any of the issues introduced by the microservice style, in particular the major issues such as distributed data management, service discovery, API composition, etc.</p><p>At the end of this evaluation, one thing is clear: We have evaluated two technologies, both based on the JAVA language, but it is important to note the significant difference in scores obtained by the two. While one is very compatible, the other one is almost not. This difference can be explained in several ways.</p><table-wrap id="table3" ><label><xref ref-type="table" rid="table">Table </xref>3</label><caption><title> <xref ref-type="table" rid="table">Table </xref>of values for the function h, for JAVA EE 7 technology</title></caption><table><tbody><thead><tr><th align="center" valign="middle" ></th><th align="center" valign="middle" >Evaluation Criteria</th><th align="center" valign="middle" >h</th><th align="center" valign="middle" >Justification</th></tr></thead><tr><td align="center" valign="middle" >p1</td><td align="center" valign="middle" >Database per service</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >DBMS developers provide the necessary drivers to connect to their servers. JAVA being very popular, these drivers are available.</td></tr><tr><td align="center" valign="middle" >p2</td><td align="center" valign="middle" >API Composition</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p3</td><td align="center" valign="middle" >SAGA</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p4</td><td align="center" valign="middle" >Domain Event</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >The events are managed thanks to the ActiveMQ service whose driver is available.</td></tr><tr><td align="center" valign="middle" >p5</td><td align="center" valign="middle" >Event sourcing</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Events are handled by the ActiveMQ service, whose driver is available.</td></tr><tr><td align="center" valign="middle" >p6</td><td align="center" valign="middle" >Testing of service components</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p7</td><td align="center" valign="middle" >Service Integration Contract Testing</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p8</td><td align="center" valign="middle" >Multiple service instances per host</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >The deployment is done in a software server and only one instance of the server can be launched. Moreover, the software runs on a port.</td></tr><tr><td align="center" valign="middle" >p9</td><td align="center" valign="middle" >Service instance per container</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Software can be launched in a container.</td></tr><tr><td align="center" valign="middle" >p10</td><td align="center" valign="middle" >Serverless deployment</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >A JAVA EE software can be deployed without a server. Because all dependencies can be loaded on a repository.</td></tr><tr><td align="center" valign="middle" >p11</td><td align="center" valign="middle" >Externalized configuration</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p12</td><td align="center" valign="middle" >Remote Procedure Invocation (RPI)</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >JAVA native remote procedure calling techniques are available.</td></tr><tr><td align="center" valign="middle" >p13</td><td align="center" valign="middle" >Message exchange (Messaging)</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >JAVA EE, has an API, JMS for message communication.</td></tr><tr><td align="center" valign="middle" >p14</td><td align="center" valign="middle" >API Gateway</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >JAVA EE, allows the implementation of REST API.</td></tr><tr><td align="center" valign="middle" >p15</td><td align="center" valign="middle" >Backends for frontends</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p16</td><td align="center" valign="middle" >Service Registry</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p17</td><td align="center" valign="middle" >Client-side service discovery</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p18</td><td align="center" valign="middle" >Server-side service discovery</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p19</td><td align="center" valign="middle" >Self-registration</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p20</td><td align="center" valign="middle" >Circuit breaker</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p21</td><td align="center" valign="middle" >Access token</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Token-based API security is available.</td></tr><tr><td align="center" valign="middle" >p22</td><td align="center" valign="middle" >Log aggregation</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p23</td><td align="center" valign="middle" >Implementation measures</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Software control is done through the software server.</td></tr><tr><td align="center" valign="middle" >p24</td><td align="center" valign="middle" >Distributed tracing</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >No implementation available</td></tr><tr><td align="center" valign="middle" >p25</td><td align="center" valign="middle" >API Health Check</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >The software is controlled through the software server.</td></tr><tr><td align="center" valign="middle" >p26</td><td align="center" valign="middle" >Composition of the page fragment on the server side</td><td align="center" valign="middle" >1</td><td align="center" valign="middle" >Thanks to JSPs, we can compose fragments on the server side and make a view functional.</td></tr><tr><td align="center" valign="middle" >p27</td><td align="center" valign="middle" >Composition of the client-side user interface</td><td align="center" valign="middle" >0</td><td align="center" valign="middle" >JAVA EE, is server only.</td></tr><tr><td align="center" valign="middle"  colspan="2"  >Total</td><td align="center" valign="middle"  colspan="2"  >h = 1, 12 times &amp; h = 0, 15 times</td></tr></tbody></table></table-wrap><p>• The design of the two technologies is very different: Indeed, JAVA EE is designed in a purely SOA logic, fixed, requiring many configurations. Spring Boot, on the other hand, allows to create the desired software (SOA, microservice, REST API, command line) just by integrating the corresponding starter; it adds all the necessary dependencies and configuration to start immediately;</p><p>• The Spring Boot community is larger than the JAVA EE community: While the JAVA EE specifications come from Oracle, the starters developed by the Spring Boot community can be integrated into the official project, which makes it possible to have starters addressing almost all the issues. This is the case of Netflix, which is one of the pioneers in the field of microservices architectures and has produced many starters dedicated to the style;</p><p>• Ease of use: Indeed, thanks to its auto-configuration system, the development and deployment of Spring Boot software requires almost no configuration, nor any server, all the elements are in the jar file resulting from the compilation; whereas for JAVA EE, the configuration is manual, tedious and the deployment requires the presence of a software server previously installed.</p></sec></sec><sec id="s4"><title>4. Conclusions and Further Works</title><p>In this paper, we propose an evaluation framework to guide the developers in their tasks of selecting the technologies for the implementation of software-oriented microservices architectures. The proposed framework is based mainly on a set of evaluation criteria consisting of 27 architectural patterns from the domain literature and an evaluation function. This function takes into account the specific requirements of the software under development in order to assign a score to a technology that expresses the level of its compatibility with the microservice style.</p><p>This evaluation framework is applied to the Spring Boot 2.2.2 framework and the JAVA EE 7 platform under the assumptions that, all criteria have the same level of importance so each is graded to 1 and the value of the function is obtained by checking whether each criterium is implemented or not. Although both are based on the Java language, they obtained very different scores respectively 96.3% for Spring Boot and 44.4% for Java EE.</p><p>The future directions of this work are threefold. Firstly, the evaluation criteria will be extended to improve the accuracy of the evaluation. Secondly, a benchmark making a classification of existing technologies and the implementation of a support tool is necessary to automate the process of evaluating the conformity of existing software with the microservice style.</p></sec><sec id="s5"><title>Conflicts of Interest</title><p>The authors declare no conflicts of interest regarding the publication of this paper.</p></sec><sec id="s6"><title>Cite this paper</title><p>Massaga, A. and Kouamou, G.E. (2021) Towards a Framework for Evaluating Technologies for Implementing Microservices Architectures. Journal of Software Engineering and Applications, 14, 442-453. https://doi.org/10.4236/jsea.2021.148026</p></sec></body><back><ref-list><title>References</title><ref id="scirp.111587-ref1"><label>1</label><mixed-citation publication-type="other" xlink:type="simple">Dmitry, N. and Sneps-Sneppe, M. (2014) On Micro-Services Architecture. International Journal of Open Information Technologies, 2, 4 p.</mixed-citation></ref><ref id="scirp.111587-ref2"><label>2</label><mixed-citation publication-type="other" xlink:type="simple">Richardson, C. (2019) Microservices Pattern: Microservice Architecture Pattern.  
http://microservices.io/patterns/microservices.html</mixed-citation></ref><ref id="scirp.111587-ref3"><label>3</label><mixed-citation publication-type="other" xlink:type="simple">Herold, S. (2011) Architectural Compliance in Component-Based Systems: Foundations, Specification, and Checking of Architectural Rules. Ph.D. Thesis, Clausthal University of Technology, Clausthal-Zellerfeld, Germany.</mixed-citation></ref><ref id="scirp.111587-ref4"><label>4</label><mixed-citation publication-type="other" xlink:type="simple">Weinreich, R., Miesbauer, C., Buchgeher, G. and Kriechbaum, T. (2012) Extracting and Facilitating Architecture in Service-Oriented Software Systems. 2012 Joint Working IEEE/IFIP Conference on Software Architecture and European Conference on Software Architecture, Helsinki, Finland, 20-24 August 2012, 81-90.  
https://doi.org/10.1109/WICSA-ECSA.212.16</mixed-citation></ref><ref id="scirp.111587-ref5"><label>5</label><mixed-citation publication-type="other" xlink:type="simple">Gampa, S., Yazhini, Senthilkumaran, U. and Narayanan, M. (2016) Methods for Evaluating Software Architecture-A Survey. International Journal of Pharmacy &amp; Technology, 8, 25720-25733.  
https://www.researchgate.net/publication/316887447.</mixed-citation></ref><ref id="scirp.111587-ref6"><label>6</label><mixed-citation publication-type="other" xlink:type="simple">Knodel, J. and Popescu, D. (2007) A Comparison of Static Architecture Compliance Checking Approaches. 2007 Working IEEE/IFIP Conference on Software Architecture (WICSA’07), Mumbai, India, 6-9 January 2007, 12 p.  
https://doi.org/10.1109/WICSA.2007.1</mixed-citation></ref><ref id="scirp.111587-ref7"><label>7</label><mixed-citation publication-type="other" xlink:type="simple">Weinreich, R. and Buchgeher, G. (2014) Automatic Reference Architecture Conformance Checking for SOA-Based Software Systems. 2014 IEEE/IFIP Conference on Software Architecture, Sydney, NSW, Australia, 7-11 April 2014, 95-104.  
https://doi.org/10.1109/WICSA.2014.22</mixed-citation></ref><ref id="scirp.111587-ref8"><label>8</label><mixed-citation publication-type="other" xlink:type="simple">Stack Overflow Developer Survey 2020 (s. d.). Stack Overflow.  
https://insights.stackoverflow.com/survey/2020/?utm_source=social-share&amp;utm_medium=social&amp;utm_campaign=dev-survey-2020</mixed-citation></ref><ref id="scirp.111587-ref9"><label>9</label><mixed-citation publication-type="other" xlink:type="simple">(2021) Java EE Usage Statistics.  
https://trends.builtwith.com/framework/Java-EE</mixed-citation></ref><ref id="scirp.111587-ref10"><label>10</label><mixed-citation publication-type="other" xlink:type="simple">Craig, W. (2019) Spring in Action. 5 Edition, Manning Publications, Shelter Island, New York.</mixed-citation></ref><ref id="scirp.111587-ref11"><label>11</label><mixed-citation publication-type="other" xlink:type="simple">(2020) Spring Cloud. https://spring.io/projects/spring-cloud</mixed-citation></ref><ref id="scirp.111587-ref12"><label>12</label><mixed-citation publication-type="other" xlink:type="simple">(2010) Distributed Multitiered Softwares—The Java EE 5 Tutorial.  
https://docs.oracle.com/javaee/5/tutorial/doc/bnaay.html</mixed-citation></ref></ref-list></back></article>