ืฉื—ืจื•ืจ ืฉืœ ืื™ื–ื•ืŸ 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. ื›ื•ืœืœ, ืืชื” ื™ื›ื•ืœ ืœื”ื•ืกื™ืฃ ื•ืœื”ืกื™ืจ ื‘ืื•ืคืŸ ื“ื™ื ืžื™ ืงืฆื” ืื—ื•ืจื™ ื•ืฉืจืชื™ื, ืœื™ืฆื•ืจ ACLs, ืœืฉื ื•ืช ื ื™ืชื•ื‘ ื‘ืงืฉื•ืช, ืœืฉื ื•ืช ื›ืจื™ื›ื•ืช ืžื˜ืคืœ ืœ-IP;
  • ื ื•ืกืคื” ื”ื”ื ื—ื™ื” nbthread, ื”ืžืืคืฉืจืช ืœืš ืœื”ื’ื“ื™ืจ ืืช ืžืกืคืจ ื”ืฉืจืฉื•ืจื™ื ื”ืžืฉืžืฉื™ื ื‘- HAProxy ื›ื“ื™ ืœื™ื™ืขืœ ืืช ื”ื‘ื™ืฆื•ืขื™ื ื‘ืžืขื‘ื“ื™ื ืžืจื•ื‘ื™ ืœื™ื‘ื•ืช. ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืžืกืคืจ ืฉืจืฉื•ืจื™ ื”ืขื‘ื•ื“ื” ื ื‘ื—ืจ ื‘ื”ืชืื ืœืœื™ื‘ื•ืช ื”ืžืขื‘ื“ ื”ื–ืžื™ื ื•ืช ื‘ืกื‘ื™ื‘ื” ื”ื ื•ื›ื—ื™ืช, ื•ื‘ืกื‘ื™ื‘ื•ืช ืขื ืŸ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืฉืจืฉื•ืจ ืื—ื“. ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืžื’ื‘ืœื•ืช ืงืฉื•ืช, ื ื•ืกืคื• ืืคืฉืจื•ื™ื•ืช ื”ืจื›ื‘ื” MAX_THREADS ื•-MAX_PROCS, ื”ืžื’ื‘ื™ืœื•ืช ืืช ื”ื’ื‘ื•ืœ ื”ืขืœื™ื•ืŸ ืฉืœ ืžืกืคืจ ื”ืฉืจืฉื•ืจื™ื ื•ื”ืชื”ืœื™ื›ื™ื;
  • ื”ืฉื™ืžื•ืฉ ื‘ื”ื ื—ื™ื™ืช ื”-bind ืœืงืฉื™ืจืช ืžื˜ืคืœื™ื ืœื›ืชื•ื‘ื•ืช ืจืฉืช ืคื•ืฉื˜. ื‘ืขืช ื”ื”ื’ื“ืจื”, ืื™ืŸ ืขื•ื“ ืฆื•ืจืš ืœื”ื’ื“ื™ืจ ืคืจืžื˜ืจื™ื ืฉืœ ืชื”ืœื™ืš - ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื”ื—ื™ื‘ื•ืจื™ื ื™ื—ื•ืœืงื• ื‘ื™ืŸ ืฉืจืฉื•ืจื™ื ื‘ื”ืชืื ืœืžืกืคืจ ื”ื—ื™ื‘ื•ืจื™ื ื”ืคืขื™ืœื™ื.
  • ื”ื’ื“ืจืช ื™ื•ืžื ื™ื ื‘ืขืช ื”ืคืขืœื” ื‘ืงื•ื ื˜ื™ื™ื ืจื™ื ืžื‘ื•ื“ื“ื™ื ืคืฉื˜ื” - ื›ืขืช ื ื™ืชืŸ ืœืฉืœื•ื— ืืช ื”ื™ื•ืžืŸ ืืœ stdout ื•-stderr, ื›ืžื• ื’ื ืœื›ืœ ืžืชืืจ ืงื•ื‘ืฅ ืงื™ื™ื (ืœื“ื•ื’ืžื”, "log fd@1 local0");
  • ืชืžื™ื›ื” ื‘-HTX (ื™ื™ืฆื•ื’ HTTP ืžืงื•ืจื™) ืžื•ืคืขืœืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื•ืžืืคืฉืจืช ืื™ื–ื•ืŸ ื‘ืขืช โ€‹โ€‹ืฉื™ืžื•ืฉ ื‘ืชื›ื•ื ื•ืช ืžืชืงื“ืžื•ืช ื›ื’ื•ืŸ HTTP/2 ืžืงืฆื” ืœืงืฆื”, ื ื™ืกื™ื•ื ื•ืช ื—ื•ื–ืจื™ื ืฉืœ ืฉื›ื‘ื” 7 ื•-gRPC. HTX ืื™ื ื• ืžื—ืœื™ืฃ ื›ื•ืชืจื•ืช ื‘ืžืงื•ื, ืืš ืžืคื—ื™ืช ืืช ืคืขื•ืœืช ื”ืฉื™ื ื•ื™ ืœื”ืกืจื” ื•ื”ื•ืกืคื” ืฉืœ ื›ื•ืชืจืช ื—ื“ืฉื” ืœืกื•ืฃ ื”ืจืฉื™ืžื”, ืžื” ืฉืžืืคืฉืจ ืœืš ืœืชืคืขืœ ื›ืœ ื•ืจื™ืืฆื™ื” ืžื•ืจื—ื‘ืช ืฉืœ ืคืจื•ื˜ื•ืงื•ืœ ื”-HTTP, ืชื•ืš ืฉืžื™ืจื” ืขืœ ื”ืกืžื ื˜ื™ืงื” ื”ืžืงื•ืจื™ืช ืฉืœ ื”ื›ื•ืชืจื•ืช ื•ืžืืคืฉืจืช ืœืš ืœื”ืฉื™ื’ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ื™ื•ืชืจ ื‘ืขืช ืชืจื’ื•ื HTTP/2 ืœ-HTTP/1.1 ื•ืœื”ื™ืคืš;
  • ื ื•ืกืคื” ืชืžื™ื›ื” ืจืฉืžื™ืช ื‘ืžืฆื‘ HTTP/2 ืžืงืฆื” ืœืงืฆื” (ืขื™ื‘ื•ื“ ื›ืœ ื”ืฉืœื‘ื™ื ื‘-HTTP/2, ื›ื•ืœืœ ืงืจื™ืื•ืช ืœ-backend, ื•ืœื ืจืง ืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ ื”-proxy ืœืœืงื•ื—);
  • ืชืžื™ื›ื” ืžืœืื” ื‘ืคืจื•ืงืกื™ ื“ื•-ื›ื™ื•ื•ื ื™ ืฉืœ ืคืจื•ื˜ื•ืงื•ืœ gRPC ื™ื•ืฉืžื” ืขื ื”ื™ื›ื•ืœืช ืœื ืชื— ื–ืจืžื™ gRPC, ื”ื“ื’ืฉืช ื”ื•ื“ืขื•ืช ื‘ื•ื“ื“ื•ืช, ืฉื™ืงื•ืฃ ืชืขื‘ื•ืจืช gRPC ื‘ื™ื•ืžืŸ ื•ืกื™ื ื•ืŸ ื”ื•ื“ืขื•ืช ื‘ืืžืฆืขื•ืช ACL. gRPC ืžืืคืฉืจ ืœืš ืœืืจื’ืŸ ืืช ืขื‘ื•ื“ืชื ืฉืœ ืฉื™ืจื•ืชื™ ืžื™ืงืจื• ื‘ืฉืคื•ืช ืชื›ื ื•ืช ืฉื•ื ื•ืช ื”ืžืงื™ื™ืžื•ืช ืื™ื ื˜ืจืืงืฆื™ื” ื–ื• ืขื ื–ื• ื‘ืืžืฆืขื•ืช API ืื•ื ื™ื‘ืจืกืœื™. ืชืงืฉื•ืจืช ืจืฉืช ื‘-gRPC ืžื™ื•ืฉืžืช ืขืœ ื’ื‘ื™ ืคืจื•ื˜ื•ืงื•ืœ HTTP/2 ื•ืžื‘ื•ืกืกืช ืขืœ ืฉื™ืžื•ืฉ ื‘ืžืื’ืจื™ ืคืจื•ื˜ื•ืงื•ืœ ืœื”ืกื“ืจืช ื ืชื•ื ื™ื.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืžืฆื‘ "Layer 7 Retries", ื”ืžืืคืฉืจ ืœืฉืœื•ื— ื‘ืงืฉื•ืช 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;
  • ื ื•ืกืฃ ืžื˜ืคืœ ื—ื™ืฆื•ื ื™ ืฉืœ spoa-mirror (/usr/sbin/spoa-mirror) ืœืฉื™ืงื•ืฃ ื‘ืงืฉื•ืช ืœืฉืจืช ื ืคืจื“ (ืœื“ื•ื’ืžื”, ืœื”ืขืชืงืช ื—ืœืง ืžืชืขื‘ื•ืจืช ื”ื™ื™ืฆื•ืจ ืœืฆื•ืจืš ื‘ื“ื™ืงืช ืกื‘ื™ื‘ืช ื ื™ืกื•ื™ ื‘ืขื•ืžืก ืืžื™ืชื™);
  • ืฉื”ื•ื’ืฉ ืขืœ ื™ื“ื™ HAProxy Kubernetes Ingress Controller ืœื”ื‘ื˜ื™ื— ืื™ื ื˜ื’ืจืฆื™ื” ืขื ืคืœื˜ืคื•ืจืžืช Kubernetes;
  • ื ื•ืกืคื” ืชืžื™ื›ื” ืžื•ื‘ื ื™ืช ืœื™ื™ืฆื•ื ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืœืžืขืจื›ืช ื”ื ื™ื˜ื•ืจ ืคืจื•ืžืชืื•ืก;
  • ืคืจื•ื˜ื•ืงื•ืœ ืขืžื™ืชื™ื, ื”ืžืฉืžืฉ ืœื”ื—ืœืคืช ืžื™ื“ืข ืขื ืฆืžืชื™ื ืื—ืจื™ื ื”ืžืจื™ืฆื™ื HAProxy, ื”ื•ืืจืš. ื›ื•ืœืœ ืชืžื™ื›ื” ื ื•ืกืคืช ื‘-Heartbeat ื•ื”ืขื‘ืจืช ื ืชื•ื ื™ื ืžื•ืฆืคื ืช;
  • ื”ืคืจืžื˜ืจ "ื“ื’ื™ืžื”" ื ื•ืกืฃ ืœื”ื ื—ื™ื™ืช "ืœื•ื’", ื”ืžืืคืฉืจืช ืœื–ืจื•ืง ืจืง ื—ืœืง ืžื”ื‘ืงืฉื•ืช ืœืœื•ื’, ืœืžืฉืœ 1 ืžืชื•ืš 10, ื›ื“ื™ ืœื™ืฆื•ืจ ืžื“ื’ื ืื ืœื™ื˜ื™;
  • ื ื•ืกืฃ ืžืฆื‘ ืคืจื•ืคื™ืœ ืื•ื˜ื•ืžื˜ื™ (ื”ื ื—ื™ื™ืช profiling.tasks, ืฉื™ื›ื•ืœื” ืœื”ืคืขื™ืœ ื•ืœื›ื‘ื•ืช ืืช ื”ืขืจื›ื™ื ืื•ื˜ื•ืžื˜ื™ื™ื). ื™ืฆื™ืจืช ืคืจื•ืคื™ืœื™ื ืื•ื˜ื•ืžื˜ื™ืช ืžื•ืคืขืœืช ืื ื–ืžืŸ ื”ืื—ื–ื•ืจ ื”ืžืžื•ืฆืข ืขื•ืœื” ืขืœ 1000 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”. ืœืฆืคื™ื™ื” ื‘ื ืชื•ื ื™ ืคืจื•ืคื™ืœื™ื, ื”ืคืงื•ื“ื” "ื”ืฆื’ ืคืจื•ืคื™ืœื™ื" ื ื•ืกืคื” ืœ-Runtime API ืื• ืฉืืคืฉืจ ืœืืคืก ืกื˜ื˜ื™ืกื˜ื™ืงื” ืœื™ื•ืžืŸ;
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ื’ื™ืฉื” ืœืฉืจืชื™ื ืขื•ืจืคื™ื™ื ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ SOCKS4;
  • ื ื•ืกืคื” ืชืžื™ื›ื” ืžืงืฆื” ืœืงืฆื” ื‘ืžื ื’ื ื•ืŸ ืœืคืชื™ื—ื” ืžื”ื™ืจื” ืฉืœ ื—ื™ื‘ื•ืจื™ TCP (TFO - TCP Fast Open, RFC 7413), ื”ืžืืคืฉืจืช ืœืฆืžืฆื ืืช ืžืกืคืจ ืฉืœื‘ื™ ื”ืชืงื ืช ื”ื—ื™ื‘ื•ืจ ืขืœ ื™ื“ื™ ืฉื™ืœื•ื‘ ื”ืจืืฉื•ืŸ ืœื‘ืงืฉื” ืื—ืช ื•ื”ืฉืœื‘ ื”ืฉื ื™ ืฉืœ ืชื”ืœื™ืš ื”ืžืฉื ื•ืžืชืŸ ื”ืงืœืืกื™ ื‘ืŸ 3 ื”ืฉืœื‘ื™ื ืœื—ื™ื‘ื•ืจ ื•ืžืืคืฉืจ ืœืฉืœื•ื— ื ืชื•ื ื™ื ื‘ืฉืœื‘ ื”ืจืืฉื•ื ื™ ืฉืœ ื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ;
  • ืคืขื•ืœื•ืช ื—ื“ืฉื•ืช ืฉื ื•ืกืคื•:
    • "http-request replace-uri" ื›ื“ื™ ืœื”ื—ืœื™ืฃ ืืช ื›ืชื•ื‘ืช ื”ืืชืจ ื‘ืืžืฆืขื•ืช ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืจื™;
    • "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 ืœื—ื™ืœื•ืฅ ืฉื“ื•ืช ืžื”ื•ื“ืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ Buffers;
    • ungrpc ื›ื“ื™ ืœื—ืœืฅ ืฉื“ื•ืช ืžื”ื•ื“ืขื•ืช gRPC.

    ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”