ملاحظة من طاقم التحرير في الترجمات: تصف المقالة المقدمة المنتج المغلق لشركة معينة ، وللأسف ، لا يوجد دليل على أنه تم التخطيط لفتحه على الإطلاق - بمعنى ستالمان للكلمة. ومع ذلك ، بدا لنا مهمًا ومفيدًا للغاية في التفكير في كيفية تعامل الأشخاص بشكل عام مع مشكلات تصحيح Istio وكيفية تحسين عملهم في هذا المجال. ربما شخص ما يمكن أن يوجه بضعة أفكار مثيرة للاهتمام لأنفسهم.في مرحلة ما ، عند تطوير أنظمة الإنتاج القائمة على بنية الخدمة المصغرة ، توصلنا إلى أن مراقبة كل عنصر على حدة من خدماتنا لا يكفي للتعامل مع المشاكل الخطيرة. مع مرور الوقت ، هناك حاجة إلى الحصول على صورة كاملة عن مكدس المكالمة بالكامل في التطبيق بالكامل في نفس الوقت ، مع معلومات مفصلة حول طوبولوجيا الطلب وتأخير الشبكة ومدة الأوامر الفردية. لحل هذه المشكلة ، عادة ما يلجأ المهندسون إلى التتبع الموزع.
في هذا المنشور ، سيتم فحص مفهوم التتبع الموزع من خلال منظور هندسة الخدمات المصغرة: كيف يتكامل كل هذا مع نظام
Istio وأتمتة ، ومن ثم يتم تبسيط العملية برمتها ومعالجتها من خلال
Backyards - منتج الخدمة الخاص بنا لـ Istio.
دخول
في وقت سابق ،
كتبنا عن مدى تعقيد عملية تثبيت وتكوين Istio ، لذا لتبسيط هذا الموقف ، اخترنا
التطوير مفتوح المصدر لـ Banzai Cloud Istio . بالإضافة إلى Istio ، يمكنك استخدام عدد من الأدوات المريحة مع Helm (
Prometheus ،
Grafana ،
Jaeger ،
Kiali ) ، على أي حال ،
معظم طلبات الدعم / التكامل جاءت منها. نظرًا لأننا نعتقد أن
الجميع يختار أداة تروق لهم ، فإننا لم ننفذ هذه الأدوات بشكل صارم في Istio ، لكننا وفرنا فقط القدرة على دمج هذه المكونات بسهولة.
بالإضافة إلى ذلك ، أردنا أن نوفر لمستخدمينا أداة قوية أخرى لإدارة المكونات المدرجة في المجموعة (أي شيء آخر غير Istio) ، لذلك أنشأنا أيضًا
Backyards . باستخدامه ، يمكنك بسهولة تثبيت Prometheus و Grafana و Jaeger ، وعلى عكس Kiali ، فإن Backyards ليس مجرد واجهة مراقبة قائمة على الويب ، ولكنه أداة متعددة الوظائف متكاملة لإدارة شبكة خدماتك. وهو متوافق مع مجموعة واحدة أو عدة مجموعات في آن واحد ويحتوي على واجهة برمجة تطبيقات CLI و GraphQL قوية.
في هذا المنشور ، سوف نركز على التتبع الموزع و Jaeger.
مقدمة للبحث الموزع
في بنية خدمات microservices ، عندما تتصل عدة خدمات بعضها البعض في نفس الوقت ، يكون من الصعب العثور على المشكلات وتصحيحها. في الواقع ، يكمن هذا البيان في السبب الرئيسي وراء انخفاض كفاءة طلبات الخدمة: ما الخدمة التي أصبحت عنق الزجاجة ، ما مدى تأخر الشبكة بين الطلبات؟
بفضل التتبع الموزع ، يمكنك تصور شجرة المكالمة الكاملة ، ومعرفة الخدمة التي وصلت إلى الخدمة ، والمدة التي تستغرقها كل مكالمة وما هو التأخير في الرد. هو تتبع الموزعة التي تساعد على تحديد مكان حدوث الفشل وأي خدمة خارج وقت الاستجابة.
تتبع الموزع هو عملية تتبع الطلبات الفردية عبر مكدس المكالمة بالكامل داخل النظام.

