αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ HTTP/TCP balancer HAProxy 2.0

αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™ αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžαž»αž›αŸ’αž™αž—αžΆαž–αž•αŸ’αž‘αž»αž€ HA αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ 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 αž•αŸ’αž›αžΆαžŸαŸ‹β€‹αž”αŸ’αžαžΌβ€‹αžšβ€‹αž•αŸ’αž›αžΌαžœβ€‹αž€αžΆαžšβ€‹αžŸαŸ’αž“αžΎβ€‹αžšβ€‹αžŸαž»αŸ†, αž•αŸ’αž›αžΆαžŸαŸ‹β€‹αž”αŸ’αžαžΌβ€‹αžšβ€‹αž€αžΆαžšβ€‹αž…αž„β€‹ handler αž‘αŸ… IP;
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† nbthread αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αŸ†αž“αž½αž“αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„ HAProxy αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸ…αž›αžΎαžŸαŸŠαžΈαž—αžΈαž™αžΌαž–αž αž»αžŸαŸ’αž“αžΌαž›αŸ” αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž…αŸ†αž“αž½αž“αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž€αž˜αŸ’αž˜αž€αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαžŸαŸ’αž“αžΌαž›αžŸαŸŠαžΈαž—αžΈαž™αžΌαžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αžŸαŸ’αžαžΆαž“αž–αž–αž€ αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž‚αžΊαžαŸ’αžŸαŸ‚αžαŸ‚αž˜αž½αž™αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž€αž˜αŸ’αžšαž·αžαžšαžΉαž„ αž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸ†αž‘αžΎαž„ MAX_THREADS αž“αž·αž„ MAX_PROCS αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αžŠαŸ„αž™αž€αŸ†αžŽαžαŸ‹αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αžαžΆαž„αž›αžΎαž›αžΎαž…αŸ†αž“αž½αž“αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”
  • αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž…αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αŸ’αž‡αžΆαž”αŸ‹αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‘αŸ…αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž”αžŽαŸ’αžαžΆαž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž±αŸ’αž™αžŸαžΆαž˜αž‰αŸ’αž‰αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ†αž‘αžΎαž„ αžœαžΆαž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ†αžŽαžαŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ€αžαž‘αŸ - αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžŸαž€αž˜αŸ’αž˜αŸ”
  • αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž“αŸ…αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž’αž»αž„αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž±αŸ’αž™αžŸαžΆαž˜αž‰αŸ’αž‰ - αž₯αž‘αžΌαžœαž“αŸαŸ‡αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž‘αŸ… stdout αž“αž·αž„ stderr αž€αŸαžŠαžΌαž…αž‡αžΆαž‘αŸ…αž€αžΆαž“αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž·αž–αžŽαŸŒαž“αžΆαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ (αž§αž‘αžΆαž αžšαžŽαŸ "log fd@1 local0");
  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ HTX (Native HTTP Representation) αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αžαž»αž›αŸ’αž™αž—αžΆαž–αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžšαž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αžŠαžΌαž…αž‡αžΆ HTTP/2, Layer 7 Retries αž“αž·αž„ gRPC αž–αžΈαž…αž»αž„αžŠαž›αŸ‹αž…αž»αž„αŸ” HTX αž˜αž·αž“αž‡αŸ†αž“αž½αžŸαž”αž‹αž˜αž€αžαžΆαž“αŸ…αž“αžΉαž„αž€αž“αŸ’αž›αŸ‚αž„αž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αžŠαžΎαž˜αŸ’αž”αžΈαžŠαž€αž…αŸαž‰ αž“αž·αž„αž”αž“αŸ’αžαŸ‚αž˜αž”αž‹αž˜αž€αžαžΆαžαŸ’αž˜αžΈαž‘αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž”αž‰αŸ’αž‡αžΈ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžšαŸ€αž”αž…αŸ†αžœαŸ‰αžΆαžšαŸ’αž™αŸ‰αž„αŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž“αŸƒαž–αž·αž’αžΈαž€αžΆαžš HTTP αžŠαŸ„αž™αžšαž€αŸ’αžŸαžΆαž’αžαŸ’αžαž“αŸαž™αžŠαžΎαž˜αž“αŸƒαž”αž‹αž˜αž€αžαžΆ αž“αž·αž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€ αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αžΌαžœαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžαŸ’αž–αžŸαŸ‹αž“αŸ…αž–αŸαž›αž”αž€αž”αŸ’αžšαŸ‚ HTTP/2 αž‘αŸ… HTTP/1.1 αž“αž·αž„αž…αŸ’αžšαžΆαžŸαž˜αž€αžœαž·αž‰αŸ”
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž•αŸ’αž›αžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž”αŸ€αž” End-to-End HTTP/2 (αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸ…αž€αŸ’αž“αž»αž„ HTTP/2 αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαž αŸ…αž‘αŸ…αž€αžΆαž“αŸ‹αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™ αž“αž·αž„αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αžšαžœαžΆαž„αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ αž“αž·αž„αž’αžαž·αžαž·αž‡αž“αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ)αŸ”
  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž–αŸαž‰αž›αŸαž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž‘αŸ’αžœαŸαž‘αž·αžŸαž“αŸƒαž–αž·αž’αžΈαž€αžΆαžš gRPC αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‰αŸ‚αž€αžŸαŸ’αž‘αŸ’αžšαžΈαž˜ gRPC αžšαŸ†αž›αŸαž…αžŸαžΆαžšαž”αž»αž‚αŸ’αž‚αž› αž†αŸ’αž›αž»αŸ‡αž”αž‰αŸ’αž…αžΆαŸ†αž„αž–αžΈαž…αžšαžΆαž…αžšαžŽαŸ gRPC αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž» αž“αž·αž„αžαŸ’αžšαž„αžŸαžΆαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎ ACLs αŸ” gRPC αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹ microservices αž‡αžΆαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αŸ—αžŠαŸ‚αž›αž˜αžΆαž“αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αžŠαŸ„αž™αž”αŸ’αžšαžΎ API αžŸαž€αž›αŸ” αž€αžΆαžšαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ gRPC αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒ HTTP/2 protocol αž αžΎαž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Protocol Buffers αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαŸ€αžšαŸ€αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž”αŸ€αž” "αžŸαŸ’αžšαž‘αžΆαž”αŸ‹ 7 αž–αŸ’αž™αžΆαž™αžΆαž˜αž‘αžΎαž„αžœαž·αž‰" αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαžŸαŸ†αžŽαžΎ HTTP αž˜αŸ’αžαž„αž αžΎαž™αž˜αŸ’αžαž„αž‘αŸ€αžαž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžšαžΆαž‡αŸαž™αžŠαŸ‚αž›αž˜αž·αž“αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž”αž‰αŸ’αž αžΆαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰ (αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž” αž¬αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αž‘αŸαž…αŸ†αž–αŸ„αŸ‡ αžŸαŸ†αžŽαžΎ POST) αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αž·αž‘αžšαž”αŸ€αž”αž“αŸαŸ‡ αž‘αž„αŸ‹ "disable-l7-retry" αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž‡αž˜αŸ’αžšαžΎαžŸ "http-request" αž αžΎαž™αž‡αž˜αŸ’αžšαžΎαžŸ "αž–αŸ’αž™αžΆαž™αžΆαž˜αž˜αŸ’αžαž„αž‘αŸ€αž" αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ‚αžαž˜αŸ’αžšαžΌαžœαž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžŸαŸ’αžαžΆαž”αŸ‹ αž“αž·αž„αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™αŸ” αžŸαž‰αŸ’αž‰αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αžΎαž„αžœαž·αž‰αŸ– all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected αž€αŸαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž…αž„αž‘αŸ…αž›αŸαžαž€αžΌαžŠαžŸαŸ’αžαžΆαž“αž—αžΆαž– (404 αŸ”αž›αŸ”) ;
  • αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αž αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž αŸ…αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αžαžΆαž„αž€αŸ’αžšαŸ…αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž§αž”αž€αžšαžŽαŸαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ HAProxy αŸ”
    αž§αž‘αžΆαž αžšαžŽαŸ Data Plan API (/usr/sbin/dataplaneapi) αž€αŸαžŠαžΌαž…αž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Offload stream αž•αŸ’αžŸαŸαž„αŸ—αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαž§αž”αž€αžšαžŽαŸαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžαžΆαž„αž€αŸ’αžšαŸ…αŸ”

  • αž€αžΆαžšαž…αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ .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;
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž“αžΆαŸ†αž…αŸαž‰αžŸαŸ’αžαž·αžαž·αž‘αŸ…αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ Prometheus;
  • αž–αž·αž’αžΈαžŸαžΆαžš Peers αžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž–αŸαžαŸŒαž˜αžΆαž“αž‡αžΆαž˜αž½αž™αžαŸ’αž“αžΆαŸ†αž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš HAProxy αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž„αŸ’αžšαžΈαž€αŸ” αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Heartbeat αž“αž·αž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž’αŸŠαž·αž“αž‚αŸ’αžšαžΈαž”αŸ”
  • αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš "αž‚αŸ†αžšαžΌ" αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† "αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»" αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ„αŸ‡αž…αŸ„αž›αžαŸ‚αž•αŸ’αž“αŸ‚αž€αž“αŸƒαžŸαŸ†αžŽαžΎαž‘αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž§αž‘αžΆαž αžšαžŽαŸ 1 αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜ 10 αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž‡αžΆαž‚αŸ†αžšαžΌαžœαž·αž—αžΆαž‚αŸ”
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αž˜αŸ’αžšαž„αŸ‹αž‘αž˜αŸ’αžšαž„αŸ‹αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· (αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† profiling.tasks αžŠαŸ‚αž›αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αžαž˜αŸ’αž›αŸƒαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž”αžΎαž€ αž“αž·αž„αž”αž·αž‘)αŸ” αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‘αž˜αŸ’αžšαž„αŸ‹αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž—αžΆαž–αž™αžΊαžαž™αŸ‰αžΆαžœαž‡αžΆαž˜αž’αŸ’αž™αž˜αž›αžΎαžŸαž–αžΈ 1000 ms αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αž˜αŸ’αžšαž„αŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ "αž”αž„αŸ’αž αžΆαž‰αž‘αž˜αŸ’αžšαž„αŸ‹" αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ… Runtime API αž¬αžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžŸαŸ’αžαž·αžαž·αž‘αžΎαž„αžœαž·αž‰αž‘αŸ…αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αŸ”
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ backend αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αž·αž’αžΈαž€αžΆαžš SOCKS4;
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž–αžΈαž…αž»αž„αžŠαž›αŸ‹αž…αž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αž“αŸ’αžαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αžΎαž€αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹ TCP αž™αŸ‰αžΆαž„αžšαž αŸαžŸ (TFO - TCP Fast Open, RFC 7413) αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž…αŸ†αž“αž½αž“αž“αŸƒαž‡αŸ†αž αžΆαž“αž“αŸƒαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ„αž™αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‘αžΈαž˜αž½αž™αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαžΎαž˜αž½αž™ αž“αž·αž„αž‡αŸ†αž αžΆαž“αž‘αžΈαž–αžΈαžšαž“αŸƒ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž…αžšαž…αžΆαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ 3 αž‡αŸ†αž αžΆαž“αž”αž»αžšαžΆαžŽ αž“αž·αž„αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž’αžΆαž…αž•αŸ’αž‰αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ†αž”αžΌαž„αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αŸ”
  • αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžαŸ’αž˜αžΈαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ–
    • "http-request replace-uri" αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ†αž“αž½αžŸ URL αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž“αŸ’αžŸαŸ„αž˜αž’αž˜αŸ’αž˜αžαžΆ;
    • "tcp-request content do-resolve" αž“αž·αž„ "http-request do-resolve" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ hostname;
    • "tcp-request content set-dst" αž“αž·αž„ "tcp-request content set-dst-port" αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ†αž“αž½αžŸαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αž“αž·αž„αž…αŸ’αžšαž€αž‚αŸ„αž›αžŠαŸ…αŸ”
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž˜αŸ‰αžΌαžŒαž»αž›αž”αž˜αŸ’αž›αŸ‚αž„αžαŸ’αž˜αžΈαŸ–
    • aes_gcm_dev αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŒαž·αž‚αŸ’αžšαžΈαž”αžŸαŸ’αž‘αŸ’αžšαžΈαž˜αžŠαŸ„αž™αž”αŸ’αžšαžΎ AES128-GCM, AES192-GCM αž“αž·αž„ AES256-GCM algorithms;
    • protobuf αžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€αžœαžΆαž›αž…αŸαž‰αž–αžΈαžŸαžΆαžš Protocol Buffers;
    • ungrpc αžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€αžœαžΆαž›αž–αžΈαžŸαžΆαžš gRPC αŸ”

    αž”αŸ’αžšαž—αž–: opennet.ru

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