Cyfarchion! Erthygl fer yw hon sy’n ateb y cwestiynau: “beth yw cennad?”, “pam mae ei angen?” a "lle i ddechrau?".
Beth ydyw?
Mae Envoy yn gydbwyswr L4-L7 wedi'i ysgrifennu yn C++, sy'n canolbwyntio ar berfformiad uchel ac argaeledd. Ar y naill law, mae hwn mewn rhyw ffordd yn analog o nginx a haproxy, sy'n debyg o ran perfformiad iddynt. Ar y llaw arall, mae'n canolbwyntio'n fwy ar bensaernïaeth microwasanaeth ac mae ganddo ymarferoldeb nad yw'n waeth na chydbwysedd java a go, fel zuul neu traefik.
Tabl cymhariaeth o haproxy/nginx/cennad, nid yw'n honni ei fod yn wirionedd absoliwt, ond mae'n rhoi darlun cyffredinol.
nginx
haproxy
anfonwyd
traefik
sêr ar github
11.2k/drych
1.1k/drych
12.4k
27.6k
wedi ei ysgrifennu yn
C
C
C + +
go
API
dim
soced yn unig/gwthio
awyren data/tynnu
tynnu
gwiriad iechyd gweithredol
dim
ie
ie
ie
Olrhain agored
ategyn allanol
dim
ie
ie
Mae J.W.T.
ategyn allanol
dim
ie
dim
estyniad
Lua/C
Lua/C
Lua/C++
dim
Pam
Mae hwn yn brosiect ifanc, mae llawer o bethau ar goll, rhai yn alffa cynnar. Ond anfonwyd, hefyd oherwydd ei ieuenctid, yn datblygu'n gyflym ac mae ganddo lawer o nodweddion diddorol eisoes: cyfluniad deinamig, llawer o hidlwyr parod, rhyngwyneb syml ar gyfer ysgrifennu eich hidlwyr eich hun.
Mae meysydd cais yn dilyn o hyn, ond yn gyntaf mae 2 wrth-batrwm:
- Adlam statig.
Y ffaith yw bod ar hyn o bryd yn anfonwyd dim cefnogaeth caching. Mae'r guys Google yn ceisio hyn
Am y tro, defnyddiwch nginx ar gyfer statigau.
- Cyfluniad statig.
Gallwch ei ddefnyddio, ond anfonwyd Nid dyna beth y cafodd ei greu ar ei gyfer. Ni fydd nodweddion mewn cyfluniad statig yn cael eu hamlygu. Mae yna lawer o eiliadau:
Wrth olygu'r ffurfweddiad yn yaml, byddwch yn camgymryd, yn dirmygu'r datblygwyr am eiriau ac yn meddwl bod y ffurfweddau nginx/haproxy, er eu bod yn llai strwythuredig, yn fwy cryno. Dyna'r pwynt. Crëwyd cyfluniad Nginx a Haproxy i'w golygu â llaw, a anfonwyd am genhedlaeth o god. Disgrifir y cyfluniad cyfan yn
Fel rheol, dim ond mewn ffurfweddiad deinamig y caiff senarios defnyddio Canari, b/g a llawer mwy eu gweithredu. Nid wyf yn dweud na ellir gwneud hyn yn statig, rydym i gyd yn ei wneud. Ond ar gyfer hyn mae angen i chi roi ar faglau, yn unrhyw un o'r balancers, yn anfonwyd gan gynnwys.
Tasgau y mae Cennad yn anhepgor ar eu cyfer:
- Cydbwyso traffig mewn systemau cymhleth a deinamig. Mae hyn yn cynnwys y rhwyll gwasanaeth, ond nid dyma'r unig un o reidrwydd.
- Yr angen am ymarferoldeb olrhain dosranedig, awdurdodiad cymhleth neu swyddogaeth arall sydd ar gael yn anfonwyd allan o'r bocs neu wedi'i weithredu'n gyfleus, ond yn nginx/haproxy mae angen i chi gael eich amgylchynu gan lu ac ategion amheus.
Mae'r ddau, os oes angen, yn darparu perfformiad uchel.
Sut mae hwn
Cennad yn cael ei ddosbarthu mewn deuaidd yn unig fel delwedd docwr. Mae'r ddelwedd eisoes yn cynnwys enghraifft o ffurfweddiad statig. Ond dim ond ar gyfer deall y strwythur y mae gennym ddiddordeb ynddo.
cyfluniad statig 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
Cyfluniad deinamig
Pa broblem ydyn ni'n chwilio am ateb iddi? Ni allwch ail-lwytho cyfluniad y cydbwysedd llwyth dan lwyth yn unig; bydd problemau “bach” yn codi:
- Dilysiad cyfluniad.
Gall y ffurfwedd fod yn fawr, gall fod yn fawr iawn, os byddwn yn gorlwytho'r cyfan ar unwaith, mae'r siawns o gamgymeriad yn rhywle yn cynyddu.
- Cysylltiadau hirhoedlog.
Wrth gychwyn gwrandäwr newydd, mae angen i chi ofalu am y cysylltiadau sy'n rhedeg ar yr hen un; os bydd newidiadau'n digwydd yn aml a bod cysylltiadau hirhoedlog, bydd yn rhaid i chi chwilio am gyfaddawd. Helo, kubernetes ingress ar nginx.
- Gwiriadau iechyd gweithredol.
Os oes gennym wiriadau iechyd gweithredol, mae angen i ni wirio pob un ohonynt yn y ffurfwedd newydd cyn anfon traffig. Os oes llawer o bethau i fyny'r afon, mae hyn yn cymryd amser. Helo haproxy.
Sut mae hyn yn cael ei ddatrys yn anfonwydTrwy lwytho'r config yn ddeinamig, yn ôl y model pwll, gallwch ei rannu'n rhannau ar wahân a pheidio ag ail-gychwyn y rhan nad yw wedi newid. Er enghraifft, gwrandäwr, sy'n ddrud i'w ail-gychwyn ac anaml yn newid.
Ffurfweddiad anfonwyd (o'r ffeil uchod) yr endidau canlynol:
- gwrandäwr — gwrandäwr yn hongian ar ip/porthladd penodol
- gwesteiwr rhithwir - gwesteiwr rhithwir yn ôl enw parth
- llwybr - rheol cydbwyso
- clwstwr — grŵp o ffrydiau i fyny'r afon gyda pharamedrau cydbwyso
- endpoint — cyfeiriad enghraifft i fyny'r afon
Gellir llenwi pob un o'r endidau hyn ynghyd â rhai eraill yn ddeinamig; ar gyfer hyn, mae'r ffurfweddiad yn nodi cyfeiriad y gwasanaeth lle bydd y ffurfwedd yn cael ei dderbyn. Gall y gwasanaeth fod yn REST neu gRPC, mae gRPC yn well.
Enwir y gwasanaethau yn y drefn honno: LDS, VHDS, RDS, CDS ac EDS. Gallwch gyfuno cyfluniad statig a deinamig, gyda'r cyfyngiad na ellir pennu adnodd deinamig mewn un statig.
Ar gyfer y rhan fwyaf o dasgau, mae'n ddigon i weithredu'r tri gwasanaeth olaf, fe'u gelwir yn ADS (Gwasanaeth Darganfod Cyfunol), ar gyfer
Mae'r ffurfweddiad ar y ffurf ganlynol:
cyfluniad deinamig 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
Ar y cychwyn anfonwyd gyda'r ffurfwedd hon, bydd yn cysylltu â'r awyren reoli ac yn ceisio gofyn am ffurfweddiad RDS, CDS ac EDS. Disgrifir sut mae'r broses ryngweithio yn digwydd
Yn fyr, anfonwyd yn anfon cais yn nodi'r math o adnodd y gofynnir amdano, fersiwn a pharamedrau'r nod. Mewn ymateb, mae'n derbyn adnodd a fersiwn; os nad yw'r fersiwn ar yr awyren reoli wedi newid, nid yw'n ymateb.
Mae 4 opsiwn rhyngweithio:
- Un ffrwd GRPC ar gyfer pob math o adnoddau, mae statws llawn yr adnodd yn cael ei anfon.
- Ffrydiau ar wahân, cyflwr llawn.
- Un ffrwd, cyflwr cynyddrannol.
- Ffrydiau ar wahân, cyflwr cynyddrannol.
Mae xDS cynyddrannol yn caniatáu ichi leihau traffig rhwng yr awyren reoli a anfonwyd, mae hyn yn berthnasol ar gyfer cyfluniadau mawr. Ond mae’n cymhlethu’r rhyngweithio; mae’r cais yn cynnwys rhestr o adnoddau ar gyfer dad-danysgrifio a thanysgrifio.
Mae ein hesiampl yn defnyddio ADS - un ffrwd ar gyfer RDS, CDS, EDS a modd nad yw'n gynyddrannol. Er mwyn galluogi modd cynyddrannol, mae angen i chi nodi api_type: DELTA_GRPC
Gan fod y cais yn cynnwys paramedrau nod, gallwn anfon gwahanol adnoddau i'r awyren reoli ar gyfer gwahanol achosion anfonwyd, mae hyn yn gyfleus ar gyfer adeiladu rhwyll gwasanaeth.
Cynhesu
Ar anfonwyd wrth gychwyn neu wrth dderbyn cyfluniad newydd o'r awyren reoli, mae'r broses cynhesu adnoddau yn cael ei lansio. Mae wedi'i rannu'n warmup gwrandäwr a warmup clwstwr. Mae'r cyntaf yn cael ei lansio pan fydd newidiadau yn y system RDS/LDS, a'r ail pan fydd CDS/EDS. Mae hyn yn golygu, os mai dim ond rhannau i fyny'r afon sy'n newid, ni chaiff y gwrandäwr ei ail-greu.
Yn ystod y broses gynhesu, disgwylir adnoddau dibynnol o'r awyren reoli yn ystod y terfyn amser. Os bydd y terfyn amser yn digwydd, ni fydd y cychwyn yn llwyddiannus ac ni fydd y gwrandäwr newydd yn dechrau gwrando ar y porthladd.
Gorchymyn cychwyn: EDS, CDS, gwiriad iechyd gweithredol, RDS, LDS. Gyda gwiriadau iechyd gweithredol wedi'u galluogi, dim ond ar ôl un gwiriad iechyd llwyddiannus y bydd traffig yn mynd i fyny'r afon.
Os cafodd y gwrandäwr ei ail-greu, mae'r hen un yn mynd i'r cyflwr DRAIN a bydd yn cael ei ddileu ar ôl i'r holl gysylltiadau gau neu pan ddaw'r terfyn amser i ben --drain-time-s
, diofyn 10 munud.
I'w barhau.
Ffynhonnell: hab.com