Upgrade to Pro — share decks privately, control downloads, hide ads and more …

分散トレーシングの技術選定・OSS 貢献, Stackdriver Trace での性能可視化・改善 / Distributed Tracing case study

分散トレーシングの技術選定・OSS 貢献, Stackdriver Trace での性能可視化・改善 / Distributed Tracing case study

パフォーマンスに苦労している並列処理システムを改善するために Stackdriver Traceを導入して動作の可視化を行った結果、 ボトルネックの存在が判明してパフォーマンスを改善できた事例について紹介します。

この事例でStackdriver Traceを選定した過程や OpenTelemetry へコントリビュートした経緯についても共有します。

また、新規開発のGraphQLサーバへ導入して REST APIサーバと通信をまたいだ可視化を行った事例についても紹介します。

saiya_moebius

November 23, 2019
Tweet

More Decks by saiya_moebius

Other Decks in Programming

Transcript

  1. class Foo { private static final Tracer tracer = Tracing.getTracer();

    public static void main(String ...args) { try { setupOpenCensusAndStackdriverExporter(); } catch (IOException e) { return; } yourMethod() } void yourMethod() { try (Scope ss = tracer.spanBuilder("yourMethod").startScopedSpan()) { // Span span = tracer.getCurrentSpan(); span.addAnnotation("name_of_tag", "foobarbaz"); } } }
  2. void yourMethod() { // span // try-with-resources close try (Scope

    ss = tracer.spanBuilder("do_something").startScopedSpan()) { // // // // Span Span span = tracer.getCurrentSpan(); // span.addAnnotation("name_of_tag", "foobarbaz"); } }
  3. @Service class Foo { private final M3Tracer tracer; // Constructor

    Injection (DI) public Foo(M3Tracer tracer) { this.tracer = tracer; } void yourMethod() { try (TraceSpan span = tracer.startSpan("do_something")) { // span.set("name_of_tag", "foobarbaz"); } } }
  4. void yourMethod() { // span // try-with-resources close try (TraceSpan

    span = tracer.startSpan("do_something")) { // // // // span.set("name_of_tag", "foobarbaz"); } }
  5. void yourMethod() { // span // try-with-resources close try (TraceSpan

    span = tracer.startSpan("do_something")) { // // // // span.set("name_of_tag", "foobarbaz"); } }