Architecture and deployment modes
Many tracing backends, including the Jaeger backend that we will use as an example, are themselves implemented as microservices-based distributed systems that consist of multiple horizontally-scalable components. Some of those components are optional, which allows different deployment configurations depending on the needs of your architecture.
Basic architecture: agent + collector + query service
Figure 14.1 shows the basic architecture of Jaeger that we were running at Uber in 2017. It includes the main components that are common to many tracing backends.
Client
The client library, or the tracing library, or the tracer, is the code that runs inside the business application. For example, the application that is instrumented with OpenTracing would be making calls to the OpenTracing API, and the Jaeger client library that implements that API would be using those calls to extract tracing data from the...