| Users/Traffic | Request-response | Event-driven |
|---|---|---|
| 100 users | Single server handles sync calls easily; low latency | Single event broker handles events; simple event queues |
| 10K users | Need load balancers; DB connection pooling; some latency increase | Event broker scales with partitions; async processing smooths spikes |
| 1M users | DB becomes bottleneck; sync calls cause timeouts; scaling app servers costly | Event brokers partitioned; microservices consume events independently; better throughput |
| 100M users | Sync calls cause massive latency; DB sharding needed; complex retries | Multiple event brokers; event storage and replay; eventual consistency accepted |
Request-response vs event-driven in Microservices - Scaling Approaches Compared
Start learning this pattern below
Jump into concepts and practice - no test required
In request-response, the database and synchronous waiting cause the first bottleneck as user count grows. The system waits for replies, causing slowdowns and timeouts.
In event-driven, the event broker (message queue) can become the bottleneck if not partitioned or scaled, but async processing reduces direct load on DB and services.
- Request-response: Use load balancers, increase app server instances horizontally, implement DB read replicas and sharding, use caching layers to reduce DB hits.
- Event-driven: Partition event brokers (Kafka partitions), scale consumers horizontally, use durable event storage, implement backpressure and retry mechanisms, adopt eventual consistency.
Assuming 1M users generating 10 requests per second:
- Request-response: 10M QPS total; single DB handles ~10K QPS; need ~1000 DB replicas or sharding; app servers scale to thousands; network bandwidth high due to sync calls.
- Event-driven: 10M events/sec; Kafka cluster can handle ~1M events/sec per cluster; need ~10 clusters or partitions; consumers scale horizontally; network load spread over time.
Start by explaining the difference: request-response is synchronous, event-driven is asynchronous. Discuss bottlenecks for each as traffic grows. Then propose scaling strategies matching those bottlenecks. Highlight trade-offs like latency vs throughput and consistency models.
Your database handles 1000 QPS. Traffic grows 10x to 10,000 QPS. What do you do first?
Answer: Add read replicas and caching to reduce DB load, then consider sharding or moving to async/event-driven patterns to handle higher throughput.
Practice
Solution
Step 1: Understand request-response pattern
This pattern involves one service sending a request and waiting for a direct reply from another service immediately.Step 2: Compare with event-driven pattern
Event-driven is asynchronous and does not guarantee immediate response, so it is not suitable for immediate answers.Final Answer:
Request-response pattern -> Option BQuick Check:
Immediate answer = Request-response [OK]
- Confusing event-driven with immediate response
- Thinking batch processing is real-time
- Assuming file transfer is a communication pattern
Solution
Step 1: Define event-driven communication
In event-driven systems, services emit events without waiting for immediate replies, and other services react to these events asynchronously.Step 2: Eliminate incorrect options
Services send requests and wait for replies synchronously. describes request-response, C and D are unrelated to event-driven communication.Final Answer:
Services emit events and other services react asynchronously. -> Option AQuick Check:
Event-driven = asynchronous event emission [OK]
- Mixing synchronous request-response with event-driven
- Thinking event-driven requires waiting for replies
- Confusing batch processing with event-driven
Solution
Step 1: Identify Service A and B interaction
Service A sends a request and waits for a response from Service B, which is the request-response pattern.Step 2: Identify Service C and B interaction
Service C emits an event that Service B processes asynchronously, which is event-driven communication.Final Answer:
Service A uses request-response; Service C uses event-driven -> Option AQuick Check:
Request-response = direct wait; Event-driven = async event [OK]
- Swapping patterns between services
- Assuming all communication is synchronous
- Ignoring asynchronous event processing
Solution
Step 1: Understand event-driven communication
Event-driven systems are asynchronous; services emit events without waiting for immediate replies.Step 2: Identify the design issue
Expecting an immediate response after sending an event contradicts the asynchronous nature of event-driven systems, causing design problems.Final Answer:
Event-driven systems do not support immediate responses; this breaks the pattern. -> Option DQuick Check:
Event-driven ≠ immediate response [OK]
- Thinking request-response is bad for microservices
- Believing services must never communicate directly
- Confusing event storage with communication pattern
Solution
Step 1: Analyze order confirmation requirement
User needs immediate confirmation, so request-response pattern fits best for order placement.Step 2: Analyze inventory and shipping updates
These can be delayed and processed asynchronously, so event-driven pattern suits these tasks.Step 3: Combine patterns appropriately
Use request-response for immediate feedback and event-driven for asynchronous updates to scale well and keep user experience smooth.Final Answer:
Use request-response for order confirmation; event-driven for inventory and shipping -> Option CQuick Check:
Immediate = request-response; delayed = event-driven [OK]
- Using event-driven for immediate confirmation
- Using request-response for all async tasks
- Ignoring user experience needs
