Succeeding at Reactive Architecture - Ian Cooper - NDC London 2023

Discover the principles and practices of reactive architecture, an approach to building resilient, elastic, and responsive distributed systems through actor models, flow-based programming, and more.

Key takeaways
  • Reactive architecture is about creating systems that are resilient, elastic, and responsive.
  • It’s an approach to building distributed systems that views them as a collection of actors that communicate with each other.
  • Actor models, flow-based programming, and reactive systems are key concepts in reactive architecture.
  • Actor models are a way of thinking about systems as collections of autonomous components that communicate with each other.
  • Flow-based programming is similar to actor models, but is more focused on the flow of data between components.
  • Reactive systems are designed to be responsive, partly because they don’t have a global state.
  • Components in a reactive system are designed to be able to crash, but the system as a whole remains responsive.
  • The “let it crash” philosophy is central to reactive architecture.
  • Components should not retain state, but instead, the state should be kept in a log.
  • This allows components to crash and restart without losing state.
  • Consumer-driven contracts are used to define the interface between components.
  • The concept of “streaming” is central to reactive systems, as it allows data to be processed in real-time.
  • Flow-based programming is similar to data flow programming, but is more focused on the flow of data between components.
  • The “pull” model of data flow is used in reactive systems, where components request data from each other.
  • The “push” model is also used, where components send data to each other without being requested to do so.
  • The “ hot” and “cold” terms are used to describe whether data is being processed in real-time or not.
  • Event sourcing is a technique used to manage state in a distributed system.
  • It involves storing the history of all events that have occurred in the system, and using that history to determine the current state of the system.