Microservices Release Management

Microservices application typically contains numerous autonomous services that follow continuous delivery pattern. Each service is part of the application and is placed in a separate repo with an independent ci/cd pipeline. Each repo is tagged with its independent version, which is then mapped to the application version and documented to keep track of the application version vs. microservice version. This approach suits well for continuous deployment of all services, but in contrast, the approach being used by companies like Google, Airbnb, Uber etc. is mono-repo, where all the services are placed in one common shared repository. Globally, it seems like a monolithic approach, but there are certain advantages, e.g., flexibility of creating one release rather than many branches and tags, standard testing and deployment, easier to keep and track the release history, etc. However, there are some challenges, such as: the CI/CD server must be ready to handle heavy loads; code protection of one service from another; debugging or error detection may be difficult; the CI/CD server may have repetitive parts in its configuration; and so on. The answer to the question of which approach is preferable is simple: it depends on the use case.

A good read about this: https://semaphoreci.medium.com/release-management-for-microservices-5dabc6ef08a0