Апублікаваны рэліз балансавальніка нагрузкі HA проксі 2.0, які дазваляе размяркоўваць HTTP-трафік і адвольныя TCP-запыты паміж групай сервераў, улічваючы мноства фактараў (напрыклад, правярае даступнасць сервераў, ацэньвае ўзровень нагрузкі, мае сродкі супрацьстаяння DDoS) і праводзіць першаснае фільтраванне дадзеных (напрыклад, можна разбіраць HTTP-загалоўкі, адфільтроўваць перадачу некарэктных параметраў запыту, блакаваць падстаноўку SQL і XSS, падлучаць агенты апрацоўкі кантэнту). HAProxy таксама можа прымяняцца для каардынацыі ўзаемадзеяння кампанентаў у сістэмах на базе архітэктуры мікрасэрвісаў. Код праекта напісаны на мове Сі і пастаўляецца пад ліцэнзіяй 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), які дазваляе забяспечыць балансаванне пры ўжыванні пашыраных магчымасцяў, такіх як end-to-end HTTP/2, Layer 7 Retries і gRPC. HTX не замяняе загалоўкі па месцы, а зводзіць аперацыю змены да выдалення і даданні новага загалоўка ў канец спісу, што дазваляе маніпуляваць любымі пашыранымі варыянтамі пратаколу HTTP, захоўваючы зыходную семантыку загалоўкаў і дазваляючы дамагчыся больш высокай прадукцыйнасці пры трансляцыі HTTP/2 і HTTP/1.1. наадварот;
Дададзена афіцыйная падтрымка рэжыму End-to-End HTTP/2 (апрацоўка ўсіх стадый у HTTP/2, у тым ліку зваротаў да бэкэнду, а не толькі ўзаемадзеянне проксі з кліентам);
Рэалізавана поўная падтрымка двунакіраванага праксіравання пратаколу gRPC c магчымасцю разбору патокаў gRPC, вылучаючы асобныя паведамленні, адлюстроўваючы gRPC-трафік у логу і адфільтроўваючы паведамленні пры дапамозе ACL. gRPC дазваляе арганізаваць працу мікрасэрвісаў на розных мовах праграмавання, якія ўзаемадзейнічаюць паміж сабой пры дапамозе ўніверсальнага API. Сеткавае ўзаемадзеянне ў gRPC рэалізавана па-над пратаколам HTTP/2 і грунтуецца на ўжыванні Protocol Buffers для серыялізацыі дадзеных.
Дададзена падтрымка рэжыму "Layer 7 Retries", які дазваляе адпраўляць паўторныя HTTP-запыты ў выпадку праграмных збояў, не звязаных з праблемамі ўстаноўкі сеткавага злучэння (напрыклад, пры адсутнасці адказу або пустога адказу на POST-запыт). Для адключэння рэжыму ў опцыю "http-request" дададзены сцяг "disable-l7-retry", а для тонкай наладкі ў секцыях defaults, listen і backend з'явілася опцыя "retry-on". Даступныя наступныя прыкметы для паўторнай адпраўкі: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, а таксама прывязка да кодаў стану, якія вяртаюцца (404 і да т.п.) ;
Рэалізаваны новы мэнэджар працэсаў (Process Manager), які дазваляе наладзіць выклік вонкавых выкананых файлаў з апрацоўшчыкамі для HAProxy.
Напрыклад, у выглядзе такога вонкавага апрацоўшчыка рэалізаваны API Data Plan (/usr/sbin/dataplaneapi), а таксама розныя рухавічкі Offload-апрацоўкі струменяў;
Для .NET Core, Go, Lua і Python дададзены біндынгі для распрацоўкі пашырэнняў SPOE (Stream Processing Offload Engine) і SPOP (Stream Processing Offload Protocol). Раней падтрымлівалася распрацоўка пашырэння толькі на Сі;
Дададзены вонкавы апрацоўшчык spoa-mirror (/usr/sbin/spoa-mirror) для люстравання запытаў на асобны сервер (напрыклад, для капіявання часткі працоўнага трафіку для тэставання эксперыментальнага асяроддзя на рэальнай нагрузцы);
Дададзена ўбудаваная падтрымка экспарту статыстыкі ў сістэму маніторынгу Праметэй;
Пашыраны пратакол Peers Protocol, які выкарыстоўваецца для абмену інфармацыяй з іншымі вузламі з HAProxy. У тым ліку дададзена падтрымка Heartbeat і шыфраванай перадачы дадзеных;
У дырэктыву "log" дададзены параметр "sample", які дазваляе скідаць у лог толькі частка запытаў, напрыклад 1 з 10, для фармаванне аналітычнай выбаркі;
Дададзены рэжым аўтаматычнага прафілявання (дырэктыва profiling.tasks, якая можа прымаць значэнні auto, on і off). Аўтаматычнае прафіляванне ўключаецца ў выпадку, калі сярэдняя велічыня затрымкі перавышае адзнаку ў 1000 мс. Для прагляду дадзеных прафілявання ў Runtime API дададзена каманда "show profiling" ці маецца магчымасць скіду статыстыкі ў лог;
Дададзена падтрымка звароту да бэкэнд-сервераў з выкарыстаннем пратаколу SOCKS4;
Дададзена канцавая (end-to-end, на сваім шляху апрацоўкі запыту, ахопліваючы бэкенд) падтрымка механізму хуткага адкрыцця TCP-злучэнняў (TFO – TCP Fast Open, RFC 7413), які дазваляе скараціць колькасць крокаў усталёўкі злучэння за кошт камбінавання ў адзін запыт першага і другога крокаў класічнага 3-этапнага працэсу ўзгаднення злучэння і дае магчымасць адпраўкі даных на пачатковым этапе ўстаноўкі злучэння;
Дададзены новыя дзеянні:
"http-request replace-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;