Add comparison with Zipkin

This commit is contained in:
Yuri Shkuro 2017-08-29 20:00:34 -04:00
parent 3dbe0b8dd9
commit e3e1bdcfb5

View file

@ -123,3 +123,32 @@ out there.
Jaeger is a battle tested distributing system that takes advantage of OpenTracing and advances the state Jaeger is a battle tested distributing system that takes advantage of OpenTracing and advances the state
of open source distributed tracing. of open source distributed tracing.
*Comparison with Zipkin*
Zipkin is another popular open source distributed tracing system originally
[released by Twitter in 2012](https://blog.twitter.com/engineering/en_us/a/2012/distributed-systems-tracing-with-zipkin.html).
Jaeger and Zipkin provide roughly similar functionality today; in fact the earlier versions of Jaeger relied on some of Zipkin
components as explained in the [Uber Eng blog post] (https://eng.uber.com/distributed-tracing/). Listed below are some differences
between Jaeger and Zipkin, along with how they can interoperate:
* *OpenTracing Instrumentation Libraries*. All Jaeger instrumentation libraries are built to support the OpenTracing standard.
Zipkin ecosystem has a couple of OpenTracing compatible libraries, but most of them do not support it, instead requiring the
applications to use bespoke APIs and Zipkin-only semantic annotations.
* *OpenTracing Compatible Backend and UI*. Jaeger is built with OpenTracing standard in mind from the ground up, including the
backend, the data models, and the UI. Zipkin backend does not support all of the features of OpenTracing, specifically
structured k-v span logs and multi-parent spans / DAGs (which are possible in OpenTracing via span references).
* *Instrumentation Libraries Maintenance*. Jaeger instrumentation libraries are officially part of the project and undergo
continuous integration testing against each other and against the backend. Zipkin instrumentation libraries are not officially
part of the project, often not even located in the openzipkin Github org, and rarely integration-tested against each other.
On the other hand, Zipkin libraries exist in more languages. Today Jaeger supports Go, Java, Python, and Javascript,
with Ruby and C++ implementation on the way.
* *Distributed Context Propagation*. General purpose context propagation is extremely useful in microservices based systems.
In addition to tracing it can support many other applications, including resource attribution / chargebacks, capacity planning,
chaos engineering, security. All Jaeger libraries support context propagation via OpenTracing feature called “baggage”.
Most Zipkin libraries do not support propagation of custom context metadata.
* *Storage Backends*. Zipkin supports more storage backends since it has been around a lot longer. Jaeger currently supports
Cassandra and Elasticsearch as production quality storage backends.
* *Interoperability*. Jaeger backend can be used as a replacement for Zipkin backend in organizations that already invested
in Zipkin instrumentation. Jaeger instrumentation libraries can also be configured to interoperate with Zipkin libraries
via Zipkin wire format (B3 headers), that allows new services to be instrumented with OpenTracing.