The world is increasingly distributed, with modern applications moving away from monolithic architectures towards distributed microservices. While monolithic apps are straightforward to build and deploy, they can become overly complex and difficult to scale. Early attempts at Service Oriented Architectures introduced middleware like Enterprise Service Buses, but these often increased complexity. Distributed microservices aim to provide speed, agility and independent scalability by decomposing applications into smaller, independent services.