من Traefik إلى APISIX: استكشاف Horizon Robotics لـ Ingress Controller

Xin Zhang

October 10, 2022

Ecosystem

في صناعة السيارات، تقوم معظم الشركات بالانتقال إلى القيادة الذاتية والطاقة الجديدة. خاصة بالنسبة للقيادة الذاتية، استثمرت كل شركة الكثير من الموارد لإكمال تطوير وتدريب نماذج القيادة الذاتية.

في هذه العملية، كيف يمكن ضمان استقرار وكفاءة الأعمال بينما يتم تحديث المنتج بسرعة؟

ستلقي هذه المقالة نظرة على منصة تطوير الذكاء الاصطناعي لشركة Horizon Robotics كمثال لترى كيف ساعدت بوابة API Apache APISIX و Ingress Controller فريق البحث والتطوير في Horizon Robotics على حل هذه النقطة المؤلمة.

مقارنة البوابات

قيود Traefik

قبل استخدام APISIX Ingress Controller، كان Ingress Controller المستخدم في نظام الأعمال هو Traefik1.x، ولكن كانت هناك عدة مشاكل.

  • يقوم Traefik 1.x بتكوين قواعد التوجيه من خلال Ingress، وبعض الإضافات تحتاج إلى التكوين عن طريق إضافة Annotation. بهذه الطريقة، يمكنك فقط إضافة إضافات لجميع القواعد تحت Ingress الحالي، ولا يمكن تحقيق تكوين أكثر دقة.
  • لا يدعم Traefik 1.x التكوين المرئي للقواعد المحددة ولا يمكن تحديد خدمة معينة مباشرة عن طريق الوصول إلى عنوان URL للطلب من خلال المتصفحات.
  • يحتوي ملف التكوين الافتراضي لـ Traefik (ConfigMap) على عدد قليل من السمات، والعديد من التكوينات الافتراضية تحتاج إلى المرور عبر الوثائق الرسمية، وبعض المعلمات غير متوافقة مع التكوين الافتراضي لـ NGINX، مما يجعل الصيانة أكثر إزعاجًا.

ردًا على المشاكل المذكورة أعلاه، قرر الفريق الفني في Horizon Robotics استبدال Ingress Controller. في بداية عملية الاختيار، فكر الفريق في ترقية Traefik إلى 2.0 لحل المشاكل المذكورة أعلاه، ولكن نظرًا لأننا كنا بحاجة أيضًا إلى استخدام CRD جديد للترقية وكانت تكلفة الهجرة باهظة، كان علينا تجربة حلول Ingress Controller أخرى أيضًا.

مزايا APISIX Ingress Controller

في المرحلة الأولى من الاختيار، قمنا بمقارنة Apache APISIX و Kong و Envoy. ومع ذلك، فإن الحلول الأخرى لا تلبي احتياجات السيناريوهات الحالية من حيث الوظائف أو الأداء، باستثناء APISIX Ingress. لذلك، اخترنا أخيرًا APISIX Ingress. بالإضافة إلى بعض الميزات العامة، نحن مهتمون أكثر بالنقاط التالية.

  • الإضافات الغنية: الإضافات متكاملة بيئيًا، ويمكن تكوين جميع الإضافات التي يدعمها APISIX بشكل إعلاني باستخدام apisix-ingress-controller، ويمكن تخصيص الإضافات لخلفية واحدة تحت ApisixRoute.
  • التكوين المرئي: باستخدام APISIX Dashboard، يمكنك رؤية كل apisix route. وإذا تم تكوين نفس النطاق في عدة namespaces أو ملفات YAML، يمكنك البحث عن بادئة المسار بالتزامن مع APISIX Dashboard لتحديدها بسرعة في حالة وجود تعارض.
  • التحقق الدقيق: يقوم APISIX Ingress Controller بالتحقق من الموارد المعلنة في CRD التي يديرها. إذا تم الإعلان عن خدمة غير موجودة في CRD، سيتم تخزين رسالة الخطأ في event لـ ApisixRoute ولن يتم تفعيل التغيير، مما يمكن أن يقلل من بعض المشاكل الناتجة عن سوء الاستخدام إلى حد ما.
  • الميزات الغنية: يدعم APISIX التحديث الساخن والإضافات الساخنة، وإعادة كتابة طلبات الوكيل، والتحقق من الهوية المتعدد، وتطوير الإضافات بلغات متعددة والعديد من الميزات الأخرى. يرجى الرجوع إلى ميزات APISIX لمزيد من المعلومات.
  • المجتمع النشط: مقارنة بمجتمعات الحلول المفتوحة المصدر الأخرى، لدى APISIX العديد من المطورين والمساهمين النشطين على Slack و GitHub وقائمة البريد.
  • الأداء العالي: كما يمكنك أن ترى من الرسم البياني أدناه، فإن أداء APISIX يبلغ حوالي 120% من أداء Envoy عند المقارنة مع اختبار الضغط لـ Envoy، وكلما زادت النوى، زاد الفرق في QPS.

QPS

الهيكل العام

كما يمكنك أن ترى من الرسم البياني الهيكلي أدناه، يعمل APISIX Ingress كنقطة دخول لجميع حركة المرور. تدخل جميع حركات المرور التي يتم الوصول إليها إلى الخدمات الأعلى (خدمات الأعمال) من خلال APISIX Ingress سواء كانت من أدوات سطر الأوامر أو الويب أو منصات SaaS أو OpenAPI. بالنسبة للتحقق من الهوية، نظرًا لأن الشركة لديها خدمة تحقق من الهوية المخصصة نفسها، فإنها تستخدم مباشرة إضافة forward-auth في APISIX لتحقيق التحقق من الهوية الخارجي.

