openzipkin / zipkin

Zipkin is a distributed tracing system
https://zipkin.io/
Apache License 2.0
17.02k stars 3.09k forks source link

Zipkin c/c++ tracer library #1643

Open codefromthecrypt opened 7 years ago

codefromthecrypt commented 7 years ago

There are a couple c or c++ zipkin libraries out there.

For example, there's some recent work in envoy, which was made and/or facilitated by @rshriram @RomanDzhabarov @fabolive and @mattklein123. This is high performance code, having had several reviews on it, though its only instrumentation target is envoy

There's an offer from LightStep employees to help push forward the stalled https://github.com/openzipkin/zipkin-cpp-opentracing (noted on https://github.com/lyft/envoy/issues/1196 by @tedsuo and gitter by @rnburn)

Meanwhile, there is also recent work by @flier on a zipkin c/c++ tracer including a gRPC example https://github.com/flier/zipkin-cpp

What's most supportable are things reused, maintained by multiple people and stable (with regards to zipkin). At the end of the day, what ends up being made, though, are things people feel like working on :) Unlike other projects, zipkin does not have a large deck of fulltime staff to work on things.

What I would like to see is a c/c++ library (in or outside zipkin's org) which binds to Zipkin. This could be used directly where performance or best experience with Zipkin is a goal. Abstractions like OpenTracing or Census could bridge to apis inside this repo. This decouples Zipkin support from any api opinions (such as logging) which are made in these abstractions, any version incompatibilities, etc, and centralizes the mapping concern. Formalizing on a zipkin library will certainly help support and triage (knowing the difference between a zipkin problem and an abstraction mapping problem. I'd go so far as to say zipkin-go-opentracing should have been split this way knowing what we know now cc @basvanbeek.

One way to progress could be to move @flier's work into the org. Another could be to create a fresh repo and pick things from various places. Main thing is to not setup yet another abandoned library, or one that leads users to api thrash or poor experience... diverse interest is important, and advocacy for Zipkin is important in OpenZipkin works.

Thoughts?

tedsuo commented 7 years ago

Hi @adriancole. Just to let you know where we're currently at.

Cheers, Ted

codefromthecrypt commented 7 years ago

Hi, ted.

Thanks for the updates. This sounds like great progress

One thing quite important is having multiple folks on a project as we have been bit in the past. There are abandoned or barely breathing works and these confuse and annoy people. Diversity is missing in these scenarios.

For example eventhough criteo/zipkin4net is behind one of the largest zipkin sites (2.5M req/second on burst for a service), and also well maintained, we are waiting for more buy in before moving the project here.

Can you do me a favor and ping the authors of the original zipkin c++driver about the repo you have? That might raise attention. I will look at it, too, and see if I can find others. Maybe flier will reply back.

If we have a couple contributors who dont work at the same place on board to help, then seems a good idea to consider.

Hope it makes sense, but if not ping back! Regardless, good work.

flier commented 7 years ago

Hi @adriancole,

Thanks for your advice, I'm open to use either zipkin-cpp or zipkin-cpp-opentracing, if it could provide enough features that we are using, such as native C API, kafka collector etc.

We maintains zipkin-cpp and rust-zipkin because the exists library doesn't meet our requirements. We glad to fix issues and accept PR for those projects, because our internal projects depend on it.

If @tedsuo like to sync up API design, I think we may extract a thin API layer (C and C++), such as a zipkin-cpp-api project, as the official project, and maybe a zipkin-cpp-spec project to define scenes with test cases.