ScalaSchool

Reactive Systems are software applications written based the principles outlined in the Reactive Manifesto.

In general reactive applications are written with the following concepts in mind:

reactive-systems

Event Driven

Traditionally: Systems are composed of multiple threads, which communicate with shared, synchronized state.

Now: Systems are composed from loosely coupled event handlers.

Scalable

An application is scalable if it is able to be expanded according to its usage

Important for scalability: Minimum use of mutable state Important for scale out: Location transparency, resilience.

Resilience:

An application is resilient if it can recovery quickly from failures.

Failures can be:

Typically, resilience cannot be added as an afterthought; it needs to be part of the design from the beginning.

Needed:

Responsive

An application is responsive if it provides rich, real-time interaction with its users even under load and in the presence of failures.

Responsive applications can be build on a event-driven, scalable, and resilient architecture.

Even with these things careful attention to algorithm design, back-pressure and many other details.