Formalizing dynamic software updating

You want the team for each microservice to choose the database that best suits the service.

Moreover, with a single data store it’s too easy for microservices written by different teams to share database structures, perhaps in the name of reducing duplication of work.

One kind of coupling that people tend to overlook as they transition to a microservices architecture is database coupling, where all services talk to the same database and updating a service means changing the schema.

You need to split the database up and denormalize it. A microservice with correctly bounded context is self‑contained for the purposes of software development.

When working with a microservices architecture, you think of other internal development teams like those Internet backends: as external services that your microservice interacts with through APIs.

The commonly understood “contract” between microservices is that their APIs are stable and forward compatible.

Deploying microservices in containers is important because it means you just need just one tool to deploy everything.This way you can iteratively deploy and test the new code until it is bug free and maximally efficient, without risking failure or performance degradation in the existing microservice.Once the new microservice is as stable as the original, you can merge them back together if they really perform a single function together, or if there are other efficiencies from combining them.Keep all code in a microservice at a similar level of maturity and stability.In other words, if you need to add or rewrite some of the code in a deployed microservice that’s working well, the best approach is usually to create a new microservice for the new or changed code, leaving the existing microservice in place.