In general reactive applications are written with the following concepts in mind:
Traditionally: Systems are composed of multiple threads, which communicate with shared, synchronized state.
Now: Systems are composed from loosely coupled event handlers.
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.
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:
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.