Hoʻokuʻu ʻia o ka mea kaulike HTTP/TCP HAProxy 2.0

paʻi ʻia hoʻokuʻu kau kaulike HA Proxy 2.0, ka mea e ʻae iā ʻoe e puʻunaue i ka HTTP traffic a me nā noi TCP arbitrary ma waena o kahi pūʻulu o nā kikowaena, me ka noʻonoʻo ʻana i nā kumu he nui (no ka laʻana, nānā ia i ka loaʻa o nā kikowaena, loiloi i ka pae ukana, loaʻa nā DDoS countermeasures) a lawe i ka kānana ʻikepili kumu ( no ka laʻana, hiki iā ʻoe ke pākuʻi i nā poʻomanaʻo HTTP, kānana hoʻouna i nā ʻāpana nīnau hewa ʻole, hoʻopaʻa i ka SQL a me XSS substitution, hoʻohui i nā mea hana hoʻoponopono maʻiʻo). Hiki nō hoʻi iā HAProxy pili e hoʻonohonoho i ka pilina o nā ʻāpana i nā ʻōnaehana e pili ana i ka hoʻolālā microservices. Ua kākau ʻia ke code papahana ma C a hoʻolako ʻia laikini ma lalo o GPLv2. Hoʻohana ʻia ka papahana ma nā pūnaewele nui, me Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter a me Vimeo.

