Today's Internet is a prime example of a large-scale, highly engineered, yet highly complex software system. In the recent past, a typical large system would have tens of server nodes, its response times would be measured in the order of seconds, maintenance downtime would last for hours per month and data volume would be measured in the order of GBs. Nowadays a large system has thousands of server nodes, users expect sub-second response time, there should be no maintenance downtime and the system should be available at all times, and we're entering the age of Big Data with data volumes reaching the order of TBs and going into PBs and are too large and complex to manipulate with standard tools.
Such characteristics suggest new types of architectures that are able to cope with an increasing demand in both quantity and performance. But if building such systems from the ground is a demanding task, what to say about evolving legacy systems towards the same requirements?
This dissertation assumes that the concept of reactive applications, that are event-driven, scalable, resilient and responsive, is a good solution for the type of systems aforementioned and, as such, we explore the process of incrementally refactoring an existing system following a non-reactive architecture into one that does thought a set of transformation patterns.
We then proceed to validate the patterns by providing known uses in the industry and finally, analyze the case study, Blip, and pinpoint parts of the system where we can apply each transformation pattern.