Komponen Distributed Tracing
Pendahuluan
Pendahuluan mengenai awal muasal Distributed Tracing ini bisa dilihat di sini
Apa saja komponen Distributed Tracing.
Ketika berbicara mengenai Distributed Tracing, maka kita akan menemukan istilah-istilah ini :
- Request
- Trace
- Trace Context
- Span
- Root span
- Child span
Sesuai dengan masalahnya yaitu Distributed Tracing, maka yang menjadi Entitas utamanya adalah yang dinamakan Trace.
Sebuah Trace akan terdiri dari banyak Span.
Hmm, mungkin lebih baik kita bahas satu persatu :
- Request
Request dalam hal ini adalah komunikasi/data yang datang ke sebuah microservice.
Entah itu datangnya dari pemanggilan API oleh frontend/UI, atau pemanggilan antara microservice sendiri.
- Trace
Trace merepresentasikan alur lengkap dari rentetan request yang berkaitan.
Jadi trace akan melibatkan banyak request.
Sebuah trace misalnya merepresentasikan alur request untuk proses login, sbb :
- pengguna mengklik tombol login setelah mengisi username-password.
- setelah diklik, maka Frontend akan memanggil url gateway service login.
- service api-gateway dipanggil.
- service-gateway lalu men-forward requestnya ke service-authentication.
- service-authentication kemudian membutuhkan dan memanggil service-outh2-authentication, karena memakai teknologi oauth2 yang dibikin service sendiri misalnya.
- service-oauth2-authentication melakukan otentikasi dan mengembalikan response kepada service-authentication, dan seterusnya.
- Span
Span merupakan blok individu yang membentuk trace.
Biasanya span merupakan catatan apa saja yang dilakukan di satu service saja.
Terdiri dari catatan start-time dan end-time dari pemanggilan service/fungsi dan berisi informasi apa yang dilakukan di service tersebut.
Karena satu Trace memiliki banyak Span, maka akan ada namanya Root Span, atau catatan pertama dari service pertama yang dipanggil dari sekian banyak runtutan service yang dipanggil dalam sebuah trace.
Ketika ternyata Root span ini memanggil service lain lagi, maka akan dibuat span baru yang merupakan subsequent dari span tersebut.
Subsequent Span ini disebut juga Child Span.
Dengan kondisi diatas, maka bisa dibentuk struktur data tree untuk menggambarkan proses dan urutan pemanggilan.
Atau kalau lain, ketika setelah sebuah span selesai, maka bisa saja dilakukan pemanggilan service lain, sehingga akan terbentuk span lain di trace yang sama.
- Trace Context
Trace Context adalah identifikasi dan metadata yang digunakan untuk mengaitkan semua proses Trace, Span yang berbeda diatas agar bisa disusun berdasarkan urutannya, request, dan informasi yang berkaitan.
Misalnya :
- membuat unique ID untuk setiap request.
- membuat unique ID untuk setiap step di sebuah step.
- passing informasi ID trace dan metadata dari satu service ke service lain.
Referensi :
https://newrelic.com/resources/ebooks/quick-introduction-distributed-tracing.