From the early days of object oriented programming and service-oriented architectures, experts have recognized the benefits of encapsulation and of loose coupling between modules. Reactive Microservices offer isolation and autonomy at a level that traditional architectures cannot.
Reactive Microservices each have a single responsibility and publish their capabilities through a protocol. They are message-driven and can cooperate and collaborate without being tightly coupled. These characteristics enable new development and deployment patterns:
Mobility and addressability give Reactive Microservices resilience at both an individual and a system level. A cluster of microservice instances can be deployed in different JVMs, if a single instance fails, the others are still available. If a cluster of a particular microservice fails, the rest of the system can continue, although possibly with diminished capability. With supervision and coordination, a system can even become self-healing by restarting failed microservices and clusters without human intervention.
Achieving Reactive characteristics requires thinking about the system as a whole in a different way. During design, it is helpful to focus on events and accept the reality of eventual consistency.
On design: “Individual Microservices are comparatively easy to design and implement — what is hard in a Microservices-based Architecture is all the things around them: discovery, coordination, security, replication, data consistency, failover, deployment, and integration with other systems, just to name a few.”
In less than 15 minutes:
In less than an hour:
Really dig in: