Susanne Kaiser, CTO at Just Software, spoke at the recent QCon New York 2017 Conference about the transformation process her team went through to transition from a monolithic application architecture to microservices model.
Microservices come with complexities like multiple independent services, operational & communication complexity, partitioned data, and the complexity of eventual consistency. This comes with challenges of transformation to microservices, such as the need for different skills & tools, and untangling the core functionality; the team still has to take care of the existing system, and the transformation takes longer than anticipated.
Kaiser said the monolith to microservices journey in reality is evolutionary. Their approach to microservices included the following steps:
- Identify candidates
- Decompose candidates
- Establish microservices ecosystem
The key concept of modeling microservices is loose coupling between the services and high cohesion within a service. The team also identified bounded contexts for microservices with well defined business functions. Decomposing the candidate services should be done in steps as shown below:
- Extract the web application
- Extract business logic
- Extract data storage
She also talked about how they handled the authorization for the services. They started with a decentralization model first but since authorization is a cross cutting concern they made it not decentralized any more. Authorization is based on domain object level and each domain object has its own authorization handling.
The microservices ecosystem includes CI/CD pipeline, monitoring, log tracing, central configuration, API-Gateway, service discovery, design for failure, testing (including API), and development sandbox environment. They use tools like Jenkins, Ansible, Prometheus, Grafana, Spring Cloud (Sleuth, Zipkin, Config), Pact (CDC-Testing), Netflix OSS framework (Hystrix, Zuul, Eureka, Ribbon), Vagrant, and VirtualBox to support the ecosystem.
Kaiser concluded the discussion with lessons learned during the microservices transition. Establishing microservices ecosystem takes time and requires different skills & tools; not having an explicit infrastructure team slows down the process. Also, starting with decomposing big chunks is not recommended. Overall, it takes longer than originally anticipated for microservices transition.