بدون استخدام التتبع الموزع ، من السهل حقًا أن تضيع في العديد من المكالمات المتبادلة بين الخدمات الصغيرة. من الصعب أيضًا تصحيح المشكلات بدونها ، حيث يجب عليك الاعتماد فقط على السجلات. ولكن بفضل التتبع الموزع ، تصبح مجموعة مكالمات المكالمة بالكامل مع كافة المعلومات اللازمة لتشخيص المشكلة متاحة لك.
تحت غطاء محرك السيارة من أثر الموزعة
Span هي أصغر وحدة في عملية تتبع موزعة. لديها تسميات "البدء" و "المدة". Span لديها علاقات الوالدين والطفل مع بعضها البعض وتشكل معا تتبع.
هناك ثلاث مهام يمكن من خلالها جمع الآثار بشكل صحيح
1. Incoming request spans 2. Outgoing request spans 3. Context propagation
يمتد الطلب الوارد:
عندما يصل طلب ما إلى خدمة ما ، يجب التحقق من وجود رأس تتبع. إذا لم يكن هناك رأس ، فمن الضروري إنشاء نطاق الجذر (الأصل) لبدء التتبع ، إذا كان الأمر كذلك ، فقم بإنشاء مسافة فرعية لمتابعة التتبع.
يمتد الطلب الصادر:
عند إرسال طلب من خدمة إلى أخرى ، يتم إنشاء نطاق أولاً ، لذلك يستمر الطرف الذي يستقبل الطلب في التتبع ، كما هو موضح أعلاه.
نشر السياق:
الخدمات عادة تلقي وإرسال طلبات متعددة في وقت واحد. دون إجراء أي تغييرات ، يستحيل تتبع الاتصال بين الطلبات الواردة والصادرة. هذا هو المكان الذي تأتي فيه أرقى ساعة للتعبير عن السياق. بالنسبة إلى HTTP ، يمكن القيام بذلك عن طريق تمرير رؤوس التتبع للمكالمات الواردة إلى المكالمات الصادرة من التطبيق ، مما سيتيح لك إنشاء تتبع كامل.
بالإضافة إلى هذه المهام ، ينبغي جمع الآثار وتجميعها وتصورها بشكل مثالي.
قد يبدو كل هذا معقدًا بدرجة كافية ليتم تنفيذه على جميع الخدمات داخل النظام ، ولكن هناك أدوات تتيح لك حل جميع المهام الموضحة في الوضع التلقائي تقريبًا. ونتيجة لذلك ، يمكن للمطورين الحصول على تتبع موزَّع ، في الواقع ، خارج الصندوق.
لمزيد من المعلومات حول المبادئ الأساسية للتتبع الموزع ، أوصي بقراءة هذا المنشور الرائع من Nike .تتبع الموزعة في Istio
في Istio ، يقوم وكلاء Envoy بالعمل القذر
للتتبع الموزع . يوجد حقنة جانبية في Istio ، بفضل مرور جميع الطلبات الواردة والصادرة إلى / من الخدمة أولاً عبر خادم وكيل Envoy. في هذه المرحلة ، يتم إنشاء تتبعات الوالدين والبنت ، وهما الشرطان الأوليان من الشروط الثلاثة اللازمة لإنشاء تتبع موزع.
يجب تنفيذ الشرط الثالث - نقل السياق - من خلال تغيير في منطق التطبيق. في
Istio Bookinfo ، يتم تطبيق هذا بالفعل على مستوى كل خدمة ميكروس ، لذلك يمكن الحصول على آثار كاملة فور التثبيت. عند استخدام التتبع الموزع في الخدمات الخاصة بك ، تحتاج إلى تنفيذ
نشر السياق بنفسك.
على عكس بعض المفاهيم الخاطئة الشائعة ، تجدر الإشارة إلى أنه لا يمكن إنشاء الدعم الكامل للتتبع الموزع مع
نشر السياق حتى على مستوى شبكة خدمة منتظمة إلا عن طريق تغيير منطق التطبيق. يتم تقديم مثال جيد في
Caveat 1 .
يحتوي موقع Istio على
وثائق حول الرؤوس التي يجب استخدامها. جميعها متوافقة مع
تنسيق رأس Zipkin .
يرجى ملاحظة أنه بالإضافة إلى التتبع القائم على المبعوث الموضح أعلاه ، لدى Istio أيضًا تتبع يستند إلى Mixer يستخدم مكون Mixer بشكل أكثر نشاطًا. من المحتمل أنه في الإصدارات المستقبلية سيتم إيقاف Mixer ، لذلك لن أصف العمل بها بالتفصيل. لا يستطيع المرء إلا أن يقول أنه يمكن الشعور بالقياس عن بعد من خلال المشغل.
مع Envoy وتوزيع رؤوس التتبع التي نحتاجها ، يمكننا الحصول على الآثار التي نحتاجها. لجمع هذه المعلومات وتصورها ، يأتي Istio مزودًا بأدوات مثل
Jaeger و
Zipkin و
Lightstep و
Datadog . بشكل افتراضي ، يتم استخدام Jaeger ، وهو أيضًا الأداة الأكثر شيوعًا لكل القوائم المدرجة.
يمكننا أيضًا ضبط معدل أخذ العينات ، أي النسبة المئوية لجميع الطلبات التي سيتم تقديمها في شكل تتبعات. القيمة الافتراضية هي 1٪ من إجمالي عدد الطلبات. يمكن تغيير التردد هنا في
هذا الحقل من مشغل Istio.
كيف يعمل في استيو
دعونا نلخص كيفية القيام بالتتبع الموزع مع Jaeger (سنقوم لاحقًا بمقارنة ذلك بنفس العملية في Backyards):
- جنبا إلى جنب مع Istio ، يمكنك الحصول على Jaeger مع جميع الخدمات اللازمة والنشر.
- يتم تعيين عنوان خدمة التتبع بشكل افتراضي من خلال تكوين وكلاء Envoy ومن خلالهم تعمل تقارير Span والخدمات الجانبية.
- يمكن تثبيت Bookinfo قبل أن تقوم جميع الخدمات بتوزيع رؤوس رؤوسها على التتبعات .
- سوف تصبح الآثار متوفرة بعد جمع معلومات كافية.
- يمكن إعادة توجيه لوحة تحكم Jaeger لفتح جزء المستخدم من خلال متصفح.
تتبع الموزعة في الفناءات
في Backyards ، تثبيت Jaeger وتكوينه ، تثبيت تطبيق تجريبي برؤوس التتبع الموزعة تلقائيًا وإرسال الأحمال إلى كل هذا - يتم كل شيء باستخدام أمر واحد بسيط! وبعد ربط الخدمات مع بعضها البعض بالمسارات ، يصبح كل هذا متاحًا من واجهة المستخدم.
انظر الان!
إنشاء كتلةحسنًا ، بالنسبة للمبتدئين ، نحتاج إلى مجموعة في Kubernetes. لقد أثرت نظام Kubernetes على GKE من خلال الإصدار المجاني من Pipeline للمطورين. إذا كنت تريد أن تفعل نفس الشيء ، فقم بإنشاء مجموعتك من خلال Pipeline على أي من مزودي السحابة الخمسة الذين ندعمهم. خلاف ذلك ، ارفع مجموعة Kubernetes الخاصة بك في مكان آخر.
كيف يعمل في الفناءاتفي وقت سابق ، لخصنا النتيجة الوسيطة التي يمكن أن تستخدم جايجر بالتزامن مع Istio. الآن دعنا نقارن كيف يحدث كل شيء في الأفنية الخلفية.
الآن ، أسهل طريقة لتثبيت Istio و Backyards والتطبيق التجريبي على كتلة جديدة هي استخدام
واجهة سطر الأوامر Backyards .
تحتاج إلى إدخال أمر واحد فقط (في نظام المجموعة يجب أن يكون
KUBECONFIG):
$backyards install –a –run-demo
- باستخدام هذا الأمر ، يتم تثبيت Jaeger تلقائيًا (بدلاً من مكونات مشغل Istio مفتوحة المصدر ومكونات Backyards).
- كما ذكرنا سابقًا ، Istio جاهز للتكامل مع المكونات الأخرى مثل Prometheus أو Grafana أو Jaeger. عند تثبيت Jaeger ، يتم تعيين عنوان الخدمة الخاص بها في نافذة مستخدم المشغل. في المستقبل ، يتم كتابة هذا العنوان في كل مكان حيث يلزم التحكم في مكونات Istio وتدفق البيانات.
- يتم تثبيت التطبيق التجريبي أيضًا افتراضيًا. يستخدم خدمات golang التي تم تكوينها بالفعل لتوزيع رؤوس التتبع اللازمة.
- يبدأ التحميل التلقائي للتطبيق التجريبي (ومن هناه علامة -run-demo ) ، حتى تتمكن من بدء تعقب المسارات على الفور.
- يفتح Jaeger من خلال بوابة الإدخال ، ويرتبط بـ UI ويتوفر تلقائيًا في شكل مخطط وكقائمة.
الأمر بسيط مثل كتابة فريق لإنشاء مجموعة Kubernetes جديدة ، لذا
جربها إذا كنت تريد!
إليك ما سترى:جايجر مرتبطة مع المخطط:

