تحولت Cloudflare من NGINX إلى وكيل Pingora الخاص بها المكتوب بلغة Rust

أعلنت Cloudflare أنها تقوم بترحيل شبكة توصيل المحتوى الخاصة بها لاستخدام وكيل Pingora ، المكتوب بلغة Rust. استبدل الوكيل الجديد التكوين المستند إلى خادم NGINX بنصوص Lua ، ويتعامل مع أكثر من تريليون طلب يوميًا. يُلاحظ أن الانتقال إلى وكيل متخصص لم يسمح فقط بتنفيذ ميزات جديدة وزيادة الأمان بسبب العمل الآمن مع الذاكرة ، ولكنه أدى أيضًا إلى زيادة كبيرة في الأداء وتوفير الموارد - وهو حل يعتمد على Pingora لا يتطلب الاستخدام من Lua ، لذلك تستهلك وحدة المعالجة المركزية للموارد أقل بنسبة 70٪ وذاكرة أقل بنسبة 67٪ أثناء التعامل مع نفس القدر من حركة المرور.

لفترة طويلة ، استوفى نظام إنشاء الوكلاء لحركة المرور بين المستخدمين والخوادم النهائية استنادًا إلى البرامج النصية NGINX و Lua احتياجات Cloudflare ، ولكن مع نمو الشبكة وزيادة تعقيدها ، لم يكن الحل الشامل كافياً ، سواء من حيث الأداء ، أو وبسبب القيود المفروضة على التوسعة وتنفيذ الفرص الجديدة للعملاء. على وجه الخصوص ، كانت هناك صعوبات في إضافة وظائف تتجاوز بوابة بسيطة وموازن التحميل. على سبيل المثال ، في حالة فشل الخادم في معالجة الطلب ، يصبح من الضروري إعادة توجيه الطلب إلى خادم آخر ، وتزويده بمجموعة مختلفة من رؤوس HTTP.

بدلاً من بنية مع تقسيم الطلبات إلى عمليات عمال منفصلة (عمال) ، تستخدم Pingora نموذجًا متعدد الخيوط ، والذي أظهر في سيناريوهات استخدام Cloudflare (تركيز عالٍ لحركة المرور من مواقع مختلفة مع تحول إحصائي كبير) توزيعًا أكثر كفاءة للموارد بين أنوية وحدة المعالجة المركزية. على وجه الخصوص ، أدى ربط الطلبات غير المتوازنة بالعمليات في nginx إلى حمل غير متوازن على نوى وحدة المعالجة المركزية ، ونتيجة لذلك أدت الطلبات كثيفة الاستخدام للموارد وحظر الإدخال / الإخراج إلى إبطاء معالجة الطلبات الأخرى. بالإضافة إلى ذلك ، فإن ربط تجمع الاتصال بعمليات المعالج لم يسمح بإعادة استخدام الاتصالات التي تم إنشاؤها بالفعل من عمليات المعالج الأخرى ، مما يقلل الكفاءة عند وجود عدد كبير من عمليات المعالج.

nginx:

تحولت Cloudflare من NGINX إلى وكيل Pingora الخاص بها المكتوب بلغة Rust

بينجورا:

تحولت Cloudflare من NGINX إلى وكيل Pingora الخاص بها المكتوب بلغة Rust

أتاح إدخال Pingora تقليل عدد عمليات إنشاء الاتصال الجديدة بمقدار 160 مرة وزيادة حصة الطلبات المعاد استخدامها من 87.1٪ إلى 99.92٪. بالإضافة إلى تقليل عمليات إعادة الاتصال والاستخدام الأكثر كفاءة لنواة وحدة المعالجة المركزية ، فإن أداء الوكيل الجديد يرجع أساسًا إلى التخلص من معالجات Lua البطيئة المستخدمة مع nginx.

تم اختيار لغة Rust على أنها تسمح بالأداء العالي جنبًا إلى جنب مع توفر أدوات الذاكرة الآمنة. يذكر أنه على الرغم من المؤهلات العالية لمهندسي Cloudflare ومراجعات الكود المكتوبة بلغة C ، لم يكن من الممكن تجنب الأخطاء التي تؤدي إلى مشاكل في الذاكرة (على سبيل المثال ، ثغرة أمنية في محلل HTML). أما بالنسبة للكود الجديد ، فقد تحدثنا عن حالات تحليل الأعطال في Pingora ، والتي تبين أنها ليست بسبب مشاكل في التطبيق ، ولكن بسبب خلل في Linux kernel وأعطال في الأجهزة.

بالإضافة إلى ذلك ، يمكن ملاحظة أن Linus Torvalds علق على إدراج دعم لغة Rust في Linux kernel ، والذي تم التعبير عنه في مؤتمر Open-Source Summit Europe الذي يعقد هذه الأيام. لم تتضمن النواة 6.0 تصحيحات لتطوير برامج تشغيل الأجهزة بلغة Rust ، ولكن وفقًا لـ Linus ، من المحتمل أن يتم قبولها في نواة 6.1 ، لن يسحبها مع التكامل. كدافع لإضافة دعم لـ Rust ، بالإضافة إلى التأثير الإيجابي على الأمن ، يدعو Linus أيضًا الفرصة لزيادة الاهتمام بالعمل على جوهر المشاركين الجدد ، وهو أمر مهم في سياق الشيخوخة القديمة.

المصدر: opennet.ru

إضافة تعليق