As a result of growing customer demands to build large-scale and complex applications, microservices has become a buzzword. The number of businesses building or switching from monolithic to microservice architecture is growing at a rapid pace. Leading companies like Disney, Airbnb, Twitter etc. are adopting microservice architecture to support continuous delivery and scalability of applications.
There are many advantages of building applications on a microservice architecture such as high scalability, increased resilience, ease in deployment and flexibility in choosing multiple technology stack for different services. A lot has been written about the advantages of microservices already, thus this post talks about the major aspects that should be considered while building a robust microservice architecture.
1. Minimize Service Dependencies
Over time, in a microservice architecture, each service starts depending upon other microservices. This complexity arises, if your services have a single codebase or if they are tightly coupled across each other. Here, the ultimate goal that should be on the top of your list while building a microservice architecture is to ‘Minimize Service Dependency’.
Services should always have independent life cycles i.e. independent development and deployment with separate private data. Organizations can do so by automating the processes and thereby leading to shorter lead time and quicker releases. However, it is crucial to have communication structures between different microservices, in order to function systematically. This can be achieved by loosely integrating microservices through synchronous communication (API gateways) or asynchronous communication.
2. Decentralize Teams for Microservices Maintenance & Support
Instead of separate maintenance and support teams, organizations should follow a model wherein the teams who build the microservices are the ones who own, operate, maintain and support it. This ensures that the team has the necessary skills and tools to maintain it. As a result, efficiency and consistency are achieved in daily operations along with quick responses catering to, changing business requirements.
3. Separate Data Storage
Microservices are built in isolation, hence, their data should also be made private with respect to other services. Unlike monolithic architecture “open access database for all” approach that leads to unexpected coupling between services. Hence, services having access only to its own database must be maintained along with stringent policy requirements for backups and recovery.
4. Failure Isolation
Microservices operate in a dynamic environment and around distributed networks, which leads to higher chances of failures. However, the microservice architecture allows service degradation, as small sets of services can be set up to fail separately, also known as failure isolation. For example, during a service failure, users on a social media website could not upload pictures but they can still browse their newsfeed or video chat with their friends. This way services fail in isolation without affecting the operations of other services within a system and thereby improving the user experience.
In order to implement such kind of service failure isolation, various architecture principles and design patterns such as circuit breakers, bulkheads, load shedders, failover caching and load balancing can help in building a reliable microservice architecture.
In a monolithic application, a centralized security module easily manages authorization and security operations. However, in a microservice architecture, we have multiple distributed services in a multi-cloud environment. In addition, having a centralized security system for microservices could contradict the main purpose of the architecture i.e. independent development and deployment of microservices. These services continually communicate externally with each other, thereby increasing the chances of security risks.
As microservices communicate through API gateways, one possible solution is to implement authentication to API calls. A security layer (SSL and SHA-256) can prevent security issues while services communicate externally as well as internally.
Building a robust microservice architecture requires integration with the number of supporting tools and security measures. These 5 grounds together help in delivering flexible and scalable development and deployment of microservice architecture. If executed well, these practices allow delivery of resilient and rapid improving service.