Motivation
----------
Cloud-based systems and microservices are the latest trend for software architectures to deliver software-based services to clients.

Cloud-based systems are routed in the paradigm of utility computing: external provides offer compute power, storage, and network bandwidth for self-service customers. They allow new paradigms to develop systems, in particular due to the elasticity these systems can offer. Elastic systems try to match the used resources as closely as possible to the amount of resources needed to deliver the software-based service for a dedicated work and load situation. When architecting these systems, software architects need to take the new flexibility in the system’s deployment into account and design their system in way that it uses its resources as optimal as possible.

Microservices fit into the paradigm of cloud-based systems. The used services which are as much self-contained as possible. The main benefits of these services are increased maintainability and elasticity. Each microservice is developed and operated by a single team of developers and operations people in a DevOps-based process. It communicates with other services as limited and decoupled as possible, for example, via asynchronous message busses. It often also contains its own database so that it can continue to operate without external data providers being accessible at the same time. Microservices still offer challenges like transactions spanning multiple microservices, designing microservice interfaces and communication channels, migrating legacy systems into microservice-based systems, etc.