Reactive systems is a term used to describe an architectural style that enables applications composed of multiple microservices to work together as a single unit in order to better react to their surroundings and one another. Reactive systems are already in use in a wide variety of industries and use cases. But, what makes them reactive systems? How is this defined, and what makes a reactive system truly reactive?
In 2013, the Reactive Manifesto was created to lay out the key, high-level characteristics of reactive systems: responsiveness, elasticity, resiliency, and message-driven. The manifesto defines reactive systems as the following:
Systems built as Reactive Systems are more flexible, loosely-coupled, and scalable. This makes them easier to develop and amenable to change. They are significantly more tolerant of failure, and when failure does occur, they meet it with elegance rather than disaster. Reactive Systems are highly responsive, giving users effective interactive feedback.
Get started with Reactive architecture
Designing cloud-native systems and microservices in a truly reactive manner requires architects and teams to think differently. The ebook Reactive systems explained provides a succinct and clear summary of reactive systems: what they are; when it’s best to use them; key patterns used when designing and creating them; and what frameworks and toolkits are available to help build them.
If you’re looking for a more hands-on experience to learn how to think about Reactive Systems from design through to production, then check out the “Lightbend Reactive Architecture” course.
Build Reactive microservices today
There are many different ways to implement a reactive system. Each framework achieves concurrency, parallelism, resiliency, and messaging in a variety of ways, and interacts with the underlying infrastructure differently. So, it’s important to fully understand the capabilities of the implementation you choose.
Reactive Messaging for MicroProfile is an open-source specification that provides asynchronous messaging support based on MicroProfile Reactive Streams. MicroProfile Reactive Messaging provides a very easy-to-use way to send, receive, and process messages, and is well-suited to writing applications that process streams of events. Reactive Messaging uses a model of annotated methods that are connected by named channels. In the blog post “Sending and receiving messages between microservices with MicroProfile Reactive Messaging” (Open Liberty), Andrew Rouse and Gordon Hutchison describe how to send and receive messages between microservices using MicroProfile Reactive Messaging. MicroProfile Reactive messaging, although not an end-to-end reactive solution, enables non-blocking, asynchronous message passing between services, giving them the ability to scale, fail, and evolve independently, and to remain unaffected by each other’s availability. MicroProfile Reactive Messaging can be used alongside IBM’s open-source application server, Open Liberty, to create reactive systems.
Akka (from Lightbend) is an open-source toolkit “for building highly concurrent, distributed, and resilient message-driven applications for Java and Scala.” Akka supports multiple programming models for concurrency, but emphasizes actor-based concurrency. The Reactive in practice (IBM Developer) tutorial series guides you through how to build a reactive system using Akka. Akka can be used alongside Lagom and Play to create end-to-end reactive systems. The Lightbend Platform can be used in the IBM Cloud Pak for Data.
Improve your Reactive skills
Reinforce your Reactive knowledge with the following resources:
- Reactive in practice: A complete guide to event-driven systems development in Java (IBM Developer)
- Leverage the strengths of Akka and Kubernetes (IBM Developer)
- “Micro Shop microservice” (Vert.x)
- “Todo Backend” (Vert.x)
- “How to write Reactive applications with MicroProfile” (Eclipse)
Bring your skills in line with the new Reactive development landscape with the following resources:
- “Create a soccer league dashboard app with Akka” (IBM Developer)
- “Deploy Akka clusters on Kubernetes” (IBM Developer)
- “Integrate a Lagom application with IBM Cloud Object Storage” (IBM Developer)
- “Use Akka to stream and store retail order data for analysis” (IBM Developer)
- “A gentle guide to asynchronous programming with Eclipse Vert.x for Java developer” (GitHub)