إطلاق موازن HTTP/TCP HAProxy 2.0

نشرت الافراج عن موازن التحميل HAProxy 2.0 تحديث، والذي يسمح لك بتوزيع حركة مرور HTTP وطلبات TCP التعسفية بين مجموعة من الخوادم، مع الأخذ في الاعتبار العديد من العوامل (على سبيل المثال، يتحقق من توفر الخوادم، ويقيم مستوى التحميل، ولديه تدابير مضادة لـ DDoS) وينفذ تصفية البيانات الأساسية ( على سبيل المثال، يمكنك تحليل رؤوس HTTP، وتصفية معلمات الاستعلام غير الصحيحة للإرسال، وحظر استبدال SQL وXSS، وتوصيل وكلاء معالجة المحتوى). يمكن لـ HAProxy أيضًا يتقدم لتنسيق تفاعل المكونات في الأنظمة القائمة على بنية الخدمات المصغرة. كود المشروع مكتوب بلغة C و زودت مرخص بموجب GPLv2. يتم استخدام المشروع في العديد من المواقع الكبيرة، بما في ذلك Airbnb وAlibaba وGitHub وImgur وInstagram وReddit وStackOverflow وTumblr وTwitter وVimeo.

ميزات الإصدار الرئيسية:

  • تم تقديم واجهة برمجة التطبيقات الجديدة خطة البيانات، والذي يسمح لك بإدارة إعدادات HAProxy بسرعة عبر REST Web API. بما في ذلك، يمكنك إضافة الواجهات الخلفية والخوادم وإزالتها ديناميكيًا، وإنشاء قوائم ACL، وتغيير توجيه الطلب، وتغيير روابط المعالج إلى IP؛
  • تمت إضافة التوجيه nbthread، والذي يسمح لك بتكوين عدد سلاسل العمليات المستخدمة في HAProxy لتحسين الأداء على وحدات المعالجة المركزية متعددة النواة. افتراضيًا، يتم تحديد عدد سلاسل العمليات بناءً على مراكز وحدة المعالجة المركزية المتوفرة في البيئة الحالية، وفي البيئات السحابية يكون الإعداد الافتراضي هو خيط واحد. لتعيين حدود صارمة، تمت إضافة خيارات التجميع MAX_THREADS وMAX_PROCS، مما يحد من الحد الأعلى لعدد المواضيع والعمليات؛
  • لقد تم تبسيط استخدام توجيه الربط لمعالجات الربط لعناوين الشبكة. عند الإعداد، لم يعد من الضروري تحديد معلمات العملية - بشكل افتراضي، سيتم توزيع الاتصالات بين سلاسل الرسائل اعتمادًا على عدد الاتصالات النشطة.
  • تم تبسيط إعداد السجلات عند التشغيل في حاويات معزولة - يمكن الآن إرسال السجل إلى stdout وstderr، بالإضافة إلى أي واصف ملف موجود (على سبيل المثال، "log fd@1 local0")؛
  • يتم تمكين دعم HTX (تمثيل HTTP الأصلي) افتراضيًا، مما يسمح بالموازنة عند استخدام الميزات المتقدمة مثل HTTP/2 الشامل وإعادة محاولات الطبقة 7 وgRPC. لا يستبدل HTX الرؤوس الموجودة في مكانها، ولكنه يقلل من عملية التعديل لإزالة وإضافة رأس جديد إلى نهاية القائمة، مما يسمح لك بمعالجة أي متغيرات موسعة لبروتوكول HTTP، مع الحفاظ على الدلالات الأصلية للرؤوس والسماح لك لتحقيق أداء أعلى عند ترجمة HTTP/2 إلى HTTP/1.1 والعكس؛
  • تمت إضافة دعم رسمي لوضع HTTP/2 من النهاية إلى النهاية (معالجة جميع المراحل في HTTP/2، بما في ذلك الاستدعاءات إلى الواجهة الخلفية، وليس فقط التفاعل بين الوكيل والعميل)؛
  • تم تنفيذ الدعم الكامل للوكيل ثنائي الاتجاه لبروتوكول gRPC مع القدرة على تحليل تدفقات gRPC، وتسليط الضوء على الرسائل الفردية، وعكس حركة مرور gRPC في السجل، وتصفية الرسائل باستخدام قوائم ACL. يتيح لك gRPC تنظيم عمل الخدمات المصغرة بلغات البرمجة المختلفة التي تتفاعل مع بعضها البعض باستخدام واجهة برمجة التطبيقات العالمية. يتم تنفيذ اتصال الشبكة في gRPC أعلى بروتوكول HTTP/2 ويعتمد على استخدام المخازن المؤقتة للبروتوكول لتسلسل البيانات.
  • تمت إضافة دعم لوضع "Layer 7 Retries"، والذي يسمح لك بإرسال طلبات HTTP متكررة في حالة فشل البرامج التي لا تتعلق بمشاكل إنشاء اتصال بالشبكة (على سبيل المثال، في حالة عدم وجود استجابة أو استجابة فارغة لرسالة طلب ما بعد). لتعطيل الوضع، تمت إضافة علامة "disable-l7-retry" إلى خيار "http-request"، كما تمت إضافة خيار "إعادة المحاولة" لضبط الأقسام الافتراضية والاستماع والواجهة الخلفية. العلامات التالية متاحة لإعادة الإرسال: جميع الأخطاء القابلة لإعادة المحاولة، لا شيء، فشل الاتصال، الاستجابة الفارغة، الاستجابة غير المرغوب فيها، مهلة الاستجابة، رفض 0rtt، بالإضافة إلى الارتباط بإرجاع رموز الحالة (404، وما إلى ذلك) ;
  • تم تنفيذ مدير عمليات جديد، والذي يسمح لك بتكوين استدعاء الملفات الخارجية القابلة للتنفيذ باستخدام معالجات HAProxy.
    على سبيل المثال، يتم تنفيذ واجهة برمجة تطبيقات Data Plan (/usr/sbin/dataplaneapi)، بالإضافة إلى محركات معالجة تدفق إلغاء التحميل المختلفة، في شكل معالج خارجي؛

  • تمت إضافة الارتباطات إلى .NET Core وGo وLua وPython لتطوير امتدادات SPOE (محرك إلغاء تحميل معالجة الدفق) وSPOP (بروتوكول إلغاء تحميل معالجة الدفق). في السابق، كان تطوير الامتداد مدعومًا فقط في لغة C؛
  • تمت إضافة معالج Spoa-mirror خارجي (/usr/sbin/spoa-mirror) لنسخ الطلبات إلى خادم منفصل (على سبيل المثال، لنسخ جزء من حركة الإنتاج لاختبار بيئة تجريبية تحت حمل حقيقي)؛
  • مقدم من HAProxy Kubernetes وحدة تحكم الدخول ولضمان التكامل مع منصة Kubernetes؛
  • تمت إضافة دعم مدمج لتصدير الإحصائيات إلى نظام المراقبة محب العمل;
  • تم توسيع بروتوكول Peers، المستخدم لتبادل المعلومات مع العقد الأخرى التي تقوم بتشغيل HAProxy. بما في ذلك الدعم الإضافي لـ Heartbeat ونقل البيانات المشفرة؛
  • تمت إضافة معلمة "العينة" إلى توجيه "السجل"، والذي يسمح لك بتفريغ جزء فقط من الطلبات في السجل، على سبيل المثال 1 من أصل 10، لتشكيل عينة تحليلية؛
  • تمت إضافة وضع التوصيف التلقائي (توجيه profiling.tasks، والذي يمكنه أخذ القيم تلقائيًا وتشغيلها وإيقافها). يتم تمكين التوصيف التلقائي إذا تجاوز متوسط ​​زمن الوصول 1000 مللي ثانية. لعرض بيانات ملفات التعريف، تمت إضافة أمر "إظهار ملفات التعريف" إلى Runtime API أو من الممكن إعادة تعيين الإحصائيات إلى السجل؛
  • تمت إضافة دعم للوصول إلى خوادم الواجهة الخلفية باستخدام بروتوكول SOCKS4؛
  • تمت إضافة دعم شامل لآلية فتح اتصالات TCP بسرعة (TFO - TCP Fast Open، RFC 7413)، مما يسمح لك بتقليل عدد خطوات إعداد الاتصال من خلال دمج الخطوة الأولى في طلب واحد والخطوة الثانية من عملية التفاوض على الاتصال الكلاسيكية المكونة من 3 خطوات وتتيح إرسال البيانات في المرحلة الأولية لإنشاء الاتصال؛
  • تمت إضافة إجراءات جديدة:
    • "http-request استبدال uri" لاستبدال عنوان URL باستخدام تعبير عادي؛
    • "حل محتوى طلب TCP" و"حل طلب http" لحل اسم المضيف؛
    • "tcp-request content set-dst" و"tcp-request content set-dst-port" لاستبدال عنوان IP المستهدف والمنفذ.
  • تمت إضافة وحدات تحويل جديدة:
    • aes_gcm_dev لفك تشفير التدفقات باستخدام خوارزميات AES128-GCM وAES192-GCM وAES256-GCM؛
    • protobuf لاستخراج الحقول من رسائل مخازن البروتوكول؛
    • ungrpc لاستخراج الحقول من رسائل gRPC.

    المصدر: opennet.ru

إضافة تعليق