Reading and reflections on microservices

Pros

Message driven architecture to achieve communication between components.

Memory leaks are isolated.

Startup is parallelized.

Refactoring is easier.

Easier to scale various services.

Cons

Scaling more efficient, requires more advance features - DNS routing, service discovery …

Communication between components require messsaging system.

Business transactions need to update multiple databases -> rollback is complex and error-prone.

Entire application is more complex in terms of infra

Requires docker, orchestration (kube), JVM, app containers etc…

E2e tests are difficult to perform.

Technical stack for microservices is more complex and most of the time is

Monitoring is difficult

Initial development time + refactoring

Cost $$$$$

Documentation -> schemas

Automated testing difficult

Need to be familiar with networking

When not to use??

Small scopes (CRUD app for internal use case)

Time to market is critical *

Small team *

Infra budget limited *