المقدمة

في التطبيقات الكبيرة وخصوصًا اللي بتتعامل مع المايكروسيرفسز (Microservices)، بيبقى عندنا الـ System مُقسم لمجموعة خدمات (Services) صغيرة بتشتغل مع بعض عشان تنفذ المهام.

ولما بيجي طلب (Request)، بيعدي من خلال كذا خدمة، وأحياناً ممكن يعدي على سيرفرات مختلفة. هنا بيجي دور الـ Distributed Tracing، اللي هو عملية تتبع الطلب عبر النظام كله عشان نعرف مشواره من أول ما وصل لحد ما خلص.

والهدف الأساسي من الـ Distributed Tracing هو توفير رؤية واضحة لرحلة الطلب (Request) عشان لو فيه مشاكل أو بطء في الأداء نقدر نحدد مصدرها. بنقدر نعرف فين بالتحديد الـ bottleneck أو الخدمة اللي فيها مشكلة. الفكرة ببساطة إننا بنخلي النظام زي خريطة واضحة للـ flow بتاع الطلبات عشان نقدر نفهم كل خطوة.

وعشان نفهم اكتر رحلة الـ Request Flow ونتعرف ازاي الـ Distributed Tracing بيتم محتاجين نتعرف اصلا على الـ TraceID.


TraceID


وقت ما بتعمل Order من تطبيق توصيل للأكل الطلب بتاعك بيمر ب Services كتير من اول تحديد المطاعم المتاحة لحساب وقت التوصل و إرسال الطلبات لعامل التوصيل و خدمة تتبع الطلب إلخ…

فالـ Trace Id بيكون " مُعرف التتبع " بيكون مع الطلب و هو رايح لكل Service من دي عشان يميز الـ Order دا عن غيره و نعرف نتتبع مساره من أول خدمة لاخر خدمة.

ودا لأن كل Service بتعامل الـ Order كـ Request جديد وممكن متكونش عارفة حاجة عن الـ Service اللي قبلها او اللي بعدها.

💡
الـ TraceID هو حاجة أساسية جداً في عملية التتبع دي. ده عبارة عن Identifier (معرف) بيبقى مميز لكل طلب، بيتولد مع أول خطوة بيعملها الطلب في النظام. الهدف منه إنه يخلي كل خطوة أو خدمة تشتغل مع الطلب ده تقدر تتعرف عليه.

وقت الـ Monitoring نقدر نستخدم الـ TraceID عشان نحصل علي ال Logs او الـ Errors المرتبطة بالطلب دا من كل الخدمات في نظامنا في مكان واحد.

Distributed Tracing
Distributed Tracing

ما هي فوائد استخدام الـ Tracing

  • يكون عندنا Better Observability
  • تسهيل عملية الـ Debugging and Monitoring: فوقت ال Monitoring بنستخدم الـ TraceID عشان نشوف العملية كلها و نقدر نلاحظ التأخير أو المشاكل حصلت في انهي مرحلة.
  • تعقب الأخطاء: في الأنظمة المعقدة ممكن يحصل Exception او Error ظاهري و بنحتاج الـ TraceID عشان نقدر نلاقي السبب الجذري وراء المشكلة.

كيف يعمل الـ Tracing

  1. عند دخول طلب إلى النظام (مثل طلب HTTP)، يتم توليد TraceID فريد لهذا الطلب.
  2. يتم تمرير هذا الـ TraceID عبر جميع المكونات أو Services التي تتعامل مع هذا الطلب.
  3. كل خدمة تضيف سجلاتها (Logs) المتعلقة بالطلب، مشيرة إلى الـ TraceID، بحيث يمكن جمع هذه السجلات فيما بعد لتحليل مسار الطلب.
  4. عند تحليل الـ Logs أو تتبع الأخطاء، يتم استخدام الـ TraceID لتجميع المعلومات المتعلقة بهذا الطلب من جميع المكونات.

أهم الأدوات المستخدمة لتنفيذ الـ Tracing

يوجد أدوات كثيرة متاحة لتوليد و دمج الـ TraceID في نظامك منها المفتوح المصدر أو المدفوع و منها ما يوفر خدمات Monitoring إضافية من أمثلة هذه الأدوات:

  • Open telemetry
  • Jaeger
  • Google cloud trace
  • Datadog

في الختام

الـ Distributed Tracing بيوفر طريقة قوية جداً لرؤية كاملة عن رحلة الطلبات في الأنظمة المعقدة والمتوزعة زي المايكروسيرفسز. وبيسهل علينا نعرف إيه اللي بيحصل، ونحدد المشاكل ونحلها بشكل أسرع، ده غير إنه بيساهم بشكل كبير في تحسين الأداء العام للتطبيقات الكبيرة.

الـ TraceID هو المفتاح اللي بيساعدنا نربط كل خطوة في رحلة الطلب، وده بيدينا رؤية متكاملة عشان نقدر نفهم التطبيق بشكل أفضل ونلاقي حلول لمشاكل البطء أو الأعطال.

وطبعا استخدام الأدوات دي بيخلي التعامل مع الأنظمة المعقدة أسهل وبيساعدنا نحافظ على جودة عالية للتطبيقات اللي بنقدمها للمستخدمين.