04. Containerized microservices

Date: 2018-05-23

Status

Accepted

Context

Old Valamis is hard and expensive to scale because of Liferay's monolothic nature and costly licence politics. Polyglot development with evolving stacks is hard as code needs to adhere to JVM and Liferay's APIs.

Decision

Old Valamis monolith will be decomposed to microservices and containers (currently Docker/containerd) are used as an microservice artifacts.

Consequences

Containers offers encapsulating packaging mechanism for building and deploying microservices. They abstract actual host environment and can be easily run in any Linux host environments. More about what and whys can be read here.

Microservice architecture enables easier scaling of individual parts of application on the base of needs. Teams can work more autonymously and use different stack with more freedom.

While Liferay with it's OSGi model based run-time deployments is already way better than traditional monolith way, independent and isolated deployability services easen up the gradual deployment of new features.

Microservice-based application is more complex than old school monolith so it has a learning curve. Familiar concerns like authentication, logging, monitoring need to be resolved with new ways and new concerns like service discovery and service configuration need to be familiarized by teams. Luckily there's a lot of good resources around to learn from, like 1 and 2.