In this chapter we offer an overview of microservices providing the introductory information that a reader should know before continuing reading this book. We introduce the idea of microservices and we discuss some of the current research challenges and real-life software applications where the microservice paradigm play a key role. We have identified a set of areas where both researcher and developer can propose new ideas and technical solutions.
The Shift Towards DistributionHistory of programming languages, paradigms and software architectures have been characterized in the last few decades by a progressive shift towards distribution, modularization and loose coupling. The purpose is to increase code reuse and robustness [17,29], ultimately a necessity dictated by the need of increasing software quality, not only in safety and financial-critical applications [39], but also in more common off-the-shelf software packages. The two directions of modularization 1 (code reuse and solid design) and robustness (software quality and formal methods: verification/correctness-by-construction) advanced to some extent independently and pushed by different communities, although with a non-empty overlap.