The road to microservices

The road to microservices

The road to microservices is dark and full of terrors. Do you really need what microservices offer? Are you really ready to lose the comfort of monolithic architecture? This article tries to summarize my view on the “microservices compromise”, what it requires and what it implies, beyond splitting a codebase into small pieces.

A map of the road to microservices

Large, coupled, but simple patterns, close to what is done in monoliths

Deployment

In which format are the services packaged and deployed?

Organization

How are teams organized around the codebase boundaries?

Integration: do services share the persistence mechanism?

Shared: a shared schema in a single database

Technology stacks

What constraints are imposed on the choice of technologies (languages, frameworks, persistence…)?

Technology heterogeneity

In a monolithic architecture, the choice of language and framework is made once, usually at the very beginning of the project.

How are logging and monitoring implemented?

Pattern

Resilience and Scalability

Monoliths offer “all-or-nothing” availability. If anything goes wrong, the whole application is gone. With microservices, a failure only affects a few parts of the system, leaving most of the services running.

The technology zoo

Having multiple technologies in production means having to maintain a pool of experts for each of them, in each department.

Small, focused and decoupled services

Microservices architectures are all about splitting software in multiple services and keeping them small

Authentication

How is authentication implemented?

Microservices, a definition

In monolithic architectures, all features are implemented in a single codebase, with no visible modularization

Failure Handling

Pattern Description

Build

What is the project versioned, built and packaged?

Transversal Teams and Change Management

If your entire enterprise is organized around technical boundaries, massive efforts will be required to evolve to a lot of small, focused, multidisciplinary teams.

Small and coupled

In monoliths, coupling can stay unnoticed for quite some time, before it eventually surfaces affecting development velocity, ease of maintenance, or performance. In microservices, there is nowhere to hide.

Promise and compromise

The only real guarantee of microservices architectures is to end up with a lot of small parts, lose transactional consistency, raise failure rates and challenge your organization.

Testing What is the adopted testing strategy?

Pattern: Hope-based

Frontend

Is the frontend also split into modules or services? If so, with what granularity?

Walking the road

There will be many paths to explore, and many directions to choose from.

Cascading failures and stateful services

Microservices bring a different equation to the table

Architecture

Pattern Description

Consistency What data consistency guarantees does the overall system offer?

Pattern – transactional

Small, autonomous teams

As a software grows, the size of its supporting team tends to grow accordingly, often with the incorrect assumption that more people implies more features delivered

The untold story of the compromise

There is no silver bullet and no free lunch, only compromises

Source

Get in