وهنا قائمة:

Jaeger UI للتطبيق التجريبي:


في واجهة المستخدم ، يمكنك رؤية مكدس المكالمة بالكامل في نظام خدمة microservice الخاص بك. يمكنك الآن تتبع وقت بدء الطلب الجذر بالضبط والمدة التي استغرقها كل طلب. أو ، على سبيل المثال ، يمكنك أن ترى أن الخدمة التحليلية قضت معظم الوقت في استعلامات معينة ، لأنها مشغولة بالحسابات الفعلية (على سبيل المثال ، تقوم بحساب قيم Pi).
تنظيفلإزالة التطبيق التجريبي ، Backyards و Istio من نظامك ، تحتاج فقط إلى فريق واحد. سوف تتولى إزالة جميع المكونات بالترتيب الصحيح:
$ backyards uninstall -a
النتائج
يعد التتبع الموزع ضروريًا بشكل أساسي للأنظمة الموزعة الحالية التي تحتاج إلى حل أي صعوبات أو مشاكل. يركز مشغلنا ، Istio ، فقط على الإدارة ، حيث تحتوي Backyards على العديد من المكونات التي يمكن استخدامها في العمل. على سبيل المثال ، هذا هو Jaeger ، والذي يوفر من خارج الصندوق القدرة على إجراء التتبع الموزع.
في هذه الحالة ، يتم تثبيت Jaeger باستخدام Backyards ، ويعرض الأخير جميع روابط وآثار Jaeger في النظام مباشرة في الواجهة!
هل لديك أثر لطيف!