الهيكل

في طبقة البوابة، تدخل جميع حركات المرور من خلال اسم النطاق، وستمر حركة المرور أولاً عبر LVS، والتي سيتم توجيهها إلى عقدة APISIX الخلفية، ثم يقوم APISIX بتوزيع حركة المرور إلى الـ Pod المقابل وفقًا لقواعد التوجيه. على LVS، قاموا أيضًا بتغيير المنفذ الافتراضي لـ APISIX Ingress من 9180 إلى 80 لجعل LVS يشير مباشرة إلى APISIX Ingress، مما يجعل توجيه حركة المرور أسهل.

مخطط التدفق

السيناريوهات

بعد فهم الهيكل العام، سنشارك بعض السيناريوهات التي تقوم شركتنا حاليًا بتنفيذها باستخدام APISIX Ingress.

تحميل الملفات الكبيرة جدًا

أولاً هو سيناريو تحميل الملفات الكبيرة، والذي قد يكون أقل شيوعًا في الشركات العامة، ولكنه أكثر شيوعًا في الشركات التي تقوم بتدريب نماذج الذكاء الاصطناعي. هذا السيناريو موجود بشكل رئيسي في نظام تدريب النماذج في Horizon Robotics، حيث يتم تحميل البيانات التي يتم جمعها من قبل البحث والتطوير إلى النظام عبر الشبكة، وعادة ما يكون حجم البيانات أكثر من عدة مئات من الجيجابايت، وسيحدث OOM عندما تكون كمية البيانات المحملة كبيرة جدًا دون تعديل أي معلمات لـ APISIX.

iTerm

نظرًا لأن client_body_buffer_size الافتراضي هو 1MB، عندما يكون المخزن المؤقت ممتلئًا، سيتم كتابة الملفات المؤقتة على القرص، مما يتسبب في ارتفاع IO للقرص.

إذا تم توجيه الدليل الذي يتم فيه كتابة الملفات المؤقتة إلى الذاكرة المشتركة (/dev/shm)، فإن هذا يؤدي مرة أخرى إلى ارتفاع APISIX (ذاكرة التخزين المؤقت).

المراقبة

بعد التصحيح المستمر، وجدنا أن السبب هو أن APISIX لم يتم تمكين التحميل المتدفق. بالنسبة لهذا السيناريو، قمنا بترقية إصدار APISIX من 2.11 إلى 2.13 وضبطنا معلمات APISIX. أولاً، قمنا بتغيير المعلمة proxy_request_buffering إلى off من APISIX ConfigMap لتمكين التحميل المتدفق. ثانيًا، قمنا باستخراج التكوين القابل لإعادة الاستخدام من CRD ApisixPluginConfig الذي يوفره APISIX Ingress Controller وتعيين client_max_body_size ديناميكيًا للمسارات التي تحتاج إلى هذا السيناريو كتكوين على مستوى namespace.

التصحيح

استدعاء الخدمات في بيئات متعددة السحابة

بالنسبة لاستدعاء الخدمات في بيئات متعددة السحابة، تصل جزء من حركة مرور الأعمال أولاً إلى IDC المحلي، ثم تمر عبر APISIX Ingress للوصول إلى الـ Pod. ستقوم بعض الخدمات في الـ Pod بالوصول إلى خدمات AliCloud من خلال اسم النطاق. بالإضافة إلى ذلك، توجد بعض السيناريوهات حيث تقوم الخدمة باستدعاء خدمات أخرى بشكل رئيسي للتدريب متعدد السحابة. سيأخذ المستخدمون IDC كنقطة دخول ويختارون الكتلة لتقديم المهمة إلى كتلة السحابة المقابلة.

هيكل متعدد السحابة

التحقق من الهوية الخارجي باستخدام forward-auth

عندما بدأنا استخدام APISIX Ingress لأول مرة، لم يكن APISIX يدعم إضافة forward-auth، لذلك قمنا بتعريف إضافة مخصصة بناءً على apisix-go-plugin-runner، ولكن هذا أنشأ طبقة إضافية من استدعاءات gRPC، مما جعل التصحيح صعبًا وتسجيل الدخول غير مرئي. منذ أن دعم APISIX إضافة forward-auth في بداية هذا العام، قمنا باستبدال الإضافة المخصصة بالإضافة الرسمية، مما يقلل من طبقة واحدة من استدعاءات gRPC ويجعل المراقبة أكثر ملاءمة.

هيكل التحقق من الهوية

مراقبة التطبيقات

في مراقبة التطبيقات، قمنا بتمكين إضافة Prometheus في APISIX بشكل عام وقمنا ببعض التصحيح والتحسين لأعمالنا الخاصة، مثل إضافة التزامن في الوقت الحقيقي، وQPS، ومعدل نجاح API في الوقت الحقيقي لـ APISIX، وعرض النطاق الترددي في الوقت الحقيقي لـ APISIX لمراقبة أكثر دقة لـ APISIX.

المراقبة

الخلاصة

نحن نستخدم حاليًا Apache APISIX Ingress Controller كبوابة حركة مرور فقط لبعض خطوط أعمالنا، وسيتم نشر الأعمال الأخرى لتقديم سيناريوهات تطبيقية أكثر ثراءً للمجتمع. إذا كنت تقارن أيضًا بين حلول Ingress Controller، نأمل أن تمنحك هذه المقالة بعض التلميحات. يستخدم المزيد والمزيد من المستخدمين Apache APISIX Ingress في بيئات الإنتاج، وإذا كنت تستخدم أيضًا APISIX Ingress، يرجى مشاركة حالات استخدامك في المجتمع.

Tags: