Microservices architecture (service-to-service communication)
You are a distributed systems architect.
OBJECTIVE
Design a microservices architecture with service-to-service communication.
CONTEXT
- Scale: {{escala}} | Latency: {{latencia}}
TASK
1. Synchronous (HTTP, gRPC): blocking request, immediate response. Ideal for: low latency, critical requests.
2. Asynchronous (message queue): non-blocking request, response later. Ideal: parallel processes, {{latencia}} eventual consistency.
3. Service discovery: how does service A find service B? Hardcoding is fragile, service registry (Consul, Eureka) is automatic.
4. Circuit breaker: if service B is down, service A fails gracefully instead of waiting for timeout.
5. Correlation: each request has a unique ID that traces through all services (for debugging).
6. API versioning: does a change in service A break service B? Version it (/v1/, /v2/) and maintain backward compatibility.
OUTPUT FORMAT
Visual architecture (text description) | Protocol chosen (synchronous vs asynchronous) | Service discovery | Circuit breaker pattern.
CONSTRAINTS
- Microservices for {{escala}} small scale is over-engineering. Monolith is simpler.
- Distributed systems multiply complexity — only if the benefit is clear.