From Monolith to Microservices – Migrating a Persistence Layer

From Monolith to Microservices – Migrating a Persistence Layer

Since microservices have become popular, teams are trying to split their monolithic application into a set of small, independent, and highly-scalable microservices. In theory, that often seems like an easy task. You only need to follow the key principles of domain-driven design, identify the bounded contexts in your application, and extract each of them as…

Scope + Communication – The magic formula of microservices

Scope + Communication – The magic formula of microservices

For quite some time, finding the right scope of a microservice was proclaimed to solve all problems. If you do it right, implementing your service is supposed to be easy, your services are independent of each other, and you don’t need to worry about any communication between your services. Unfortunately, reality didn’t hold up to…

Distributed Transactions – Don’t use them for Microservices

Distributed Transactions – Don’t use them for Microservices

Since I started talking about microservices and the challenges that you have to solve whenever you want to exchange data between your services, I hear 3 things: You only need to model the scope of your services “the right way” to avoid these problems. We use multiple local transactions, and everything works fine. It’s really…

Implementing the Outbox Pattern with CDC using Debezium

Implementing the Outbox Pattern with CDC using Debezium

A microservice architecture makes the implementation of a single service easier but introduces new challenges as soon as you need to share data between services. Reliably sharing data and keeping your services independent of each other isn’t as easy as most developers expect. But using the right patterns, it’s also not an impossible task. Using…