HTTP/TCP balanslashtiruvchisi HAProxy 2.0 versiyasi

nashr etilgan yuk balansini bo'shatish HA proksi 2.0, bu sizga HTTP trafigini va o'zboshimchalik bilan TCP so'rovlarini ko'plab omillarni hisobga olgan holda serverlar guruhi o'rtasida taqsimlash imkonini beradi (masalan, serverlar mavjudligini tekshiradi, yuk darajasini baholaydi, DDoS qarshi choralariga ega) va birlamchi ma'lumotlarni filtrlashni amalga oshiradi ( masalan, siz HTTP sarlavhalarini tahlil qilishingiz, noto'g'ri uzatish so'rov parametrlarini filtrlashingiz, SQL va XSS almashtirishni bloklashingiz, kontentni qayta ishlash agentlarini ulashingiz mumkin). HAProxy ham mumkin murojaat qilish mikroservislar arxitekturasiga asoslangan tizimlardagi komponentlarning o'zaro ta'sirini muvofiqlashtirish. Loyiha kodi C va tilida yozilgan ta'minlangan GPLv2 ostida litsenziyalangan. Loyiha Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter va Vimeo kabi ko'plab yirik saytlarda qo'llaniladi.

Chiqarishning asosiy xususiyatlari:

  • Yangi API taqdim etildi Ma'lumotlar rejasi, bu sizga REST Web API orqali HAProxy sozlamalarini tezda boshqarish imkonini beradi. Jumladan, siz serverlar va serverlarni dinamik ravishda qo'shishingiz va o'chirishingiz, ACL yaratishingiz, so'rov marshrutini o'zgartirishingiz, ishlov beruvchi ulanishlarini IP ga o'zgartirishingiz mumkin;
  • Ko'p yadroli protsessorlarda ishlashni optimallashtirish uchun HAProxy-da ishlatiladigan iplar sonini sozlash imkonini beruvchi nbthread direktivasi qo'shildi. Odatiy bo'lib, ishchi iplar soni joriy muhitda mavjud bo'lgan CPU yadrolariga qarab tanlanadi va bulutli muhitda sukut bo'yicha bitta ip hisoblanadi. Qattiq cheklovlarni o'rnatish uchun MAX_THREADS va MAX_PROCS yig'ish opsiyalari qo'shildi, bu iplar va jarayonlar sonining yuqori chegarasini cheklaydi;
  • Ishlovchilarni tarmoq manzillariga ulash uchun bog'lash direktivasidan foydalanish soddalashtirildi. Sozlashda jarayon parametrlarini aniqlashning hojati yo'q - sukut bo'yicha ulanishlar faol ulanishlar soniga qarab iplar o'rtasida taqsimlanadi.
  • Izolyatsiya qilingan konteynerlarda ishlayotganda jurnallarni sozlash soddalashtirildi - jurnal endi stdout va stderr-ga, shuningdek har qanday mavjud fayl deskriptoriga yuborilishi mumkin (masalan, “log fd@1 local0”);
  • HTX (Native HTTP Representation) qoʻllab-quvvatlashi sukut boʻyicha yoqilgan boʻlib, u uchdan-end HTTP/2, Layer 7 qayta urinishlari va gRPC kabi ilgʻor funksiyalardan foydalanganda muvozanatlash imkonini beradi. HTX sarlavhalarni joyida almashtirmaydi, lekin ro'yxat oxiriga yangi sarlavhani olib tashlash va qo'shish uchun o'zgartirish operatsiyasini qisqartiradi, bu sizga HTTP protokolining har qanday kengaytirilgan variantlarini boshqarish, sarlavhalarning asl semantikasini saqlab qolish va sizga ruxsat berish imkonini beradi. HTTP/2 ni HTTP/1.1 ga va aksincha tarjima qilishda yuqori samaradorlikka erishish;
  • End-to-End HTTP/2 rejimi uchun rasmiy qo‘llab-quvvatlash qo‘shildi (HTTP/2 da barcha bosqichlarni qayta ishlash, shu jumladan, proksi-server va mijoz o‘rtasidagi o‘zaro aloqani emas, balki backendga qo‘ng‘iroqlar);
  • gRPC protokolining ikki tomonlama proksi-serverini to'liq qo'llab-quvvatlash gRPC oqimlarini tahlil qilish, individual xabarlarni ajratib ko'rsatish, jurnaldagi gRPC trafigini aks ettirish va ACL yordamida xabarlarni filtrlash imkoniyati bilan amalga oshirildi. gRPC universal API yordamida bir-biri bilan o'zaro ta'sir qiluvchi turli dasturlash tillarida mikroservislar ishini tashkil qilish imkonini beradi. gRPC-da tarmoq aloqasi HTTP/2 protokoli ustida amalga oshiriladi va ma'lumotlarni ketma-ketlashtirish uchun Protokol Buferlaridan foydalanishga asoslangan.
  • Tarmoqqa ulanishni o'rnatishda muammolar bilan bog'liq bo'lmagan dasturiy ta'minotdagi nosozliklar yuzaga kelganda (masalan, javob bo'lmasa yoki bo'sh javob bo'lsa) takroriy HTTP so'rovlarini yuborish imkonini beruvchi "Layer 7 Retriries" rejimini qo'llab-quvvatlash qo'shildi. POST so'rovi). Tartibni o'chirish uchun "http-request" opsiyasiga "disable-l7-retry" bayrog'i qo'shildi va standart sozlamalar, tinglash va orqa qism bo'limlarida nozik sozlash uchun "qayta urinish" opsiyasi qo'shildi. Qayta jo'natish uchun quyidagi belgilar mavjud: hammasi qayta urinilishi mumkin-xatolar, yo'q, ulanish xatosi, bo'sh javob, keraksiz javob, javob vaqti tugashi, 0rtt-rad etilgan, shuningdek qaytish holati kodlari (404 va boshqalar) ;
  • HAProxy uchun ishlov beruvchilar bilan tashqi bajariladigan fayllarni chaqirishni sozlash imkonini beruvchi yangi jarayon menejeri joriy etildi.
    Masalan, Data Plan API (/usr/sbin/dataplaneapi), shuningdek, turli xil Offload oqimlarini qayta ishlash dvigatellari bunday tashqi ishlov beruvchi shaklida amalga oshiriladi;

  • SPOE (Stream Processing Offload Engine) va SPOP (Stream Processing Offload Protocol) kengaytmalarini ishlab chiqish uchun .NET Core, Go, Lua va Python uchun ulanishlar qo'shildi. Ilgari kengaytmalarni ishlab chiqish faqat C da qo'llab-quvvatlanardi;
  • Alohida serverga so'rovlarni aks ettirish uchun tashqi spoa-oyna ishlov beruvchisi (/usr/sbin/spoa-mirror) qo'shildi (masalan, haqiqiy yuk ostida eksperimental muhitni sinab ko'rish uchun ishlab chiqarish trafigining bir qismini nusxalash uchun);
  • Tanishtirdi HAProxy Kubernetes kirish nazoratchisi Kubernetes platformasi bilan integratsiyani ta'minlash;
  • Monitoring tizimiga statistikani eksport qilish uchun oʻrnatilgan qoʻllab-quvvatlash qoʻshildi Prometheus;
  • HAProxy bilan ishlaydigan boshqa tugunlar bilan ma'lumot almashish uchun foydalaniladigan Peers Protocol kengaytirildi. Jumladan, Heartbeat va shifrlangan ma'lumotlarni uzatish uchun qo'shimcha yordam;
  • "Jurnal" direktivasiga "namuna" parametri qo'shildi, bu sizga so'rovlarning faqat bir qismini jurnalga tashlash imkonini beradi, masalan, tahliliy namunani shakllantirish uchun 1 tadan 10 tasi;
  • Avtomatik profillash rejimi qo'shildi (profiling.tasks direktivasi, qiymatlarni avtomatik ravishda yoqish va o'chirish). O'rtacha kechikish 1000 ms dan oshsa, avtomatik profillash yoqiladi. Profil ma'lumotlarini ko'rish uchun Runtime API-ga "profillashni ko'rsatish" buyrug'i qo'shildi yoki jurnalga statistikani qayta o'rnatish mumkin;
  • SOCKS4 protokoli yordamida backend serverlariga kirish uchun qo'shimcha yordam;
  • TCP ulanishlarini tezda ochish mexanizmi uchun uchdan-end qo'llab-quvvatlash qo'shildi (TFO - TCP Fast Open, RFC 7413), bu birinchisini bitta so'rovga va ikkinchi bosqichni birlashtirish orqali ulanishni o'rnatish bosqichlari sonini kamaytirishga imkon beradi. klassik 3 bosqichli ulanish bo'yicha muzokaralar jarayoni va ulanishni o'rnatishning dastlabki bosqichida ma'lumotlarni yuborish imkonini beradi;
  • Yangi harakatlar qo'shildi:
    • Muntazam ifoda yordamida URLni almashtirish uchun "http-request replace-uri";
    • Xost nomini hal qilish uchun "tcp-so'rov mazmuni do-resolve" va "http-request do-resolve";
    • Maqsadli IP-manzil va portni almashtirish uchun "tcp-request content set-dst" va "tcp-request content set-dst-port".
  • Yangi konversiya modullari qo‘shildi:
    • aes_gcm_dev oqimlarni AES128-GCM, AES192-GCM va AES256-GCM algoritmlaridan foydalangan holda shifrlash uchun;
    • Protocol Buffers xabarlaridan maydonlarni chiqarish uchun protobuf;
    • gRPC xabarlaridan maydonlarni chiqarish uchun ungrpc.

    Manba: opennet.ru

a Izoh qo'shish