blob: 73e692899ffab648b19ecd0f99f5fba0e57d92c5 [file] [log] [blame]
= Reactive (disambiguation)
include::partial$include.adoc[]
== Reactive Manifesto
Introduced in 2013, the Reactive Manifesto summarizes the properties a system must fulfill to be considered reactive. The following are the four aspects all reactive systems must fulfill:
* *Responsive* The system responds in a timely manner if at all possible.
* *Resilient* The system stays responsive in the face of failure.
* *Elastic* The system stays responsive under varying workload.
* *Message Driven* Reactive Systems rely on asynchronous message-passing to establish a boundary between components that ensures loose coupling, isolation and location transparency.
You can read the whole manifesto on {reactive-manifesto}[ReactiveManifesto.org {tab-icon}, window="tab"].
[#reactive_principles]
== Reactive Principles (and Patterns)
[quote]
As a companion to the <<Reactive Manifesto>>, the Reactive Principles incorporate the ideas, paradigms, methods, and patterns from both <<Reactive Programming>> and <<Reactive Systems>> into a set of practical principles that software architects and developers can apply in their transformative work.
The eight foundational principles of implementing a distributed system that make an application Reactive are:
[upperroman]
. Stay Responsive
. Accept Uncertainty
. Embrace Failure
. Assert Autonomy
. Tailor Consistency
. Decouple Time
. Decouple Space
. Handle Dynamics
Read all the details (and the patterns) at the {reactive-principles}[Reactive Foundation {tab-icon}, window="tab"].
== Reactive Systems
A collection of components decoupled in time and connected via message-passing.
A System is a building block of an application, and a Reactive System is one that adheres to the xref:#reactive_principles[Reactive Principles].
== Reactive Programming
[quote, 'https://info.lightbend.com/reactive-programming-versus-reactive-systems.html[Reactive Programming vs Reactive Systems {tab-icon}, window="tab"]' , 'Jonas Bonér and Viktor Klang' ,']
____
Reactive Programming, [...] is a subset of Asynchronous Programming and a paradigm where the availability of new information drives the logic forward rather than having control flow driven by a thread-of-execution.
It supports decomposing the problem into multiple discrete steps where each can be executed in an asynchronous and nonblocking fashion, and then be composed to produce a workflow—possibly unbounded in its inputs or outputs.
____
== Reactive Streams
[quote,'{reactive-streams}[Reactive Streams {tab-icon}, window="tab"]','']
Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. This encompasses efforts aimed at runtime environments (JVM and JavaScript) as well as network protocols.
== Learn more
* xref:reactive-streams.adoc[]