ืชืจืืื ืืืืืจ:
ืืฆืืชื ืืช ืืืืืจ ืืื ืื ืืขื ืืื, ืืืืืืื ืฉ-Envoy ืืฉืืฉ ืืจืื ืืืืง ืื"istio" ืื ืคืฉืื ื"ืืงืจ ืืื ืืกื" ืฉื kubernetes, ืืจืื ืืื ืฉืื ืืื ืืช ืืืชื ืืื ืืจืืงืฆืื ืืฉืืจื ืขื ืื ืืื, ืืืฉื, ืขื ืืืคืืกื ืืชืงื ืืช Nginx ืื Haproxy. ืขื ืืืช, ืื ืืฉืื ื ืฉืืจ, ืืืื ืืื ืืืืื ืืื ืื ืขืืื ืืืคื ืื. ื ืืกืืชื ืืชืจืื ืืื ืฉืืืชืจ ืืืืงืกื ืืจืืกืืช, ืืืื ืืืืื ืืืืืืืช; ืืื ืฉืืืื ืืืกืชืื ืขื ืื, ืืฉืืจืชื ืืช ืืืงืืจืืช ืืกืืืจืืื. ืืจืืืื ืืืืื ืืืชืื.
ืชืืขืื ืืื ื ืืจืื ื ืืืื ืขืืืจ ืืกืืก ืืงืื ืฉื Envoy ืืื ืืจืืข ืื ืืืื. ืืื ืืชืงื ืืืช, ืื ื ืืชืื ื ืืขืฉืืช ืกืืจื ืฉื ืคืืกืืื ืืืืื ืขื ืชืช-ืืืขืจืืืช ืืฉืื ืืช ืฉื Envoy. ืืืืืื ืฉืืื ืืืืืจ ืืจืืฉืื, ืื ื ืกืคืจ ืื ืื ืืชื ืืืฉื ืืืื ืืชื ืขืฉืื ืืืชืขื ืืื ืืืืืจืื ืขืชืืืืื.
ืืืช ืืฉืืืืช ืืืื ืืืช ืื ืคืืฆืืช ืืืืชืจ ืฉืื ื ืืงืื ืขื Envoy ืืื ืืืงืฉ ืชืืืืจ ืืจืื ื ืืืื ืฉื ืืืื ืืฉืจืฉืืจ ืฉืื ืืื ืืฉืชืืฉ. ืืคืืกื ืื, ืืชืืจ ืืืฆื Envoy ืืืคื ืืืืืจืื ื-threads, ืืื ืื ืืช ืืขืจืืช Thread Local Storage ืฉืืื ืืฉืชืืฉืช ืื ืืืืคื ืคื ืืื ืืื ืืืคืื ืืช ืืงืื ืืืงืืื ืืืชืจ ืืขื ืืืฆืืขืื ืืืืืื ืืืชืจ.
ืกืงืืจืช ืฉืจืฉืืจืื
Envoy ืืฉืชืืฉ ืืฉืืืฉื ืกืืืื ืฉืื ืื ืฉื ืืจืืื:
- ืจึธืืฉืึดื: ืฉืจืฉืืจ ืื ืฉืืื ืืืชืืื ืืกืืื ืชืืืืืื, ืืื ืขืืืื ื-API ืฉื XDS (xDiscovery Service), ืืืื DNS, ืืืืงืช ืชืงืื ืืช, ื ืืืื ืืฉืืืืืช ืืืื ื ืจืืฆื ืืืืืื, ืืืคืืก ืกืืืืกืืืงื, ื ืืืื ืื ืืืื ืชืืืืืื ืืืื - ืืืชืืช ืืื ืืงืก. ืืคืขืื ืืืืฉ ืืื ืืื'. ืงืืจื ืืฉืจืฉืืจ ืืื ืืื ืืกืื ืืจืื ื ื"ืื ืืืกื". ืืืืคื ืืืื, ืืฉืจืฉืืจ ืืจืืฉื ืืชืื ืืช ืื ืชืืืืื ืืคืื ืงืฆืืื ืืืืช ืืงืจืืืืื ืฉืืื ื ืืืจืฉืื ืืืืช ืืืืื ืฉื ืืขืื ืืื ืืคืขืื. ืื ืืืคืฉืจ ืืืชืื ืืช ืจืื ืงืื ืืืงืจื ืืืืื ืืื ืคืชืื ืืืื.
- ืขืึนืึตื: ืืืจืืจืช ืืืื, Envoy ืืืฆืจ ืฉืจืฉืืจ ืขืืื ืขืืืจ ืื ืฉืจืฉืืจ ืืืืจื ืืืขืจืืช, ื ืืชื ืืฉืืื ืืื ืืืืฆืขืืช ืืืคืฉืจืืช
--concurrency
. ืื ืฉืจืฉืืจ ืขืืื ืืคืขืื ืืืืืช ืืืจืืขืื "ืื ืืืกืืช", ืืฉืจ ืืืจืืืช ืืืืื ื ืืื ืืืืื; ืืืื ืืชืืืช ืฉืืจืืช ืืื (29 ืืืืื 2017) ืืื ืจืืกืืง ืฉื ืืืืืื, ืงืืืช ืืืืืจืื ืืืฉืื, ืืฆืืจืช ืขืจืืืช ืคืืืืจืื ืขืืืจ ืืืืืืจ, ืืขืืืื ืื ืคืขืืืืช ืืงืื/ืคืื (IO) ืืืืื ืืื ืืืืืืจ. ืฉืื, ืื ืืืคืฉืจ ืืืชืื ืืช ืจืื ืงืื ืืืืคืื ืืืืืืจ ืืืืื ืืื ืคืชืื ืืืื. - ืฉืืืคืช ืงืืฆืื: ืืื ืงืืืฅ ืฉ-Envoy ืืืชื, ืืขืืงืจ ืืืื ื ืืืฉื, ืืฉ ืืจืืข ืฉืจืฉืืจ ืืกืืื ืขืฆืืื. ืืืช ืืฉื ืืขืืืื ืฉืืชืืื ืืงืืฆืื ืืืืืืกื ืื ืืืืืื ืขื ืืื ืืขืจืืช ืืงืืฆืื ืื ืืขืช ืฉืืืืฉ
O_NONBLOCK
ืืืื ืืคืขืืื ืืืืืกื (ืื ืื). ืืืฉืจ ืฉืจืฉืืจื ืขืืืืื ืฆืจืืืื ืืืชืื ืืงืืืฅ, ืื ืชืื ืื ืืืขืฉื ืืืขืืจืื ืืืืืจ ืืืืืจืื ืฉืื ืื ื ืฉืืคืื ืืกืืคื ืฉื ืืืจ ืืจื ืืฉืจืฉืืจ ืฉืืืคืช ืงืืืฅ. ืืื ืืืืจ ืงืื ืืื ืฉืื ืืืืื ื ืืื ืืช ืื ืฉืจืฉืืจื ืืขืืืืื ืืืืืื ืืืกืื ืืช ืืืชื ื ืขืืื ืชืื ืืื ื ืืกืืื ืืืื ืืืืจ ืืืืจืื.
ืืืคืื ืืืืืืจืื
ืืคื ืฉื ืืื ืืงืฆืจื ืืขืื, ืื ืฉืจืฉืืจื ืืขืืืืื ืืงืฉืืืื ืืื ืืืืืื ืื ืืื ืื ืจืกืืกืื. ืืคืืื, ืืงืจื ื ืืฉืืฉ ืืฉืืืืช ืฉืงืขืื ืืงืืืืื ืืืื ื ืืืช ืืฉืจืฉืืจื ืขืืืืื. ืืจืขืื ืื ืืืืจื ืืื ืืืจื ืืื ืืืืื ืืื, ืื ืืฉืชืืฉืื ืืชืืื ืืช ืืื ืืืืจืช ืขืืืคืืช ืงืื/ืคืื (IO) ืืื ืื ืกืืช ืืืื ืฉืจืฉืืจ ืืขืืืื ืืคื ื ืฉืื ืืชืืืืื ืืืฉืชืืฉ ืืืืืื ืืืจืื ืฉืืืืื ืื ืื ืื ืืืืชื ืฉืงืข, ืืื ืื ืืฉืชืืฉืื ื-round robin ื ืขืืื (Spinlock) ืืขืืืื ืื ืืงืฉื.
ืืจืืข ืฉืืืืืจ ืืชืงืื ืืฉืจืฉืืจ ืขืืื, ืืื ืืขืืื ืื ืขืืื ืืช ืืฉืจืฉืืจ ืืื. ืื ืขืืืื ื ืืกืฃ ืฉื ืืืืืืจ ืืืืคื ืืืืืื ืืฉืจืฉืืจ ืืขืืื, ืืืื ืื ืืชื ืืืืช ืืขืืจื.
ืืฉ ืืื ืืกืคืจ ืืฉืืืืช ืืฉืืืืช:
- ืื ืืืืจื ืืืืืืจ ื-Envoy ืืืงืฆืื ืืฉืจืฉืืจ ืขืืื. ืืื, ืืืจืืช ืฉืืืืจื ืืืืืจ HTTP/2 ืืืฆืจืื ืจืง ืืืืืจ ืืื ืืื ืืืจื ืืืขืื ืืืจื ืืื ืคืขื, ืื ืืฉ ืืจืืขื ืฉืจืฉืืจื ืขืืืืื, ืืืื ืืจืืขื ืืืืืจื HTTP/2 ืืื ืืืจื ืืืขืื ืืืจื ืืืฆื ืืฆืื.
- ืืกืืื ืฉ-Envoy ืขืืื ืื ืืื ืฉืขื ืืื ืฉืืืจืช ืืื ืืฉืจืฉืืจ ืขืืื ืืืื, ืืืขื ืื ืืงืื ืืืื ืืืืืชื ืืื ืืกืืื ืืืืืื ืืื ืฉืจืฉืืจ ืืืื. ืขืืฆืื ืื ืืงื ืขื ืืชืืืช ืงืื ืจื ืืืชืืื ืืืคืืื ืืืกืคืจ ืืืขื ืืืชื ืืืืื ืฉื ืฉืจืฉืืจื ืขืืืืื.
- ืขื ืืืช, ืืืช ืืืคืฉืจืืืืช ืืขืืงืจืืืช ืืื ืฉืื ืงืืืช ืืื ืฉื ืืืืจ ืืืืจืื ืืืขืืืืช ืืืืืจ, ืืืขืฉื ืืฉืื ืืืื ืืืืืืจ ืืช
--concurrency
. ืงืืื ืืืชืจ ืืืื ืขืืืืื ืืื ืืจืฉ ืืืืื ืืืืจืื, ืืืฆืืจ ืืืชืจ ืืืืืจืื ืกืจืง ืืืงืืื ืืช ืงืฆื ืืืืื ืืืืืืจืื. ื-Lyft, ืืืืืืช ืืงืจืื ืืช ืืฆืืืืืช ืฉืื ื ืคืืขืืืช ืืืงืืืืืืช ื ืืืื ืืืื, ืื ืฉืืืืฆืืขืื ืชืืืืื ืืขืจื ืืช ืืฉืืจืืชืื ืฉืืืื. ืื ื ืืคืขืืืื ืืช Envoy ืืคืจืืงืกื ืงืฆื ืจืง ืืืงืืืืืืช ืืจืืืช.
ืื ืืืฉืืขืืช ืฉื ืื-ืืกืืื?
ืืืื ื "ืื ืืืกื" ืฉืืืฉ ืืกืคืจ ืคืขืืื ืขื ืื ืืืฉืจ ืื ื ืืืฆื ืคืืขื ืืฉืจืฉืืจ ืืจืืฉื ืืืขืืื. ืื ืืงืื ื ืืชื ืืื ืื ืฉืฉืื ืืืจ ืืขืืื ืื ื ืืกื. ืขื ืืืช, ืื ืื ืืืืจื ื ืืื (ืื ืื ืืืืจื ื ืืื?).
Envoy ืืฉืชืืฉ ืืืกืคืจ ืื ืขืืื ืชืืืืืื ืืจืืืื:
- ืืคื ืฉืฆืืื, ืืขืช ืืชืืืช ืืืื ื ืืืฉื, ืื ืฉืจืฉืืจื ืืขืืืืื ืจืืืฉืื ืืช ืืืชื ื ืขืืื ืืคื ื ืฉืืืืจ ืืืืื ืืืืืจืื ืืชืืื. ืืื ืืืืงืช ืืื ืขืื ืฆืจืื ืืืืืช ื ืืื ืืืื, ืื ืืชืื ืฉืืื ืขืื ืืืื ืืชืืืื ืืืงืืืืืืช ืืืืื ืืชืคืืงื ืืืืื.
- Envoy ืืฉืชืืฉ ืืืขืจืืช ืืืจืืืช ืืืื ืืื ืืืคื ืืกืืืืกืืืงื ืืงืืืืช ืืฉืจืฉืืจ. ืื ืืืื ืื ืืฉื ืฉื ืคืืกื ื ืคืจื. ืขื ืืืช, ืืืืืจ ืืงืฆืจื ืฉืืืืง ืืขืืืื ืกืืืืกืืืงืืช ืฉืจืฉืืจืื ืืงืืืืช, ืืขืืชืื ืืฉ ืฆืืจื ืืจืืืฉ ืื ืขืื ื"ืื ืืช ืกืืืืกืืืงื" ืืจืืืืช. ื ืขืืื ืื ืืขืืื ืื ืฆืจืืื ืืืืืจืฉ.
- ืืฉืจืฉืืจ ืืจืืฉื ืฆืจืื ืืขืช ืืขืช ืืชืื ืขื ืื ืฉืจืฉืืจื ืืขืืืืื. ืื ื ืขืฉื ืขื ืืื "ืคืจืกืื" ืืืฉืจืฉืืจ ืืจืืฉื ืืฉืจืฉืืจื ืขืืืืื, ืืืคืขืืื ืืฉืจืฉืืจื ืขืืืืื ืืืืจื ืืฉืจืฉืืจ ืืจืืฉื. ืืฉืืืื ืืืจืฉืช ื ืขืืื ืืื ืฉื ืืชื ืืืื ืืขืืื ืืชืืจ ืืืืืขื ืฉืคืืจืกืื ืืืฉืืื ืืืืืจ ืืืชืจ. ืืขืืื ืืื ืืขืจืขืจ ืขื ืื ืขืืืื ืืื ืืจืฆืื ืืช, ืื ืขืืืื ื ืืชื ืืืกืื ืืืชื ืืืืื ื ืืื ืืช.
- ืืืฉืจ Envoy ืืืชื ืืืื ืืืจื ืฉืืืืืช ืืืขืจืืช (ืฉืืืื ืจืืืื), ืืื ืจืืืฉ ื ืขืืื ืขื ืื ืืชืืืื. ืืืืคื ืืืื, ืืจืืฉืื ืืืงืืื ืฉื Envoy ื ืืฉื ื ืืจื ืื ืงืืืช ืืื ืฉื ืืืฆืืขืื, ืื ืฉืื ื ืืชื ื ืชืฉืืืช ืื ืจืื ืืฉืืคืืจื.
- ืืฉ ืขืื ืืื ืื ืขืืืื ืืงืจืืืื, ืืื ืืฃ ืืื ืืื ืืื ื ืงืจืืื ืืืืฆืืขืื ืืืขืืื ืืื ืืขืจืขืจ ืขืืืื.
ืืืกืื ืืงืืื ืฉื ืืืืื
ืืืื ืืืืคื ืฉืื Envoy ืืคืจืื ืืื ืชืืืื ืืืืจืืืช ืฉื ืืฉืจืฉืืจ ืืจืืฉื ืืืืจืืืช ืฉื ืืื ืืขืืื, ืืฉื ื ืืจืืฉื ืฉื ืืชื ืืืฆืข ืขืืืื ืืืจืื ืืืื ืืจืืฉื ืืืืืจ ืืื ืืกืคืง ืืื ืืื ืขืืื ืืฆืืจื ืืืื ืืืงืืื. ืกืขืืฃ ืื ืืชืืจ ืืืกืื ืืงืืื ืฉื ืืื ืฉืืืืื (TLS) ืืจืื ืืืืื. ืืืืง ืืื ืืชืืจ ืืืฆื ืืื ืืฉืืฉ ืื ืืืื ืืฉืืื.
ืืคื ืฉืืืจ ืชืืืจ, ืืฉืจืฉืืจ ืืจืืฉื ืืืคื ืืืขื ืืื ืคืื ืงืฆืืื ืืืืช ืืืืก ืื ืืืื ืืืืงืจื ืืชืืืื ื-Envoy. ืืืฉืืจ ืืืงืจื ืงืฆืช ืขืืืก ืืื, ืืื ืืฉืืกืชืืืื ืขืืื ืืชืื ืชืืืื ื-Envoy ืขืฆืื ืืืฉืืืื ืืืชื ืืืขืืจื ืฉืขืืฉืื ืฉืจืฉืืจื ืืขืืืืื, ืื ืืืืื ื. ืืืื ืืืืื ืืื ืฉืชืืืื ืืฉืจืฉืืจ ืืจืืฉื ืขืืฉื ืขืืืื ืืกืืืืช, ืืื ืืื ืฆืจืื ืืขืืื ืื ืฉืจืฉืืจ ืขืืื ืืืชืื ืืชืืฆืื ืฉื ืืขืืืื ืืื. ืืืงืจื ืื, ืืื ืืขืืื ืืื ื ืฆืจืื ืืจืืืฉ ืื ืขืื ืืื ืืืฉื.
ืืขืจืืช ื-TLS (ืืืกืื ืืงืืื ืฉื ืืืืื) ืฉื Envoy ืคืืขืืช ืืืืคื ืืื:
- ืงืื ืืคืืขื ืขื ืืฉืจืฉืืจ ืืจืืฉื ืืืื ืืืงืฆืืช ืืฉืืฆืช TLS ืืื ืืชืืืื. ืืืจืืช ืฉืื ืืืคืฉื, ืืคืืขื ืืื ืืื ืืงืก ืืืงืืืจ, ืืืกืคืง ืืืฉื ื-O(1).
- ืืฉืจืฉืืจ ืืจืืฉื ืืืื ืืืชืงืื ื ืชืื ืื ืฉืจืืจืืชืืื ืืชืื ืืืจืืฅ ืฉืื. ืืืฉืจ ืื ื ืขืฉื, ืื ืชืื ืื ืืชืคืจืกืืื ืืื ืฉืจืฉืืจ ืขืืื ืืืืจืืข ืืืืืช ืืืจืืข ืจืืื.
- ืฉืจืฉืืจื ืขืืืืื ืืืืืื ืืงืจืื ืืชืื ืืจืืฅ ื-TLS ืฉืืื ืืืืืืจ ืื ื ืชืื ื ืฉืจืฉืืจ ืืงืืื ืืืืื ืื ืฉื.
ืืืจืืช ืฉืื ืคืจืืืืื ืคืฉืืื ืืืื ืืืืงื ืืืคืืื, ืืื ืืืื ืืืื ืืืืฉื ืืกืืืช RCU (Read-Copy-Update). ืืขืืงืจื ืฉื ืืืจ, ืฉืจืฉืืจื ืขืืืืื ืืขืืื ืืื ื ืจืืืื ืฉืื ืืืื ืืืฉืื ืื ืชืื ืื ืืืจืืฆื TLS ืืืื ืฉืืขืืืื ืคืืขืืช. ืืฉืื ืื ืืชืจืืฉ ืจืง ืืืืื ืชืงืืคืช ืืื ืืื ืืื ืืืจืืขื ืืขืืืื.
Envoy ืืฉืชืืฉ ืืื ืืฉืชื ืืจืืื ืฉืื ืืช:
- ืขื ืืื ืืืกืื ื ืชืื ืื ืฉืื ืื ืืื ืฉืจืฉืืจ ืขืืื, ื ืืชื ืืืฉืช ืื ืชืื ืื ืืื ืื ืืกืืื.
- ืขื ืืื ืฉืืืจื ืขื ืืฆืืืข ืืฉืืชืฃ ืื ืชืื ืื ืืืืืืืื ืืืฆื ืงืจืืื ืืืื ืืื ืฉืจืฉืืจ ืขืืื. ืืคืืื, ืืื ืฉืจืฉืืจ ืขืืื ืืฉ ืกืคืืจืช ืืคื ืืืช ืื ืชืื ืื ืฉืื ื ืืชื ืืืงืืื ืืืื ืฉืืขืืืื ืคืืขืืช. ืจืง ืืืฉืจ ืื ืืขืืืืื ืืืจืืขื ืืืขืื ื ืชืื ืื ืืฉืืชืคืื ืืืฉืื, ืื ืชืื ืื ืืืฉื ืื ืืืฉืืื. ืื ืืื ื-RCU.
ืฉืจืฉืืจ ืขืืืื ืืฉืืื
ืืืืง ืื, ืืชืืจ ืืืฆื TLS (ืืืกืื ืืงืืื ืฉื ืฉืจืฉืืจ) ืืฉืืฉ ืื ืืืื ืืฉืืื. ื ืืืื ืืฉืืืืืช ืืืื xDS API ื/ืื ืขืืืื DNS, ืืื ืื ืืืืงืช ืชืงืื ืืช.
ื ืืืื ืืจืืืช ืืฉืืืืืช ืืืื ืืช ืืจืืืืื ืืืฉืืืื ืืืืื:
- ืื ืื ืืืฉืืืืืช ืืื ืจืืื ื-Envoy ืืื ืื ืืช ืื ืืืจืืื ืืืืืจืื ืฉื ืืืฉืืืืืช, ื-API ืฉื Cluster Discovery Service (CDS), ื-API ืฉื Secret Discovery Service (SDS) ื-Endpoint Discovery Service (EDS), DNS ืืืืืงืืช ืชืงืื ืืช ืืืฆืื ืืืช. ืืื ืืืจืืืช ืืืฆืืจืช ืชืฆืืื "ืขืงืืืช ืืกืืคื ืฉื ืืืจ" ืฉื ืื ืืฉืืื ืืืขืื ืืืจื, ืืืืืืช ืืืจืืื ืฉืืชืืื ืืื ืื ืืฆื ืืจืืืืชื.
- ืืืืง ืืืจืืืืช ืืืฆืข ืืืืงืช ืชืงืื ืืช ืืงืืืืืช ืืืืืื ืืื ืื ืืืฉืืื ืขื ืฉืื ืืืื ืืืฆื ืืืจืืืืช.
- CDS (Cluster Discovery Service) / SDS (Secret Discovery Service) / EDS (Endpoint Discovery Service) / DNS ืืืืฆืขืื ืืื ืืงืืืข ืืืจืืช ืืืฉืืื. ืฉืื ืื ืืืฆื ืืืืืจ ืืื ืื ืืืฉืืื.
- ืื ืืื ืขืืื ืืืฆืข ืืจืฆืืคืืช ืืืืืช ืืืจืืข.
- ืืืฉืจ ืื ืื ืืืฉืืื ืงืืืข ืฉืืืฆื ืฉื ืืฉืืื ืืฉืชื ื, ืืื ืืืฆืจ ืชืืื ืช ืืฆื ืืืฉื ืืงืจืืื ืืืื ืฉื ืืฆื ืืืฉืืื ืืฉืืื ืืืชื ืืื ืฉืจืฉืืจ ืขืืื.
- ืืืืื ืืชืงืืคื ืืฉืงืื ืืืื, ืฉืจืฉืืจ ืืขืืื ืืขืืื ืืช ืชืืื ืช ืืืฆื ืืืฉืืฆืช ื-TLS ืืืืงืฆื.
- ืืืืื ืืืจืืข I/O ืฉืืืืจ ืืงืืืข ืืช ืืืืจื ืืืืืื ืืขืืืก, ืืืื ืืขืืืก ืืืงืฉ ืืจืืฅ TLS (Thread Local storage) ืืื ืืงืื ืืืืข ืขื ืืืืจื. ืื ืื ืืืจืฉ ืื ืขืืืื. ืฉืืื ืื ืื ืฉ-TLS ืืืื ืื ืืืคืขืื ืืืจืืขื ืขืืืื ืื ืฉืืืื ื ืขืืืกืื ืืจืืืืื ืืืจืื ืืืืืื ืืืฉื ืืืืฉ ืืืืื ืื, ืืื ื ื ืชืื ืื ืืื'. ืื ืืขืืจ ืืืืงืฃ ืืคืืกื ืืื, ืืื ื ืขืฉื ืื ืฉืืืืฉ ืืืงืืืืช ืฉืื ืื ืืงืื.
ืืืืฆืขืืช ืื ืืื ืฉืืขืื, Envoy ืืืื ืืขืื ืื ืืงืฉื ืืื ืื ืืกืืื (ืืืขื ืืคื ืฉืชืืืจ ืงืืื ืืื). ืืืื ืืืืจืืืืช ืฉื ืงืื ื-TLS ืขืฆืื, ืจืื ืืงืื ืื ืฆืจืื ืืืืื ืืื ืจืืืื ืืืืื ืืืืืจ ืขืืื ืื ืืชื ืืืชืื ืืืชื ืขื ืคืชืื ืืื. ืื ืืืคื ืืช ืจืื ืืงืื ืืงื ืืืชืจ ืืืชืืื ืื ืืกืฃ ืืืืฆืืขืื ืืขืืืื.
ืชืช-ืืขืจืืืช ืืืจืืช ืฉืขืืฉืืช ืฉืืืืฉ ื-TLS
TLS (ืืืกืื ืืงืืื ืฉื ืฉืจืฉืืจ) ื-RCU (ืขืืืื ืืขืชืงืช ืงืจืืื) ื ืืฆืืื ืืฉืืืืฉ ื ืจืื ื-Envoy.
ืืืืืืืช ืืฉืืืืฉ:
- ืื ืื ืื ืืฉืื ืื ืคืื ืงืฆืืื ืืืืช ืืืืื ืืืืฆืืข: ืืจืฉืืื ืื ืืืืืช ืฉื ืคืื ืงืฆืืื ืืืืช ืืืคืขืืช ืืืืฉืืช ืืฉืจืฉืืจ ืืจืืฉื. ืืืืจ ืืื ืื ืฉืจืฉืืจ ืขืืื ืืงืื ืชืืื ืช ืืฆื ืืงืจืืื ืืืื ืืืืฆืขืืช ืกืื ืืืงื ืฉื RCU.
- ืืืืคืช ืืืืืืช ืืกืืืืื: ืขืืืจ ืืืืืืช ืืกืืืืื ืืืกืืคืงืืช ืขื ืืื RDS (ืฉืืจืืช ืืืืื ื ืชืื), ืืืืืืช ืืืกืืืืื ื ืืฆืจืืช ืืฉืจืฉืืจ ืืจืืฉื. ืชืืื ืช ืืืฆื ืืงืจืืื ืืืื ืชืกืืคืง ืืืืจ ืืื ืืื ืฉืจืฉืืจ ืขืืื ืืืืฆืขืืช ืกืื ืืืงื ืฉื RCU (Read Copy Update). ืื ืืืคื ืืช ืืืืืืช ืืืกืืื ืืฉืื ืื ืืขืื ืืืืื ื ืืืืืืช.
- ืฉืืืจื ืืืืืื ืฉื ืืืชืจืืช HTTP: ืืคื ืฉืืชืืจืจ, ืืืฉืื ืืืชืจืช ื-HTTP ืขืืืจ ืื ืืงืฉื (ืืืื ืืคืขืืช ~25K+ RPS ืืื ืืืื) ืืื ืื ืืงืจ. Envoy ืืืฉื ืืืืคื ืืจืืื ืืช ืืืืชืจืช ืืขืจื ืื ืืฆื ืฉื ืืื ืืืกืคืง ืืืชื ืืื ืขืืื ืืืืฆืขืืช TLS ื-RCU.
ืืฉื ื ืืงืจืื ืืืจืื, ืื ืืืืืืืืช ืืงืืืืืช ืืืืจืืช ืืกืคืง ืืื ื ืืืื ืฉื ืื TLS ืืฉืืฉ.
ืืืืืืืช ืืืฆืืขืื ืืืืขืืช
ืืืจืืช ืฉ-Envoy ืืชืคืงื ืื ืืื ืืกื ืืื, ืืฉื ื ืืื ืชืืืืื ืืืืืื ืืืืจืฉืื ืชืฉืืืช ืื ืืืฉืจ ืืฉืชืืฉืื ืื ืืืงืืื ืืชืคืืงื ืืืืืื ืืืื:
- ืืคื ืฉืืชืืืจ ืืืืืจ ืื, ืืจืืข ืื ืฉืจืฉืืจื ืืขืืืืื ืืงืืืื ื ืขืืื ืืขืช ืืชืืื ืืืืืจ ืืืืจืื ืืืื ืืืืฉื. ืืืงืืืืืืช ืืืืื ืืชืคืืงื ืืืืื, ืชืฆืืจื ืืฆืจืฃ ืืช ืืืื ื ืืืืฉื ืืื ืคืชืื ืขืืื ืขื ืืฉืืื ืืฉืืื ืืืืฅ ืืกืืจ ืืขืช ืืืชืืื ืืงืืืฅ ืืกืืคื. ืืืืืคืื, ืชืืื ืืืฆืืจ ืืืื ืืืฉื ื ืคืจื ืขืืืจ ืื ืฉืจืฉืืจ ืขืืื.
- ืืืจืืช ืฉืืกืืืืกืืืงื ืืืคืืืืืืช ืืืื, ืืืงืืืืืืช ืืชืคืืงื ืืืืืื ืืืื, ืกืืืจ ืืื ืื ืฉืชืืื ืืืืืงืช ืืืืืืช ืขื ืกืืืืกืืืงื ืืืืืช. ืืคืชืจืื ืืืขืื ืื ืืื ืืื ืื ืืื ืืื ืขืืื ืขื ืืืคืืก ืชืงืืคืชื ืฉื ืืื ืื ืืจืืืืื. ืขื ืื ื ืืื ืืคืืกื ืืื.
- ืืืจืืืืงืืืจื ืื ืืืืืช ืื ืชืขืืื ืืื ืื Envoy ืืืฆื ืืชืจืืืฉ ืฉืื ืืฉ ืืขื ืืืื ืืืืืจืื ืืืืจืฉืื ืืฉืืื ืขืืืื ืืฉืืขืืชืืื. ืืื ืขืจืืื ืฉืืืืืืจืื ืืชืคืืจื ืืืืคื ืฉืืื ืืื ืืืื ืขืืืืื. ื ืืชื ืืคืชืืจ ืืืช ืขื ืืื ืืืืขืช ืืืืื ืืืืืจื ืขืืืืื, ืฉืืืคืฉืจ ืืืืคืช ืืืืืจืื ืืื ืืืื ืขืืืืื.
ืกืืืื
ืืืื ืืฉืจืฉืืจ ืฉื Envoy ื ืืขื ืืกืคืง ืงืืืช ืชืื ืืช ืืืงืืืืืืช ืืกืืืืช ืขื ืืฉืืื ืืืืจืื ืืืืืืจืื ืฉืขืืืืื ืืืืื ืื ืืื ื ืืืืืจืื ืืืืื. ืืืื ืื ืืืคืฉืจ ืื ืืืฆืข ืืืฆืืขืื ืืืืื ืืืื ืืกืคืืจืช ืืืืื ืืชืคืืงื ืืืืืื ืืืื.
ืืคื ืฉืฆืืื ืชื ืืงืฆืจื ืืืืืืืจ, ืืขืืฆืื ืืืื ืืจืืฅ ืื ืขื ืืื ืขืจืืืช ืจืฉืช ืืืื ืืืฆื ืืฉืชืืฉ ืืืื DPDK (Data Plane Development Kit), ืื ืฉืืืื ืืืจืื ืืื ืฉืฉืจืชืื ืงืื ืื ืฆืืื ืืืื ืืืคืื ืืืืืืื ื ืืงืฉืืช ืืฉื ืืื ืขื ืขืืืื L7 ืืื. ืืืื ืืืื ืืขื ืืื ืืจืืืช ืื ืืืื ื ืืฉื ืื ืืงืจืืืืช.
ืืขืจื ืืืืจื ืืืจืื ื: ื ืฉืืืชื ืคืขืืื ืจืืืช ืืืืข ืืืจื ื ื-C++ ืขืืืจ Envoy. ืืกืืื ื ืืชืจื ืฉืืื ืขืืืื ืืฉืคื ืืชืขืฉืืืชืืช ืืืืืื ืืฉืืืืฉ ื ืจืื ืื ื ืืชื ืืื ืืช ืืช ืืืจืืืืงืืืจื ืืืชืืืจืช ืืคืืกื ืื. C++ ืืืืื ืื ืืชืืื ืืื ืืคืจืืืงืืื ืื ืืคืืื ืืืจืื ืคืจืืืงืืื, ืืื ืืืงืจื ืฉืืืืฉ ืืกืืืืื ืืื ืขืืืื ืืืื ืืืืื ืืืืฆืืข ืืขืืืื.
ืงืืฉืืจืื ืืงืื
ืงืืฉืืจืื ืืงืืฆืื ืขื ืืืฉืงืื ืืืืฉืืื ืืืชืจืืช ืฉื ืืื ื ืืคืืกื ืื:
github.com/lyft/envoy/blob/master/include/envoy/thread_local/thread_local.h github.com/lyft/envoy/blob/master/source/common/thread_local/thread_local_impl.h github.com/lyft/envoy/blob/master/include/envoy/upstream/cluster_manager.h github.com/lyft/envoy/blob/master/source/common/upstream/cluster_manager_impl.h
ืืงืืจ: www.habr.com