Tislijiet! Dan huwa artiklu qasir li jwieġeb il-mistoqsijiet: "x'inhu l-mibgħut?", "għaliex huwa meħtieġ?" u "minn tibda?".
X'inhu
Envoy huwa balancer L4-L7 miktub f'C++, iffukat fuq prestazzjoni għolja u disponibbiltà. Min-naħa waħda, dan huwa b'xi mod analogu ta 'nginx u haproxy, komparabbli magħhom fil-prestazzjoni. Min-naħa l-oħra, hija aktar orjentata lejn l-arkitettura tal-mikroservizz u għandha funzjonalità mhux agħar minn java and go balancers, bħal zuul jew traefik.
Tabella ta 'tqabbil ta' haproxy / nginx / mibgħut, ma tippretendix li hija l-verità assoluta, iżda tagħti stampa ġenerali.
nginx
haproxy
mibgħuta
traefik
stilel fuq github
11.2k/mera
1.1k/mera
12.4k
27.6k
bil-miktub
C
C
C ++
go
API
ebda
sokit biss/imbotta
dataplane/pull
iġbed
verifika tas-saħħa attiva
ebda
iva
iva
iva
Traċċar miftuħ
plugin estern
ebda
iva
iva
J.W.T.
plugin estern
ebda
iva
ebda
estensjoni
Lua/C
Lua/C
Lua/C++
ebda
Dak għal
Dan huwa proġett żagħżugħ, hemm ħafna affarijiet neqsin, xi wħud f'alpha bikrija. Iżda mibgħuta, ukoll minħabba ż-żgħażagħ tagħha, qed tiżviluppa malajr u diġà għandha ħafna karatteristiċi interessanti: konfigurazzjoni dinamika, ħafna filtri lesti, interface sempliċi għall-kitba tal-filtri tiegħek.
L-oqsma ta 'applikazzjoni ġejjin minn dan, iżda l-ewwel hemm 2 antipatterns:
- Recoil statiku.
Il-fatt hu li bħalissa fil mibgħuta ebda appoġġ caching. Il-guys tal-Google qed jippruvaw dan
Għalissa, uża nginx għall-istatika.
- Konfigurazzjoni statika.
Tista' tużah, imma mibgħuta Dak mhux għalxiex inħoloq. Karatteristiċi f'konfigurazzjoni statika mhux se jkunu esposti. Hemm ħafna mumenti:
Meta teditja l-konfigurazzjoni f'yaml, tkun żbaljat, ċanfar lill-iżviluppaturi għal verbosity u taħseb li l-konfigurazzjonijiet nginx/haproxy, għalkemm inqas strutturati, huma aktar konċiżi. Dak hu l-punt. Il-konfigurazzjoni ta 'Nginx u Haproxy inħolqot għall-editjar bl-idejn, u mibgħuta għall-ġenerazzjoni mill-kodiċi. Il-konfigurazzjoni kollha hija deskritta fi
Canary, xenarji ta' skjerament b/g u ħafna aktar huma normalment implimentati biss f'konfigurazzjoni dinamika. Mhux qed ngħid li dan ma jistax isir b’mod statiku, nagħmluh ilkoll. Iżda għal dan għandek bżonn tpoġġi l-krozzi, fi kwalunkwe mill-balancers, in mibgħuta inkluż.
Kompiti li għalihom il-Mibgħut huwa indispensabbli:
- Ibbilanċjar tat-traffiku f'sistemi kumplessi u dinamiċi. Dan jinkludi l-malji tas-servizz, iżda mhux neċessarjament l-uniku wieħed.
- Il-ħtieġa għal funzjonalità ta' traċċar distribwit, awtorizzazzjoni kumplessa jew funzjonalità oħra li hija disponibbli fi mibgħuta barra mill-kaxxa jew implimentati b'mod konvenjenti, iżda f'nginx/haproxy jeħtieġ li tkun imdawwar minn lua u plugins dubjużi.
It-tnejn, jekk meħtieġ, jipprovdu prestazzjoni għolja.
Kif taħdem din
Envoy huwa mqassam f'binarji biss bħala immaġni docker. L-immaġni diġà fiha eżempju ta 'konfigurazzjoni statika. Imma aħna interessati fiha biss biex nifhmu l-istruttura.
konfigurazzjoni statika envoy.yaml
static_resources:
listeners:
- name: listener_0
address:
socket_address:
protocol: TCP
address: 0.0.0.0
port_value: 10000
filter_chains:
- filters:
- name: envoy.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match:
prefix: "/"
route:
host_rewrite: www.google.com
cluster: service_google
http_filters:
- name: envoy.router
clusters:
- name: service_google
connect_timeout: 0.25s
type: LOGICAL_DNS
# Comment out the following line to test on v6 networks
dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_google
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: www.google.com
port_value: 443
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.api.v2.auth.UpstreamTlsContext
sni: www.google.com
Konfigurazzjoni dinamika
Għal liema problema qed infittxu soluzzjoni? Ma tistax sempliċement terġa' tgħabbi l-konfigurazzjoni tal-bilanċjar tat-tagħbija taħt tagħbija; se jinqalgħu problemi "żgħar":
- Validazzjoni tal-konfigurazzjoni.
Il-konfigurazzjoni tista 'tkun kbira, tista' tkun kbira ħafna, jekk aħna tagħbija żejda kollha f'daqqa, iċ-ċansijiet ta 'żball x'imkien jiżdiedu.
- Konnessjonijiet ta 'ħajja twila.
Meta tibda semmiegħ ġdid, trid tieħu ħsieb il-konnessjonijiet li jaħdmu fuq dak il-qadim; jekk il-bidliet iseħħu ta 'spiss u jkun hemm konnessjonijiet fit-tul, ikollok tfittex kompromess. Hello, kubernetes ingress fuq nginx.
- Kontrolli tas-saħħa attivi.
Jekk ikollna kontrolli tas-saħħa attivi, irridu niċċekkjawhom kollha fil-konfigurazzjoni l-ġdida qabel nibagħtu t-traffiku. Jekk ikun hemm ħafna upstreams, dan jieħu ż-żmien. Hello haproxy.
Kif dan solvut fi mibgħutaBilli tgħabbi l-konfigurazzjoni b'mod dinamiku, skont il-mudell tal-pool, tista 'taqsamha f'partijiet separati u ma terġax tibda l-parti li ma nbidlitx. Per eżempju, semmiegħa, li huwa għali biex jerġa 'jibda u rarament jinbidel.
Konfigurazzjoni mibgħuta (mill-fajl ta' hawn fuq) għandha l-entitajiet li ġejjin:
- semmiegħ — is-semmiegħ imdendel fuq ip/port speċifiku
- ospitanti virtwali - host virtwali bl-isem tad-dominju
- rotta - regola ta' bilanċ
- cluster — grupp ta' upstreams b'parametri ta' bilanċ
- endpoint — indirizz tal-istanza upstream
Kull waħda minn dawn l-entitajiet flimkien ma 'xi oħrajn jistgħu jimtlew b'mod dinamiku; għal dan, il-konfigurazzjoni tispeċifika l-indirizz tas-servizz minn fejn se tiġi riċevuta l-konfigurazzjoni. Is-servizz jista 'jkun REST jew gRPC, gRPC huwa preferibbli.
Is-servizzi huma msemmija rispettivament: LDS, VHDS, RDS, CDS u EDS. Tista 'tgħaqqad konfigurazzjoni statika u dinamika, bil-limitazzjoni li riżors dinamiku ma jistax jiġi speċifikat f'waħda statika.
Għall-biċċa l-kbira tal-kompiti, huwa biżżejjed li jiġu implimentati l-aħħar tliet servizzi, huma msejħa ADS (Aggregated Discovery Service), għal
Il-konfigurazzjoni tieħu l-forma li ġejja:
konfigurazzjoni dinamika envoy.yaml
dynamic_resources:
ads_config:
api_type: GRPC
grpc_services:
envoy_grpc:
cluster_name: xds_clr
cds_config:
ads: {}
static_resources:
listeners:
- name: listener_0
address:
socket_address:
protocol: TCP
address: 0.0.0.0
port_value: 10000
filter_chains:
- filters:
- name: envoy.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
stat_prefix: ingress_http
rds:
route_config_name: local_route
config_source:
ads: {}
http_filters:
- name: envoy.router
clusters:
- name: xds_clr
connect_timeout: 0.25s
type: LOGICAL_DNS
dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: xds_clr
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: xds
port_value: 6565
Fl-istartjar mibgħuta b'din il-konfigurazzjoni, se tikkonnettja mal-pjan ta 'kontroll u tipprova titlob il-konfigurazzjoni RDS, CDS u EDS. Kif iseħħ il-proċess ta 'interazzjoni huwa deskritt
Fil-qosor, mibgħuta jibgħat talba li tindika t-tip ta’ riżorsa li qed tintalab, il-verżjoni u l-parametri tan-node. Bi tweġiba, jirċievi riżors u verżjoni; jekk il-verżjoni fuq il-pjan ta 'kontroll ma nbidlitx, ma tirrispondix.
Hemm 4 għażliet ta' interazzjoni:
- Nixxiegħa gRPC waħda għat-tipi kollha ta 'riżorsi, jintbagħat l-istatus sħiħ tar-riżorsa.
- Nixxigħat separati, kundizzjoni sħiħa.
- Nixxiegħa waħda, stat inkrementali.
- Flussi separati, stat inkrementali.
XDS inkrementali jippermettilek tnaqqas it-traffiku bejn il-kontroll-pjan u mibgħuta, dan huwa rilevanti għal konfigurazzjonijiet kbar. Iżda tikkomplika l-interazzjoni; it-talba fiha lista ta’ riżorsi għat-tneħħija tal-abbonament u l-abbonament.
L-eżempju tagħna juża ADS - fluss wieħed għal RDS, CDS, EDS u modalità mhux inkrementali. Biex tippermetti l-mod inkrementali, trid tispeċifika api_type: DELTA_GRPC
Peress li t-talba fiha parametri tan-nodi, nistgħu nibagħtu riżorsi differenti lill-pjan ta 'kontroll għal każijiet differenti mibgħuta, dan huwa konvenjenti għall-bini ta 'malji ta' servizz.
Warmup
Fuq mibgħuta fl-istartjar jew meta tirċievi konfigurazzjoni ġdida mill-pjan ta 'kontroll, jitnieda l-proċess ta' tisħin tar-riżorsi. Huwa maqsum fi warmup tas-semmiegħ u warmup cluster. L-ewwel titnieda meta jkun hemm bidliet f'RDS/LDS, it-tieni meta CDS/EDS. Dan ifisser li jekk biss upstreams jinbidlu, is-semmiegħ ma jiġix rikrejat.
Matul il-proċess ta 'tisħin, riżorsi dipendenti huma mistennija mill-pjan ta' kontroll matul il-timeout. Jekk isseħħ il-timeout, l-inizjalizzazzjoni ma tirnexxix u s-semmiegħ il-ġdid mhux se jibda jisma fuq il-port.
Ordni ta 'inizjalizzazzjoni: EDS, CDS, kontroll tas-saħħa attiva, RDS, LDS. Bil-kontrolli tas-saħħa attivi attivati, it-traffiku se jitla' 'l fuq biss wara kontroll tas-saħħa wieħed b'suċċess.
Jekk is-semmiegħ ġie rikrejat, il-qadim imur fl-istat DRAIN u jitħassar wara li jingħalqu l-konnessjonijiet kollha jew jiskadi l-timeout --drain-time-s
, default 10 minuti.
Għandha titkompla.
Sors: www.habr.com