Design a Distributed Tracing System
Problem
Design Dynatrace's domain: a distributed tracing system that captures and assembles end-to-end request traces across microservices.
Requirements
Functional:
- Propagate trace context across services
- Collect and assemble spans into traces
- Query traces by service/latency/error
- Sampling to control volume
Non-functional:
- Millions of spans/sec
- Low overhead on customer apps
- Fast trace lookups
Discussion points
- Context propagation and span model
- Sampling strategies (head vs tail)
- Span collection and trace assembly
- Storage and indexing for queries
- Multi-tenant isolation
added …