They are easy to read, easy to debug, and they map perfectly to how we think: “I send a request, I get a reply.” No surprises, right?
Except when things go wrong. Which in distributed systems is most of the time.
The Hidden Cost of Synchronous Calls
Let’s say you have got five microservices: MS1 through MS5. MS1 calls MS2, MS2 calls MS3, and so on.
If any one of them is down, the whole chain fails. Your user hits “submit” and gets a spinning loader - or worse, a 500 error.
Congratulations: your highly modular microservice architecture just turned into a monolith with single-point-of-failure behavior.
And fixing it? That’s where things get messy.
Engineers start bolting on circuit breakers, retries, backoff strategies, and compensating logic. Suddenly, your clean service is a jungle of resilience code.
All of this just to cope with the fact that one service might be temporarily offline.
You Don’t Need 100% Uptime Everywhere
Most microservices don’t need to be up 100% of the time.- Maybe it’s fine for your reporting service to catch up later.
- Maybe it’s fine for inventory updates to lag a little.
What you do need is a way to avoid cascading failure.
This is where asynchronous messaging shines.The Asynchronous Advantage
By decoupling the sender and the receiver, you can:- Deploy without downtime: just drain the queue
- Scale automatically with competing consumers
- Tolerate crashes without losing messages
- Add new processing logic without touching the sender
But Wait - What About Delivery Guarantees?
Here is where it gets tricky.
It’s easy to send a message asynchronously. It’s harder to make sure it gets processed exactly once. Most brokers don’t do that out of the box. Kafka? RabbitMQ? They really only give you best-effort guarantees.Which leads right back to the problem you were trying to avoid: lost updates, duplicates, retries.
This is why we advocate for XA-backed messaging, even in modern microservice stacks.Yes, XA. The thing people love to hate.
The Modern Take on XA: Lightweight, Cloud-Native, and Fast
Atomikos brings XA into the cloud era. It works with Spring Boot, JDBC, JMS, Hibernate — no heavyweight app servers needed.
And with LogCloud, you get decentralized recovery, even in containerized, crash-prone environments. What does this mean in practice?- No more phantom messages
- No more missing updates
- No more fragile retries
TL;DR
- Synchronous calls tie your availability to your weakest service
- Asynchronous messaging gives you flexibility, scale, and resilience
- Most brokers don’t guarantee exactly-once delivery
- Atomikos + XA = exactly-once, cloud-native, no retries
If you are serious about uptime and consistency, it’s time to ditch the synchronous habit.
Get started with Atomikos and modernize your messaging — the reliable way.
Add a comment