Nā hiʻohiʻona hoʻokuʻu nui:

  • Hoʻokomo ʻia ka API hou Palapala ʻIkepili, hiki iā ʻoe ke hoʻokele i nā hoʻonohonoho HAProxy ma ka lele ma o REST Web API. Hoʻohui pū, hiki iā ʻoe ke hoʻohui a hoʻopau i nā backends a me nā kikowaena, hana i nā ACL, hoʻololi i ke ala noi noi, hoʻololi i nā paʻa lima lima i IP;
  • Hoʻohui ʻia ka kuhikuhi nbthread, kahi e hiki ai iā ʻoe ke hoʻonohonoho i ka helu o nā kaula i hoʻohana ʻia ma HAProxy e hoʻokō i ka hana ma nā CPU multi-core. ʻO ka maʻamau, koho ʻia ka helu o nā kaula hana ma muli o nā cores CPU i loaʻa i ka kaiapuni o kēia manawa, a ma nā ʻona kapuaʻi ka paʻamau hoʻokahi kaula. No ka hoʻonohonoho ʻana i nā palena paʻakikī, ua hoʻohui ʻia nā koho hui MAX_THREADS a me MAX_PROCS, e kaupalena ana i ka palena kiʻekiʻe ma ka helu o nā pae a me nā kaʻina hana;
  • Ua maʻalahi ka hoʻohana ʻana i ke kuhikuhi paʻa no ka hoʻopaʻa ʻana i nā mea lawelawe i nā helu pūnaewele. I ka hoʻonohonoho ʻana, ʻaʻole pono e wehewehe i nā ʻāpana kaʻina - ma ke ʻano maʻamau, e māhele ʻia nā pilina ma waena o nā kaula e pili ana i ka helu o nā pilina ikaika.
  • Ua maʻalahi ka hoʻonohonoho ʻana i nā lāʻau i ka wā e holo ai i loko o nā pahu kaʻawale - hiki ke hoʻouna ʻia ka log i stdout a me stderr, a me kekahi faila wehewehe (e laʻa, "log fd@1 local0");
  • Hoʻohana ʻia ke kākoʻo no HTX (Native HTTP Representation) ma ke ʻano paʻamau, e ʻae ana i ke kaupaona ʻana i ka wā e hoʻohana ai i nā hiʻohiʻona kiʻekiʻe e like me ka end-to-end HTTP/2, Layer 7 Retries a me gRPC. ʻAʻole hoʻololi ʻo HTX i nā poʻomanaʻo ma kahi, akā e hōʻemi i ka hana hoʻololi i ka wehe ʻana a hoʻohui i kahi poʻomanaʻo hou i ka hopena o ka papa inoa, e hiki ai iā ʻoe ke hoʻololi i nā ʻano like ʻole o ka protocol HTTP, e mālama i nā semantics kumu o nā poʻo a ʻae iā ʻoe. e hoʻokō i ka hana ʻoi aku ka maikaʻi i ka unuhi ʻana i ka HTTP/2 iā HTTP/1.1 a me ka hope;
  • Hoʻohui i ke kākoʻo kūhelu no End-to-End HTTP/2 mode (ka hoʻoponopono ʻana i nā pae āpau ma HTTP/2, me nā kelepona i ka hope, ʻaʻole wale ka pilina ma waena o ka mea koho a me ka mea kūʻai aku);
  • Ua hoʻokō ʻia ke kākoʻo piha no ka hoʻololi ʻana i ka bidirectional o ka protocol gRPC me ka hiki ke hoʻokaʻawale i nā kahawai gRPC, e hōʻike ana i nā memo pākahi, e hōʻike ana i ka hele ʻana o ka gRPC i ka log a me ka kānana ʻana i nā memo me ka hoʻohana ʻana i nā ACL. ʻAe ʻo gRPC iā ʻoe e hoʻonohonoho i ka hana o nā microservices i nā ʻōlelo papahana like ʻole e launa pū me kekahi me ka hoʻohana ʻana i kahi API honua. Hoʻokō ʻia ke kamaʻilio pūnaewele ma gRPC ma luna o ka protocol HTTP/2 a ua hoʻokumu ʻia ma ka hoʻohana ʻana i nā Protocol Buffers no ka serialization data.
  • Kākoʻo hoʻohui ʻia no ke ʻano "Layer 7 Retries", e hiki ai iā ʻoe ke hoʻouna i nā noi HTTP hou i ka wā o nā hemahema o ka polokalamu i pili ʻole i nā pilikia e hoʻokumu i kahi pilina pūnaewele (no ka laʻana, inā ʻaʻohe pane a i ʻole kahi pane ʻole i kahi. POST noi). No ka hoʻopau ʻana i ke ʻano, ua hoʻohui ʻia ka hae "disable-l7-retry" i ke koho "http-request", a ua hoʻohui ʻia ke koho "retry-on" no ka hoʻomaʻamaʻa maikaʻi ʻana i nā ʻāpana, hoʻolohe a me nā ʻāpana hope. Loaʻa nā hōʻailona ma lalo no ka hoʻouna hou ʻana: nā hewa a pau-retryable, ʻaʻohe, conn-failure, blank-pane, junk-pane, pane-manawa, 0rtt-rejected, a me ka hoʻopaʻa ʻana i nā code status (404, etc.) ;
  • Ua hoʻokō ʻia kahi luna kaʻina hana hou, kahi e hiki ai iā ʻoe ke hoʻonohonoho i ke kāhea ʻana i nā faila hoʻokō waho me nā mea lawelawe no HAProxy.
    No ka laʻana, hoʻokō ʻia ka API Plan Data (/usr/sbin/dataplaneapi), a me nā ʻenekini hoʻoili kahawai Offload like ʻole, ma ke ʻano o ia mea hoʻokele waho;

  • Hoʻohui ʻia nā paʻa no .NET Core, Go, Lua a me Python no ka hoʻomohala ʻana i nā mea hoʻonui SPOE (Stream Processing Offload Engine) a me SPOP (Stream Processing Offload Protocol). Ma mua, ua kākoʻo ʻia ka hoʻomohala hoʻonui ma C wale nō;
  • Hoʻohui ʻia kahi mea hoʻohana spoa-mirror waho (/usr/sbin/spoa-mirror) no ka hoʻohālikelike ʻana i nā noi i kahi kikowaena ʻokoʻa (no ka laʻana, no ke kope ʻana i kahi ʻāpana o ke kaʻa hana no ka hoʻāʻo ʻana i kahi kaiapuni hoʻokolohua ma lalo o kahi ukana maoli);
  • Waiho ʻia e ʻO HAProxy Kubernetes Hoʻoponopono Hoʻokele e hōʻoia i ka hoʻohui ʻana me ka paepae Kubernetes;
  • Hoʻohui ʻia ke kākoʻo i kūkulu ʻia no ka lawe ʻana i nā ʻikepili i ka ʻōnaehana nānā IHILA;
  • ʻO ka Peers Protocol, i hoʻohana ʻia e hoʻololi i ka ʻike me nā node ʻē aʻe e holo ana i ka HAProxy, ua hoʻonui ʻia. Me ke kākoʻo hoʻohui ʻia no ka Heartbeat a me ka hoʻoili ʻikepili i hoʻopili ʻia;
  • Ua hoʻohui ʻia ka ʻāpana "sample" i ke kuhikuhi "log", e hiki ai iā ʻoe ke hoʻolei i kahi hapa o nā noi i loko o ka log, no ka laʻana 1 mai ka 10, e hana i kahi laʻana analytical;
  • Hoʻohui ʻia ke ʻano hana profiling maʻalahi (profiling.tasks directive, hiki ke lawe i nā waiwai auto, a i ʻole). Hiki ke hoʻopaʻa inoa ʻakomi inā ʻoi aku ka nui o ka latency ma mua o 1000 ms. No ka ʻike ʻana i ka ʻikepili profiling, ua hoʻohui ʻia ke kauoha "show profiling" i ka Runtime API a i ʻole hiki ke hoʻonohonoho hou i nā helu helu i ka log;
  • Hoʻohui i ke kākoʻo no ke komo ʻana i nā kikowaena backend me ka hoʻohana ʻana i ka protocol SOCKS4;
  • Hoʻohui ʻia ke kākoʻo hope-to-end no ka mīkini no ka wehe koke ʻana i nā pilina TCP (TFO - TCP Fast Open, RFC 7413), e hiki ai iā ʻoe ke hōʻemi i ka helu o nā ʻanuʻu hoʻonohonoho pili ma ka hoʻohui ʻana i ka mea mua i hoʻokahi noi a me ka lua o ka hana. ke kaʻina hana kūkākūkā pili 3-step maʻamau a hiki iā ia ke hoʻouna i ka ʻikepili i ka pae mua o ka hoʻokumu ʻana i kahi pilina;
  • Hoʻohui ʻia nā hana hou:
    • "http-request replace-uri" e hoʻololi i ka URL me ka hoʻohana ʻana i ka ʻōlelo maʻamau;
    • "tcp-noi maʻiʻo do-resolve" a me "http-noi do-resolve" no ka hoʻoholo ʻana i ka inoa host;
    • "tcp-noi maʻiʻo set-dst" a me "tcp-noi maʻiʻo set-dst-port" e pani i ka helu IP a me ke awa.
  • Hoʻohui ʻia nā modula hoʻololi hou:
    • aes_gcm_dev no ka wehe ʻana i nā kahawai me ka hoʻohana ʻana i nā algorithms AES128-GCM, AES192-GCM a me AES256-GCM;
    • protobuf e unuhi i nā kahua mai nā memo Protocol Buffers;
    • ungrpc e unuhi i nā māla mai nā memo gRPC.

    Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka