behaves, mostly in terms of performance, using
indicators such as time for execution, bytes of data
processed per second, operations executed per
second, number of concurrent users supported, cold
start (the transition time from deployment to actual
execution), etc.
Figure 1: The proposed process for component
decomposition and microservices substitution.
(iii) Other properties: Such properties involve other
critical attributes of a component or microservice that
may not be considered as functional or non-
functional. These constitute mostly properties that
provide useful general information regarding the
artefact and its usage. In this part a profile provides
information regarding the programming language it is
implemented with, the level of security it provides, its
auditability, data exchange, interaction protocol, type
(data source, application login, GUI, etc.), data
format, load balancing, obligations and constraints,
automation and level of binding, verification and
validation issues, cost, the data storage which
describes how the component stores its data, and,
lastly, a service descriptor.
Numerical properties included in the categories
above may provide minimum or maximum threshold
values, which will be used to guide the matching
process for selecting suitable microservices for
substitution.
As in our previous work we resort to using the
Extended Backus-Naur Form (EBNF) to express
component and microservice descriptions, which
allows for formally proving key properties, such as
well-formedness and closure, thus assisting in
validating the semantics. The proposed grammar has
been developed with the Another Tool for Language
Recognition (ANTLR) (http://www.antlr.org/), a
parser and translator generator tool that supports
language grammars in EBNF syntax. Figures 2 and 3
depict the EBNF description of a component and a
microservice respectively, which are analysed below.
The profile of a component includes, from top to
bottom, the following: First, some definitions of
component items are provided, including a name and
a list of one or more services it offers. Each service is
defined by a primary and a secondary function, the
latter being more informative, as well as an optional
description. Primary types involve general
functionality, like I/O, security, networking, etc.; the
secondary types explicitly define the actual function
it executes, e.g. printing, authentication, video
streaming, audio processing etc. For example, the
service could be [Security, Login Authentication].
When decomposition takes place, this is one of the
main features that will guide the searching for a
microservice and it is considered as a Constraint,
something which means that a candidate microservice
will be rejected if it does not offer such functionality.
Interfacing information comes next that outlines the
various methods that implement its logic; a method is
further analysed to Preconditions, Postconditions,
Invariants and Exceptions, if any. This piece of
information is provided upfront by the component
developer/vendor. Non-functional requirements or
properties are defined next denoting mandatory
behaviour in terms of performance. Finally, general
information intended to serve reusability purposes
(application domain, programming language, OS
etc.) is provided. It should also be mentioned that
certain features in the profile may be assigned
specific values along with a characterization as to
whether this feature is minimised (i.e. the value
denotes an upper acceptable threshold) or maximised
(i.e. the value denotes a lower acceptable threshold)
in the component under decomposition. For example,
if performance is confined under 15 seconds, then
next to the performance indicator the couple (15,
minimise) is inserted.
The definition of the attributes included in the
microservice profile is defined in a more detailed
form compared to the component profile and thus the
microservice profile may be considered as a more
refined version of the component profile. The
microservice profile first describes the data types
used to define the property values. These types
suggest three categories of microservice attributes.
The first category is the ‘functional requirements’
where a specific textual description is provided
regarding the function a microservice delivers. Since
microservices are smaller and more specific than
components, so is their description, which intuitively
documents what it does. The second category is the
‘non-functional requirements’ which includes
information describing mostly performance, as well
as other constraints. These attributes include