Tracing distributed (micro-)service calls
Discussion of experiences implementing APM / distributed tracing in Java. Talk is part performance, part byte code manipulation.
With the ascent of distributed architecture, modern software increasingly unwinds into networks of micro(-service) components. While this approach to building software — if done correctly — can improve a system’s maintainability and scalability, distributed applications also introduce challenges for operations. Where monolithic applications typically offered direct access to extensive monitoring dashbords, such easy overview is no longer available when a multitude of services is connected loosely on a network. But how to keep track of a system of such dynamic state?
Distributed tracing is a method of connecting interaction of different services on a network. Collecting and processing such tracing information again allows for the observation of a distributed system in its entirety. This talk shares the presenter’s insights gained by working on the JVM-support of distributed tracing for the APM tool Instana. Doing so, it introduces the landscape of approaches to distributed tracing on the JVM, discussing popular approaches such as Dapper, Zipkin or Brave/OpenTracing. In the process, it is discussed how byte code instrumentation can be used to capture systems without requiring a user to set up the software under observation. The presentation finishes with a discussion of typical problems of distributed tracing solutions and carefully examines the performance penalties APM tools entail.