PRIN 2017 Research Programme
Microservices (or microservice architecture) are an architectural style where applications are
structured as collections of loosely coupled components (microservices), each hosted on a
dedicated execution environment. This architectural style fosters the autonomy of components to improve independent scalability and
maintainability. Microservices envision polyglot systems, where each component is implemented
and operated by dedicated means, with no need for application-wide choices and solutions.
Self-contained granules and independent executors enable the continuous deployment of new
features or new releases of existing ones. Since dedicated (virtual) machines would be a too
heavy execution environment, microservices are usually hosted in containers, and
nowadays they are often executed through server-less functions, without any
need for provisioning or managing servers explicitly.
Since changes are isolated in dedicated executors, possible errors generate local failures with
limited or zero impacts onto the remaining parts of the system. Microservices do not have large
failures: big services fail big, small services fail small: A large number of services can be down
at the same time without the users even noticing it; New service instances can be added easily
and quickly to manage increasing workloads, others can be removed, running services can be
updated instantly, and new services can be integrated to provide additional functionality, but
system-wide management must be adopted to keep systems healthy and let them be safe and
While the architectural style is extremely flexible, versatile and dynamic, our project SISMA (Solutions for
Engineering Microservice Architectures) aims to move a step forward and foster the quality
development, deployment, and operation of microservice-based applications by proposing novel
techniques and tools that cover the whole lifecycle of microservices. SISMA will investigate and
contribute strongly original solutions to address following challenges:
(i) Autonomy and evolvability of microservices require the (semi-)automated identification of the microservices that compose a complex software system. This challenge emerges both when migrating existing monolithic systems to the microservice paradigm and when implementing new microservice systems from a global specification of their business goals.
(ii) Isolation and autonomy impose the design of test suites that stress microservices with respect to their intrinsic modularity and scalability, and also with respect to the different assemblies they can be part of.
(iii) Continuous evolution introduces the challenge of guaranteeing a safe and reliable deployment in the presence of evolving requirements and mutated execution conditions. Any evolution must also preserve the reliability and safety of the overall system.
(iv) Workload changes impose the dynamic instantiation of resources and the proper reconfiguration of the system to route the workload correctly. Advanced runtime management solutions are required to improve performance, save money, and run more sustainable systems.
(v) Dynamism and evolution may lead to software problems that cannot be identified before deployment and by observing individual microservices in isolation. Microservices must be validated in the field without interrupting the offered services.