What if your 'microservices' were actually just a slow, tangled mess in disguise?
Why Anti-patterns (distributed monolith, chatty services) in Microservices? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine a team building a big app by splitting it into many small parts, but these parts keep calling each other too much, like a group of friends who can't stop texting back and forth every minute.
This constant back-and-forth slows everything down, causes confusion, and makes fixing problems a nightmare because changing one part breaks many others unexpectedly.
Recognizing these anti-patterns helps teams design services that work independently and communicate efficiently, avoiding tangled dependencies and slowdowns.
serviceA calls serviceB for data, then serviceB calls serviceC, then serviceC calls serviceA againserviceA handles its own data or calls serviceB once with all needed info, minimizing calls
It enables building fast, reliable systems where each part can evolve without breaking the whole.
A shopping app where the payment service doesn't need to ask the inventory service every second, but gets all info upfront, making checkout smooth and quick.
Too many small services talking too much cause delays and bugs.
Distributed monoliths hide tight coupling behind service boundaries.
Good design means clear, minimal communication between independent parts.
Practice
distributed monolith in microservices architecture?Solution
Step 1: Understand distributed monolith characteristics
A distributed monolith looks like microservices but behaves like a single app with tight coupling.Step 2: Identify deployment and coupling issues
Such services require coordinated deployment and cannot scale independently.Final Answer:
Services are tightly coupled and require coordinated deployment. -> Option BQuick Check:
Distributed monolith = tight coupling [OK]
- Confusing distributed monolith with loosely coupled microservices
- Thinking distributed monolith scales independently
- Assuming distributed monolith uses asynchronous calls
Solution
Step 1: Define chatty services behavior
Chatty services make many small calls between services per user request.Step 2: Identify the correct syntax describing chatty calls
Multiple calls per request indicate chatty communication.Final Answer:
Service A calls Service B multiple times per user request. -> Option CQuick Check:
Chatty services = many calls [OK]
- Choosing event-driven messaging as chatty behavior
- Assuming caching causes chatty services
- Thinking one call per request is chatty
Solution
Step 1: Calculate calls from Service A to B
Service A calls Service B 5 times per request.Step 2: Calculate calls from Service B to C triggered by A's calls
Each of the 5 calls from A causes 3 calls from B to C, so 5 * 3 = 15 calls.Step 3: Sum all calls
Total calls = 5 (A->B) + 15 (B->C) = 20 calls.Final Answer:
20 -> Option AQuick Check:
5 + (5*3) = 20 [OK]
- Adding 5 + 3 instead of multiplying
- Ignoring nested calls from B to C
- Choosing sum as 18 instead of 20
Solution
Step 1: Identify chatty service problem
Many small synchronous calls cause latency and network overhead.Step 2: Choose solution to reduce call frequency
Using asynchronous messaging or batching reduces calls and latency.Final Answer:
Use asynchronous messaging or batch requests to reduce calls. -> Option AQuick Check:
Reduce calls with async or batching [OK]
- Combining services creates distributed monolith
- Adding more sync calls worsens latency
- Scaling instances doesn't reduce call count
Solution
Step 1: Address distributed monolith by reducing dependencies
Refactoring services to be loosely coupled allows independent deployment and scaling.Step 2: Fix chatty services by adopting asynchronous communication
Using async messaging reduces frequent synchronous calls and network overhead.Step 3: Combine both improvements for better scalability and independence
This combined approach solves both anti-patterns effectively.Final Answer:
Refactor services to reduce dependencies and use asynchronous communication. -> Option DQuick Check:
Loose coupling + async = scalable microservices [OK]
- Merging services worsens distributed monolith
- Adding hardware doesn't fix design flaws
- Using more sync calls increases chatty problems
