diff --git a/proposals/jaeger.adoc b/proposals/jaeger.adoc index f70089d..e67f11d 100644 --- a/proposals/jaeger.adoc +++ b/proposals/jaeger.adoc @@ -123,3 +123,32 @@ out there. Jaeger is a battle tested distributing system that takes advantage of OpenTracing and advances the state 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.