Context
When multiple clients request the same data simultaneously (e.g., popular merchant dashboard), the backend processes redundant identical queries.
Current Limitation/Problem
Identical concurrent requests each execute separate database queries and compute the same response. This wastes resources and increases load under traffic spikes.
Expected Outcome
Request coalescing: identical concurrent requests are merged into a single backend execution. All callers receive the same response when it completes.
Acceptance Criteria
- Implement request coalescing middleware for GET endpoints
- Identify coalescable requests: same route, same query params, same auth context
- First request executes, subsequent identical requests wait for first to complete
- Configurable per-endpoint (enable/disable, TTL for coalesced results)
- Proper error propagation: if first request fails, all fail
- Timeout: oldest request timeout applies to all
- Memory: coalesced request promises are garbage collected after completion
- Performance: identical concurrent requests reduced by 90% under load
- Metrics: coalescing hit rate, average wait time
Technical Scope
backend/src/middleware/request-coalescer.ts - coalescing middleware
- Promise registry with key generation (method + path + query + auth hash)
- Redis-based coalescing for multi-instance deployments
- Integration with existing Express middleware stack
- Edge cases: varying auth contexts, streaming responses, mutating requests
Context
When multiple clients request the same data simultaneously (e.g., popular merchant dashboard), the backend processes redundant identical queries.
Current Limitation/Problem
Identical concurrent requests each execute separate database queries and compute the same response. This wastes resources and increases load under traffic spikes.
Expected Outcome
Request coalescing: identical concurrent requests are merged into a single backend execution. All callers receive the same response when it completes.
Acceptance Criteria
Technical Scope
backend/src/middleware/request-coalescer.ts- coalescing middleware