Distributed Tracing sistemin Frontend cihazlarından başlayarak backend servislerine ve veritabanı seviyesine kadar olan akışını izler ve bize bununla ilgili telemetri verilerini sunar. Bu telemetri verileri kullanılarak, bir uygulamanın farklı bileşenlerindeki performans sorunları tespit edilebilir ve bu sorunların kaynak nedenleri belirlenebilir.
Bu teknikte bu izlemeyi sağlamak için trace ve span yapısı vardır.
Trace bir isteğin geçtiği tüm servisler arasındaki izlediği yolu bize gösterir. Ayrıca her Trace bir Id’ye sahiptir ve spanlar trace içerisinde bulunur.
Span ise bu isteğin farklı kısımlarını temsil eder. Örneğin A Servisinden yapılan bir istek span olarak tanımlanabilir. Kafkaya bu isteğin sonucunda atılacak olan mesaj farklı bir span ve B servisinin bu mesajı consume etmesi farklı bir span ve bunun sonucunda yapılan db işlemi yapması farklı bir span olarak değerlendirilebilir. Spanlerdeki veriler arasında, işlemin başlangıç ve bitiş zamanları, hangi bileşenlerin işlemde yer aldığı, hangi işlem adımlarının atıldığı, hangi işlem adımlarının ne kadar sürede tamamlandığı ve hangi hataların oluştuğu gibi bilgiler yer alabilir. Bu veriler, uygulamanın performansını izlemek ve performans sorunlarını tespit etmek için kullanılabilir.
Distributed tracing sistemleri genellikle ağır işlemler, büyük ölçekli uygulamalar ve mikroservisler için kullanılır. Bu sistemler, bir uygulamanın farklı bileşenleri arasındaki işlemleri takip etmek için tasarlanmıştır ve uygulamanın performansını izlemek için oldukça faydalıdır.
Avantajları
— MTTD(Mean Time to Detect) ve MTTR (Mean Time to Resolve) sürelerini düşürme:
Distributed Tracing sayesinde akışları tümüyle görebildiğimiz için karşılaşılan problemlerin ana sebebini bulma ve çözmeye harcadığımız süre azalacaktır.
— Sistem Mimarisini Öğrenme:
Distributed tracing sayesinde hangi servislerin birbiriyle haberleştikleri hakkkında detaylı bilgiyi ediniriz. Bu bilgi sistemin performansını optimize etmemize fayda sağlar.
— Takımlar Arası İş Birliği ve Üretkenliğin Artması:
Mikroservis mimarisinde bir isteği gerçekleştirmek için farklı ekipler birbiriyle haberleşebilir. Distributed Tracing sayesinde hataların hangi ekipten kaynaklandığını ve ekibin bunu çözmekten sorumlu olduğunu görürüz.
Dezavantajları
— Manuel Enstrümantasyon:
Distributed Tracing tekniğinde bazı durumlarda istekleri izlemeye başlamak için kodunuza manuel olarak ekleme yapmanız gerekir ve bu da belirli bir zaman tüketecektir ve kodun okunurluğunu azaltacaktır.
Open Telemetry
Bir sistemi gözlemlenebilir hale getirmek için enstrümante edilmesi gerekir. Yani, kodun traceler, metrikler ve loglar yayması gerekir. Geçmişte her observability toolunun farklı kütüphanelere sahip olmasından dolayı bir stardardizasyon sıkıntı vardı. Standardizasyon ihtiyacının farkına varan kişiler bir araya geldi ve iki açık kaynak projesi doğdu: OpenTracing (bir Cloud Native Computing Foundation (CNCF) projesi) ve OpenCensus (bir Google Açık Kaynak topluluk projesi).
OpenTracing, telemetri verilerini bir Observability toolarına göndermek için bir api sağladı, fakat geliştiricilerin kendi kütüphaneleri kullanmaları gerekyordu. OpenCensus, geliştiricilerin kodlarını enstrümante etmek ve desteklenen observability toollarının herhangi birine göndermek için kullanabilecekleri bir dizi dile özgü kütüphane sağladı.
Daha sonra tek bir standart oluşturma amacıyla 2 proje Mayıs 2019'da Open Telemetry (kısaca OTel) adıyla birleşti.
Jaeger
Dapper ve OpenZipkin’dan esinlenerek Uber Technologies tarafından oluşturuldu ve CNCF’e hibe edildi.
Avantajları
* Açık kaynaklı bir araç olduğu için tamamen ücretsizdir.
* Kolay kullanım sağlayan bir UI sunar.
* Çok sayıda topluluk tarafından desteklenir ve geliştirilir.
* Birçok farklı programlama dili için destek sunar.
* Kubernetes ve diğer bulut tabanlı ortamlarla kolayca entegre olabilir.
Dezavantajları
* Büyük ölçekli sistemler için bazı performans sorunlarına neden olabilir.
Zipkin
Zipkin, birçok farklı programlama dili için destek sunan açık kaynaklı bir distributed tracing aracıdır. Zipkin, bir UI, veri depolama ve sorgulama araçları gibi temel özelliklere sahiptir. 2010 yılında Twitter tarafından geliştirilmeye başlanmış ve 2016 yılında OpenZipkin adı altındaki açık kaynak topluluğuna devredilmiştir. O zamandan beri bu topluluk tarafından geliştirilmektedir.
Avantajları
* Açık kaynaklı bir araç olduğu için tamamen ücretsizdir.
* Kolay kullanım sağlayan bir UI sunar.
* Birçok farklı programlama dili için destek sunar.
Dezavantajları
* Kubernetes ve diğer bulut tabanlı ortamlarla entegrasyonu biraz zordur.
* Büyük ölçekli sistemler için bazı performans sorunlarına neden olabilir.
AppDynamics
AppDynamics, büyük ölçekli sistemler için bir distributed tracing aracıdır. Bununla birlikte, AppDynamics aynı zamanda ücretli bir araçtır.
Avantajları
- Yüksek ölçekli sistemler için mükemmel performans sunar.
- Zengin bir UI ve gelişmiş analiz özellikleri sunar.
Dezavantajları
* Ücretli bir araç olduğu için kullanımı biraz maliyetlidir.
* Açık kaynaklı değildir.
Datadog
Datadog, ölçeklenebilir bir distributed tracing aracıdır. Datadog, bir UI, analiz ve alarm özellikleri sunar. Ayrıca, diğer monitoring araçlarına da entegre olabilir.
Avantajları
* Ölçeklenebilir bir araçtır ve büyük ölçekli sistemler için uygun performans sunar.
* Kolay kullanım sağlayan bir UI sunar.
* Diğer monitoring araçlarına kolayca entegre olabilir.
* Dezavantajları
* Ücretli bir araçtır.
* Açık kaynaklı değildir.
AWS X-Ray
AWS X-Ray, AWS tabanlı uygulamalar için distributed tracing aracıdır. AWS X-Ray, diğer AWS araçlarına tam entegrasyon sağlar ve bir UI, analiz ve raporlama özellikleri sunar.
Avantajları
* AWS tabanlı uygulamalar için uygun bir distributed tracing aracıdır.
* Diğer AWS araçlarıyla tam entegrasyon sağlar.
* Kolay kullanım sağlayan bir UI sunar.
Dezavantajları
* Yalnızca AWS tabanlı uygulamalar için kullanılabilir.
* Diğer araçlarla entegrasyonu biraz sınırlıdır.