در معماری میکروسرویس بر خلاف معماری مونولیتیک ما تعداد زیادی سرویس داریم که برخی از آن ها برای رفع نیاز هایشان از طریق sdk ها با هم در ارتباط هستند. در صورت بروز مشکل(ارور) در یکی از endpoint ها ، ما برای بر طرف کردن مشکل نیاز به این مورد داریم که بدانیم در کدام سرویس مشکل به وجود آمده است این جاست که ابزار های tracing به کمک ما می آیند و با نشان دادن life cycle یا مسیر طی شده توسط ریکویست ، سرویس دچار مشکل به راحتی مشخص میشود.
البته این موضوع از طریق چک کردن لاگ سرویس ها هم قابل حل هست اما tracing راه حل آسانتر و سریعتری هست.
Jaeger یکی از محبوب ترین ابزار های tracing هست در این مقاله به معماری آن اشاره میکنیم.
در jaeger چند تعریف مهم وجود دارد .
مورد اول trace نام دارد که در اصل مسیر ریکویست ما را نشان میدهد.
مورد دوم span نام دارد که در واقع لاگ های مسیر را نشان میدهد . میتوان گفت که هر trace از تعدادی span تشکیل شده است که به تعبیر دیگر اگر مسیر ریکویست را یک گراف در نظر بگیریم که در حالات مختلف به مسیر های مختلف دارد span ها مانند راس های گراف هستند و trace هم در اصل خود گراف هست.
مفهوم دیگر context ها هستند که در واقع در داخل span قرار دارند. هر context تشکیل شده است از span id ,trace id مورد دیگری به نام baggage که حاوی یک سری اطلاعات اضافه تر هست که توسط
سرویس قابل اضافه و کم شدن هست.
حال که با مفاهیم اولیه در jaeger آشنا شدیم به سراغ معماری آن میرویم.
همان طور که در تصویر میبینید jaeger از قسمت های مختلفی تشکیل شده است. برای استفاده از jaeger همواره باید بر روی سرویس خود با استفاده از sdk مناسب (با توجه به زبان برنامه نویسی استفاده شده) یک jaeger client داشته باشید. با استفاده از jaeger client باید trace , span ها را برای ارتباط با jaeger-agent ایجاد کنید . jaeger-agent در این مرحله span ها را تحت پروتکل udp از jaeger-client دریافت میکند سپس اطلاعات دریافت شده را به jaeger-collector میفرستد .jaeger-collector ابتدا نقش ولیدیتور را ایفا میکند و ولید بودن اطلاعات را بررسی میکند سپس آن را به storage میفرستد در این مرحله از message broker ها هم استفاده کرد که این موضوع هم پیشنهاد میشود تا دیتا های jaeger-collector با اطمینان خاطر حتما به storage برسند. storage استفاده شده توسط jaeger قابل تغییر (configable) هست. سپس jaeger-query دیتا ها را از storage دریافت میکند و به ui میفرستد و در ui نمایش داده میشوند.
**موارد مهم**
این هم آدرس ریپوزیتوری jaeger هست :
https://github.com/jaegertracing/jaeger
موفق باشید