انتشار متعادل کننده HTTP/TCP HAProxy 2.0

منتشر شده آزادسازی بار متعادل کننده HA Proxy 2.0، که به شما امکان می دهد ترافیک HTTP و درخواست های TCP دلخواه را بین گروهی از سرورها با در نظر گرفتن عوامل زیادی توزیع کنید (به عنوان مثال، در دسترس بودن سرورها را بررسی می کند، سطح بار را ارزیابی می کند، اقدامات متقابل DDoS دارد) و فیلتر داده های اولیه را انجام می دهد ( برای مثال، می‌توانید هدرهای HTTP را تجزیه کنید، پارامترهای نادرست پرس و جوی ارسال را فیلتر کنید، جایگزینی SQL و XSS را مسدود کنید، عوامل پردازش محتوا را متصل کنید. HAProxy نیز می تواند درخواست دادن برای هماهنگ کردن تعامل اجزا در سیستم های مبتنی بر معماری میکروسرویس ها. کد پروژه به زبان C و نوشته شده است عرضه شده تحت مجوز GPLv2. این پروژه در بسیاری از سایت های بزرگ از جمله Airbnb، Alibaba، GitHub، Imgur، Instagram، Reddit، StackOverflow، Tumblr، Twitter و Vimeo استفاده می شود.

ویژگی های کلیدی انتشار:

  • API جدید معرفی شد نقشهی داده، که به شما امکان می دهد تنظیمات HAProxy را از طریق REST Web API مدیریت کنید. از جمله، می‌توانید به صورت پویا بک‌اندها و سرورها را اضافه و حذف کنید، ACL ایجاد کنید، مسیریابی درخواست را تغییر دهید، پیوندهای کنترل کننده را به IP تغییر دهید.
  • دستورالعمل nbthread اضافه شده است که به شما امکان می دهد تعداد رشته های مورد استفاده در HAProxy را برای بهینه سازی عملکرد در CPU های چند هسته ای پیکربندی کنید. به طور پیش فرض، تعداد نخ های کارگر بسته به هسته های CPU موجود در محیط فعلی انتخاب می شود و در محیط های ابری پیش فرض یک رشته است. برای تنظیم محدودیت‌های سخت، گزینه‌های مونتاژ MAX_THREADS و MAX_PROCS اضافه شده‌اند که محدودیت بالایی را در تعداد رشته‌ها و فرآیندها محدود می‌کند.
  • استفاده از دستورالعمل bind برای اتصال کنترل کننده ها به آدرس های شبکه ساده شده است. هنگام راه اندازی، دیگر نیازی به تعریف پارامترهای فرآیند نیست - به طور پیش فرض، بسته به تعداد اتصالات فعال، اتصالات بین رشته ها توزیع می شود.
  • راه‌اندازی گزارش‌ها هنگام اجرا در کانتینرهای مجزا ساده شده است - اکنون گزارش می‌تواند به stdout و stderr و همچنین به هر توصیف‌گر فایل موجود ارسال شود (به عنوان مثال، "log fd@1 local0").
  • پشتیبانی از HTX (Native HTTP Representation) به طور پیش‌فرض فعال است، و در هنگام استفاده از ویژگی‌های پیشرفته مانند HTTP/2 سرتاسر، تلاش‌های مجدد لایه ۷ و gRPC، تعادل را امکان‌پذیر می‌کند. HTX در جای خود جایگزین هدرها نمی شود، اما عملیات اصلاح را به حذف و اضافه کردن یک سرصفحه جدید به انتهای لیست کاهش می دهد، که به شما امکان می دهد هر گونه توسعه یافته پروتکل HTTP را دستکاری کنید، معنای اصلی سرصفحه ها را حفظ کرده و به شما اجازه می دهد. برای دستیابی به عملکرد بالاتر هنگام ترجمه HTTP/7 به HTTP/2 و بالعکس؛
  • اضافه شدن پشتیبانی رسمی برای حالت HTTP/2 End-to-End (پردازش تمام مراحل در HTTP/2، از جمله تماس‌های باطن، و نه فقط تعامل بین پروکسی و مشتری).
  • پشتیبانی کامل از پروکسی دوطرفه پروتکل gRPC با قابلیت تجزیه جریان‌های gRPC، برجسته کردن پیام‌های فردی، بازتاب ترافیک gRPC در گزارش و فیلتر کردن پیام‌ها با استفاده از ACL اجرا شده است. gRPC به شما این امکان را می دهد که کار میکروسرویس ها را در زبان های برنامه نویسی مختلف سازماندهی کنید که با استفاده از یک API جهانی با یکدیگر تعامل دارند. ارتباطات شبکه در gRPC در بالای پروتکل HTTP/2 پیاده سازی می شود و بر اساس استفاده از بافرهای پروتکل برای سریال سازی داده ها است.
  • پشتیبانی از حالت "لایه 7 تلاش مجدد" اضافه شده است، که به شما امکان می دهد درخواست های مکرر HTTP را در صورت خرابی های نرم افزاری که به مشکلات برقراری اتصال شبکه مربوط نمی شود ارسال کنید (به عنوان مثال، اگر پاسخی وجود نداشته باشد یا پاسخ خالی به یک پاسخ داده شود. درخواست POST). برای غیرفعال کردن حالت، پرچم “disable-l7-retry” به گزینه “http-request” و گزینه “retry-on” برای تنظیم دقیق در بخش‌های پیش‌فرض، گوش دادن و باطن اضافه شده است. علائم زیر برای ارسال مجدد در دسترس هستند: همه خطاهای قابل امتحان مجدد، هیچ، اتصال ناموفق، پاسخ خالی، پاسخ ناخواسته، زمان پاسخ، 0rtt-رد شده، و همچنین الزام آور به کدهای وضعیت بازگشت (404 و غیره) ;
  • یک مدیر فرآیند جدید پیاده سازی شده است که به شما امکان می دهد فراخوانی فایل های اجرایی خارجی را با کنترل کننده ها برای HAProxy پیکربندی کنید.
    برای مثال، Data Plan API (/usr/sbin/dataplaneapi)، و همچنین موتورهای مختلف پردازش جریان Offload، در قالب چنین کنترل‌کننده خارجی پیاده‌سازی می‌شوند.

  • اتصالات برای NET Core، Go، Lua و Python برای توسعه پسوندهای SPOE (Stream Processing Offload Engine) و SPOP (Stream Processing Offload Protocol) اضافه شده است. پیش از این، توسعه برنامه افزودنی فقط در C پشتیبانی می شد.
  • یک کنترل کننده آینه ای خارجی (/usr/sbin/spoa-mirror) برای بازتاب درخواست ها به یک سرور جداگانه (به عنوان مثال، برای کپی بخشی از ترافیک تولید برای آزمایش یک محیط آزمایشی تحت یک بار واقعی) اضافه شده است.
  • ارسال شده توسط HAProxy Kubernetes Ingress Controller برای اطمینان از ادغام با پلت فرم Kubernetes؛
  • اضافه شدن پشتیبانی داخلی برای صادرات آمار به سیستم نظارت تیتان فرزند پاپتوس;
  • پروتکل Peers که برای تبادل اطلاعات با سایر گره‌های اجراکننده HAProxy استفاده می‌شود، توسعه یافته است. از جمله پشتیبانی اضافه شده برای Heartbeat و انتقال داده های رمزگذاری شده.
  • پارامتر "نمونه" به دستورالعمل "log" اضافه شده است، که به شما امکان می دهد فقط بخشی از درخواست ها را در گزارش تخلیه کنید، به عنوان مثال 1 از 10، برای تشکیل یک نمونه تحلیلی.
  • اضافه شدن حالت پروفایل خودکار (دستورالعمل profiling.tasks، که می تواند مقادیر را به صورت خودکار، روشن و خاموش کند). اگر میانگین تأخیر بیش از 1000 میلی ثانیه باشد، پروفایل خودکار فعال می شود. برای مشاهده داده های پروفایل، دستور "show profiles" به Runtime API اضافه شده است یا امکان بازنشانی آمار به گزارش وجود دارد.
  • اضافه شدن پشتیبانی برای دسترسی به سرورهای باطن با استفاده از پروتکل SOCKS4.
  • اضافه شدن پشتیبانی سرتاسری برای مکانیسم باز کردن سریع اتصالات TCP (TFO - TCP Fast Open, RFC 7413) که به شما امکان می دهد با ترکیب اولین مرحله در یک درخواست و مرحله دوم تعداد مراحل تنظیم اتصال را کاهش دهید. فرآیند مذاکره اتصال 3 مرحله ای کلاسیک و ارسال داده ها را در مرحله اولیه برقراری اتصال ممکن می کند.
  • اقدامات جدید اضافه شده است:
    • "http-درخواست جایگزین-uri" برای جایگزینی URL با استفاده از یک عبارت منظم.
    • “tcp- request content do-resolve” و “http- request do-resolve” برای حل نام میزبان.
    • «tcp- request content set-dst» و «tcp- request content set-dst-port» برای جایگزینی آدرس IP و پورت هدف.
  • اضافه شدن ماژول های تبدیل جدید:
    • aes_gcm_dev برای رمزگشایی جریان ها با استفاده از الگوریتم های AES128-GCM، AES192-GCM و AES256-GCM؛
    • protobuf برای استخراج فیلدها از پیام های Protocol Buffers.
    • ungrpc برای استخراج فیلدها از پیام های gRPC.

    منبع: opennet.ru

اضافه کردن نظر