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

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

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

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

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

1a18bf1e50d7d2bdfe52a6c9fceec244?s=128

saiya_moebius

November 23, 2019
Tweet

Transcript

  1. 1.
  2. 2.
  3. 3.
  4. 4.
  5. 5.
  6. 6.
  7. 7.
  8. 8.
  9. 9.
  10. 11.
  11. 12.

  12. 13.
  13. 14.
  14. 15.
  15. 16.
  16. 17.
  17. 18.
  18. 19.
  19. 20.
  20. 21.
  21. 23.
  22. 24.
  23. 25.
  24. 26.
  25. 27.
  26. 28.
  27. 29.
  28. 30.
  29. 31.
  30. 32.
  31. 33.
  32. 34.
  33. 35.
  34. 36.
  35. 37.
  36. 38.
  37. 39.
  38. 40.
  39. 41.
  40. 42.
  41. 43.
  42. 44.
  43. 45.
  44. 46.
  45. 47.
  46. 48.
  47. 49.
  48. 51.

    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"); } } }
  49. 53.

    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"); } }
  50. 55.
  51. 59.

    @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"); } } }
  52. 60.

    void yourMethod() { // span // try-with-resources close try (TraceSpan

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

    void yourMethod() { // span // try-with-resources close try (TraceSpan

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