Microservices has been gaining a lot of traction in the development community. One key reason behind this is because microservices architecture addresses problems that modern enterprises often face, such as responding to market demands, handling spikes in traffic, and being resilient in times of failure, and so on. Microservices aid agility by allowing developer teams to focus on a narrower domain, increasing scalability by giving smaller units of scale so additional instances of a service can be whipped up to cater to growing demand. They also help enhance fault tolerance providing isolation units that can contain the scope of faults.
The beginning of Microservices lies originally with web companies that wanted to be able to manage millions of users with high variance in traffic as well as changing market demands, without affecting the performance of the website in any way. These companies pioneered various approaches to achieve this, such as technologies, design patterns, and operational platforms etc., and these were shared with the open source community to help other organizations to adopt Microservices.
As of now there is no defined formal standard for microservices architecture, but there are several common characteristics that define a Microservices architecture. Some of these are independently deployable services, automated deployment, intelligence in the endpoints, and decentralized control of languages and data.