ABSTRACT

Application modernization involves refactoring the legacy monolith applications into modular, scalable and loosely coupled microservices. The key principles of microservices are modeled around business functionality, data ownership, extensibility, single responsibility principle, evolutionary design, design for failure, asynchronous invocation, frequent, iterative changes, loose coupling, encapsulation, statelessness, security, autonomous, independently scalability, distributed, decentralization, independently deployable and automation through DevSecOps. To migrate monolith to microservice, we use patterns such as strangler pattern (by iteratively replacing the monolith into microservices), decomposition by business capabilities pattern (in which the microservices are modeled based on business capabilities), event sourcing pattern (where a command generates an event that is stored in an immutable append-only event store), database per service pattern (where each microservice gets its own database), Command Query Responsibility Segregation (CQRS) Pattern (where read and write operations are decoupled), façade pattern, adaptor pattern, Saga pattern (in which an orchestrator or choreographer handles multiple events) and observability pattern. The microservices design involves phases such as “analyze” (in which we identify the microservice candidates), “design” (in which we design the microservice), decompose (in which we iteratively decompose the microservice) and “evolve” (in which we continuously improve the service).