We talked about reactive programming in my previous article. In this article, I want to talk about reactive systems and modern software architecture.
Our world is changing rapidly. When we look at 10-20 years from now software systems that we use had huge differences from today. Softwares had tens of servers and they have seconds of response time. When in maintenance their offline time can be up to hours even though they deal with gigabytes of data which is looking really small considering today’s internet.
Today we have cloud servers, handheld devices up to thousands of multicore processors and we get milliseconds of response time. Applications have %100 uptime in maintenance even in failure. And they deal with petabytes of data which is huge but how do they do it? We can not expect to solve 21th century problems with 20th-century solutions and this approach brings the topic of reactive systems and modern software architectures.
A reactive system is a set of architectural design patterns for building modern programs and creating highly responsive applications that can fulfill the demands of our world which is constantly changing. When we talk about reactive systems we can classify their strong points on four main topics. These four topics are responsive, resilient, elastic and message-driven.
Responsive: A responsive application is able to respond and react to any action in a timely manner. These applications are establishing not also rapid but also deliver a consistent service.
Resilient: Resilient systems are always prepared for failures. Failures are isolated and contained in a way that it won’t affect the applications’ ability to service consistently.
Elastic: Reactive systems are elastic it means that even under heavy workflow or different workloads systems can and should stay stable and they do it in a cost-efficient way.
Message-driven: Reactive systems works asynchronously and built on principles of loose coupling. Components have
These four pillars of reactive systems must be connected and supported by each other. When you achieve these visions you get flexibility and your application will be more scalable. But just to try and have these concepts in your application will not solve everything in your path to success. Creating a reactive system is more than just doing what the systems needs. It’s the understanding of these concepts and the idea behind them to implement better and better solutions. Just because an application uses reactive programming it doesn’t mean it is a reactive system. Reactive programming is only an implementation approach to these principles that we talk about to help to create a reactive system. A reactive system should be maintainable and extensible in every way and should always evolve itself to stay like it. Applications need to keep up with our time and needs and always aim to improve themselves to maintain a strong stance in this race of technology.