Molweni! Eli linqaku elifutshane eliphendula imibuzo: "Yintoni umthunywa?", "Kutheni ifuneka?" kwaye "ukuqala phi?".
Yintoni le
Umthunywa yi-L4-L7 balancer ebhalwe kwi-C ++, igxininise ekusebenzeni okuphezulu kunye nokufumaneka. Ngakolunye uhlangothi, oku ngandlela-thile yi-analogue ye-nginx kunye ne-haproxy, enokuthelekiswa nokusebenza kubo. Kwelinye icala, ijolise ngakumbi kuyilo lwe-microservice kwaye ayisebenzi mbi kune-java kunye ne-balancers, njenge-zuul okanye i-traefik.
Itheyibhile yokuthelekisa i-haproxy / nginx / umthunywa, ayifuni ukuba yinyaniso epheleleyo, kodwa inika umfanekiso oqhelekileyo.
nginx
Ndiyifumene
umthunywa
Umzila
iinkwenkwezi kwi-github
11.2k/isipili
1.1k/isipili
12.4k
27.6k
ibhalwe kwi
C
C
C ++
go
API
akukho
isiseko kuphela/ukutyhala
idathaplane/tsala
Tsala
ukhangelo lwempilo olusebenzayo
akukho
ewe
ewe
ewe
Vula umkhondo
iplagi yangaphandle
akukho
ewe
ewe
IJWT
iplagi yangaphandle
akukho
ewe
akukho
Ukwandiswa
Lua/C
Lua/C
Lua/C++
akukho
Kutheni
Le yiprojekthi encinci, zininzi izinto ezingekhoyo, ezinye zikwi-alpha yokuqala. Kodwa umthunywa, kwakhona ngenxa yobutsha bayo, ikhula ngokukhawuleza kwaye sele ineempawu ezininzi ezinomdla: ulungelelwaniso oluguqukayo, izihluzi ezininzi esele zenziwe, ujongano olulula lokubhala izihluzo zakho.
Imimandla yesicelo ilandela koku, kodwa kuqala kukho 2 antipatterns:
- Ukubuyela umva.
Inyaniso kukuba okwangoku umthunywa akukho nkxaso ye-caching. Abafana bakaGoogle bazama oku
Okwangoku, sebenzisa i-nginx ye-statics.
- Ubumbeko oluzinzileyo.
Ungayisebenzisa, kodwa umthunywa Asiyonto eyayidalelwe yona. Iimpawu kuqwalaselo olungatshintshiyo aziyi kubonakaliswa. Kukho amaxesha amaninzi:
Xa uhlela uqwalaselo kwi-yaml, uya kuphosisa, thethisa abaphuhlisi be-verbosity kwaye ucinge ukuba i-nginx/haproxy configs, nangona ingacwangciswanga kancinane, imfutshane ngakumbi. Nantso ingongoma. Uqwalaselo lweNginx kunye neHaproxy yenzelwe ukuhlelwa ngesandla, kunye umthunywa isizukulwana ukusuka kwikhowudi. Lonke ubumbeko luchazwe kwi
I-Canary, i-b/g ye-deployment scenarios kunye nokunye okuninzi ngokuqhelekileyo kuphunyezwa kuphela kuqwalaselo oluguquguqukayo. Anditsho ukuba le nto ayinakwenziwa ngokwezibalo, siyenza sonke. Kodwa kule nto kufuneka ubeke phezu kweentonga, kuyo nayiphi na i-balancers, kwi umthunywa kuquka.
Imisebenzi eyimfuneko kuyo uMthunywa:
- Ukulinganisa izithuthi kwiinkqubo ezinzima kunye neziguquguqukayo. Oku kubandakanya i-mesh yenkonzo, kodwa ayisiyiyo yodwa.
- Imfuneko yokusebenza komkhondo osasaziweyo, ugunyaziso oluntsonkothileyo okanye omnye umsebenzi okhoyo umthunywa ngaphandle kwebhokisi okanye iphunyezwe ngokulula, kodwa kwi nginx/haproxy kufuneka ujikelezwe lua kunye neeplagi ezithandabuzekayo.
Zombini, ukuba kuyimfuneko, zibonelela ngokusebenza okuphezulu.
ntoni lo msebenzi
Umthunywa usasazwe kumabhinari kuphela njengomfanekiso wedokhi. Umfanekiso sele uqulethe umzekelo wobumbeko olungatshintshiyo. Kodwa sinomdla kuyo kuphela ukuqonda isakhiwo.
uqwalaselo olungatshintshiyo lwe-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
Ubumbeko olunamandla
Yeyiphi ingxaki esijonge isisombululo kuyo? Awukwazi ukuphinda ulayishe ulungelelwaniso lwesilinganisi somthwalo phantsi komthwalo; iingxaki "ezincinci" ziya kuvela:
- Ukuqinisekiswa koqwalaselo.
Uqwalaselo lunokuba lukhulu, lunokuba lukhulu kakhulu, ukuba siyayilayisha kakhulu ngexesha elinye, amathuba empazamo kwenye indawo ayanda.
- Unxibelelwano oluhlala ixesha elide.
Xa uqalisa umphulaphuli omtsha, kufuneka unakekele uqhagamshelo oluqhuba kumdala; ukuba utshintsho lwenzeka rhoqo kwaye kukho unxibelelwano oluhlala ixesha elide, kuya kufuneka ujonge ukuthobela. Molo, kubernetes ingress kwi nginx.
- Ukuhlolwa kwempilo okusebenzayo.
Ukuba sinokuhlolwa okusebenzayo kwezempilo, kufuneka sizijonge kabini zonke kuqwalaselo olutsha phambi kokuba sithumele itrafikhi. Ukuba kukho imijelo emininzi, oku kuthatha ixesha. Molo haproxy.
Isonjululwa njani le nto kwi umthunywaNgokulayisha i-config dynamically, ngokwemodeli ye-pool, ungahlula kwiindawo ezahlukeneyo kwaye ungaqalisi kwakhona inxalenye engatshintshiyo. Umzekelo, umphulaphuli, obiza kakhulu ukuphinda uqalise kwaye kunqabile ukuba atshintshe.
Isimo umthunywa (ukusuka kwifayile engentla) inala maqumrhu alandelayo:
- umphulaphuli β umphulaphuli ujinga kwi-ip/port ethile
- umamkeli obonakalayo - umamkeli obonakalayo ngegama lesizinda
- indlela - umgaqo wokulinganisa
- iqela - Iqela lemisinga enyukayo kunye neeparamitha zokulinganisa
- i siphelo - idilesi yomzekelo onyukayo
Nganye kwezi ziko kunye nezinye zinokuzaliswa ngamandla; koku, ulungelelwaniso luxela idilesi yenkonzo apho uqwalaselo luya kufunyanwa khona. Inkonzo inokuba yi-REST okanye i-gRPC, i-gRPC ikhethwayo.
Iinkonzo zithiywe ngokulandelelanayo: i-LDS, i-VHDS, i-RDS, i-CDS kunye ne-EDS. Ungadibanisa ubumbeko olumileyo noluguquguqukayo, kunye nomda wokuba umthombo oguqukayo awunakuchazwa kwindawo engatshintshiyo.
Kwimisebenzi emininzi, kwanele ukuphumeza iinkonzo ezintathu zokugqibela, zibizwa ngokuba yi-ADS (Inkonzo yoFundo oluDityanisiweyo), kuba
Ubumbeko luthatha ngolu hlobo lulandelayo:
uqwalaselo oluguquguqukayo lwe-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
Kwindlela yokuqala umthunywa ngolu qwalaselo, izakuqhagamshela kwinqwelomoya kwaye izame ukucela i RDS, CDS kunye noqwalaselo lwe EDS. Indlela eyenzeka ngayo inkqubo yokunxibelelana ichaziwe
Kufuphi, umthunywa ithumela isicelo esibonisa uhlobo lovimba olucelwayo, uguqulelo kunye neeparameters zenodi. Ukuphendula, ifumana isibonelelo kunye noguqulelo; ukuba inguqulelo kwi-control-plane ayitshintshanga, ayiphenduli.
Kukho iindlela ezi-4 zokusebenzisana:
- Umlambo omnye we-gRPC kuzo zonke iintlobo zezibonelelo, isimo esipheleleyo somthombo sithunyelwa.
- Imilambo eyahlukileyo, imeko epheleleyo.
- Umlambo omnye, imo eyongezayo.
- Imilambo eyahlukileyo, imo yokunyuka.
I-xDS eyongezelelweyo ikuvumela ukuba unciphise i-traffic phakathi kwe-control-plane kunye umthunywa, oku kufanelekileyo kuqwalaselo olukhulu. Kodwa yenza nzima unxibelelwano; isicelo sinoluhlu lwezixhobo zokungabhalisi kunye nokubhalisa.
Umzekelo wethu usebenzisa i-ADS - umlambo omnye we-RDS, i-CDS, i-EDS kunye nemodi enganyukiyo. Ukwenza imo yongezelelo, kufuneka ukhankanye api_type: DELTA_GRPC
Ekubeni isicelo siqulethe iiparameters ze-node, sinokuthumela izixhobo ezahlukeneyo kwi-control-plane kwiimeko ezahlukeneyo umthunywa, oku kukulungele ukwakha i-mesh yenkonzo.
Shushubeza
phezu umthunywa ekuqaliseni okanye xa ufumana uqwalaselo olutsha kwinqwelomoya, inkqubo yokufudumala kwezixhobo iyaqaliswa. Yahlulahlulwe yaba yi-warmup yomphulaphuli kunye ne-cluster warmup. Eyokuqala iqaliswa xa kukho utshintsho kwi-RDS/LDS, eyesibini xa i-CDS/EDS. Oku kuthetha ukuba ukuba kuphela ukuguquka kwemisinga ephezulu, umphulaphuli akaphindanga wadalwa.
Ngethuba lenkqubo yokufudumala, izibonelelo ezixhomekeke zilindeleke kwi-control-plane ngexesha lokuphela kwexesha. Ukuba ixesha liphelile, ukuqaliswa akuyi kuphumelela kwaye umphulaphuli omtsha akayi kuqala ukumamela kwizibuko.
Umyalelo wokuqalisa: I-EDS, i-CDS, isheke lezempilo elisebenzayo, i-RDS, i-LDS. Ngokuhlolwa okusebenzayo kwezempilo kwenziwe, itrafikhi iya kunyuka umsinga kuphela emva kokujonga impilo eyimpumelelo.
Ukuba umphulaphuli wenziwa ngokutsha, endala iya kwimo ye-DRAIN kwaye iya kucinywa emva kokuba lonke uxhulumaniso luvaliwe okanye ixesha lokuvala liphelile. --drain-time-s
, emiselweyo imizuzu eli-10.
Ukuqhubeka.
umthombo: www.habr.com