Beannachdan! Is e artaigil goirid a tha seo a tha a’ freagairt nan ceistean: “Dè a th’ ann an tosgaire?”, “Carson a tha feum air?” agus "càit an tòisich thu?".
Dè tha seo
Tha Envoy na chothromachadh L4-L7 sgrìobhte ann an C ++, le fòcas air àrd-choileanadh agus ruigsinneachd. Air an aon làimh, tha seo ann an dòigh air choreigin mar analogue de nginx agus haproxy, an coimeas ri coileanadh riutha. Air an làimh eile, tha e nas dìriche gu ailtireachd microservice agus chan eil comas-gnìomh aige nas miosa na java and go balancers, leithid zuul no traefik.
Clàr coimeas de haproxy/nginx/tosgaire, chan eil e ag ràdh gur e an fhìrinn iomlan a th’ ann, ach tha e a’ toirt dealbh coitcheann.
nginx
sgaoileadh
tosgaire
traefik
rionnagan air github
11.2k / sgàthan
1.1k / sgàthan
12.4k
27.6k
sgrìobhte ann an
C
C
C ++
go
API
sam bith
socaid a-mhàin/putadh
plèana dàta/tarraing
tarraing
sgrùdadh slàinte gnìomhach
sam bith
tha
tha
tha
Lorg fosgailte
plugan taobh a-muigh
sam bith
tha
tha
J.W.T.
plugan taobh a-muigh
sam bith
tha
sam bith
leudachan
Lua/C
Lua/C
Lua/C++
sam bith
Carson
Is e pròiseact òg a tha seo, tha tòrr rudan a dhìth, cuid ann an alpha tràth. Ach tosgaire, cuideachd air sgàth òige, a’ leasachadh gu luath agus tha mòran fheartan inntinneach ann mu thràth: rèiteachadh fiùghantach, mòran sìoltachain deiseil, eadar-aghaidh sìmplidh airson na sìoltachain agad fhèin a sgrìobhadh.
Tha raointean tagraidh a’ leantainn bho seo, ach an toiseach tha 2 antipatterns ann:
- Ath-chuairteachadh statach.
Is e an fhìrinn gu bheil an-dràsta ann an tosgaire gun taic caching. Tha na balaich Google a’ feuchainn seo
Airson a-nis, cleachd nginx airson statics.
- Suidheachadh statach.
Faodaidh tu a chleachdadh, ach tosgaire Chan ann airson sin a chaidh a chruthachadh. Cha nochd feartan ann an rèiteachadh statach. Tha mòran amannan ann:
Nuair a bhios tu a’ deasachadh an rèiteachaidh ann an yaml, bidh thu ceàrr, cuir tàir air an luchd-leasachaidh airson briathrachas agus smaoinich gu bheil na configs nginx/haproxy, ged nach eil iad cho structarail, nas pongail. Sin a’ phuing. Chaidh rèiteachadh Nginx agus Haproxy a chruthachadh airson deasachadh le làimh, agus tosgaire airson ginealach bho chòd. Tha an rèiteachadh gu lèir air a mhìneachadh ann an
Mar as trice chan eil suidheachaidhean cleachdadh Canary, b / g agus mòran a bharrachd air an cur an gnìomh ach ann an rèiteachadh fiùghantach. Chan eil mi ag ràdh nach gabh seo a dhèanamh gu staitigeach, bidh sinn uile ga dhèanamh. Ach airson seo feumaidh tu a chuir air crutches, ann an gin de na balancers, a-steach tosgaire gabhail a-steach.
Gnìomhan air a bheil Tosgaire riatanach:
- Cothromachadh trafaic ann an siostaman iom-fhillte agus fiùghantach. Tha seo a’ toirt a-steach mogal na seirbheis, ach gu riatanach chan e seo an aon fhear.
- An fheum air gnìomhachd lorg sgaoilte, cead iom-fhillte no gnìomh eile a tha ri fhaighinn tosgaire a-mach às a’ bhogsa no air a chuir an gnìomh gu goireasach, ach ann an nginx / haproxy feumaidh tu a bhith air do chuairteachadh le lua agus plugins amharasach.
Bidh an dà chuid, ma tha sin riatanach, a 'toirt seachad àrd-choileanadh.
Ciamar a tha an obair seo
Tha tosgaire air a chuairteachadh ann am binaries a-mhàin mar ìomhaigh docker. Tha eisimpleir san ìomhaigh mu thràth de rèiteachadh statach. Ach tha ùidh againn ann a-mhàin airson an structar a thuigsinn.
rèiteachadh statach 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
Rèiteachadh fiùghantach
Dè an duilgheadas a tha sinn a’ coimhead airson fuasgladh? Chan urrainn dhut dìreach an rèiteachadh cothromachaidh luchd ath-luchdachadh fo luchd; èiridh duilgheadasan “beaga”:
- Dearbhadh rèiteachaidh.
Faodaidh an rèiteachadh a bhith mòr, faodaidh e a bhith gu math mòr, ma chuireas sinn cus thairis air uile aig an aon àm, bidh na cothroman gum bi mearachd an àiteigin ag àrdachadh.
- Ceanglaichean fad-beatha.
Nuair a thòisicheas tu neach-èisteachd ùr, feumaidh tu aire a thoirt do na ceanglaichean a tha a’ ruith air an t-seann fhear; ma thachras atharrachaidhean gu tric agus gu bheil ceanglaichean fad-ùine ann, feumaidh tu co-rèiteachadh a lorg. Halo, kubernetes a-steach air nginx.
- Sgrùdaidhean slàinte gnìomhach.
Ma tha sgrùdaidhean slàinte gnìomhach againn, feumaidh sinn sgrùdadh dùbailte a dhèanamh orra uile san config ùr mus cuir sinn trafaic. Ma tha tòrr sruthan shuas, bheir seo ùine. Halo haproxy.
Ciamar a tha seo air a rèiteachadh ann an tosgaireLe bhith a ’luchdachadh an config gu dinamach, a rèir modal an amar, faodaidh tu a roinn ann am pàirtean fa leth agus gun a bhith ag ath-thòiseachadh a’ phàirt nach eil air atharrachadh. Mar eisimpleir, neach-èisteachd, a tha daor a reinitialize agus glè ainneamh atharrachadh.
Rèiteachadh tosgaire (bhon fhaidhle gu h-àrd) aig a bheil na buidhnean a leanas:
- èisdeachd - neach-èisteachd crochte air ip / port sònraichte
- aoigheachd mas-fhìor - aoigheachd brìgheil a rèir ainm fearainn
- slighe - riaghailt cothromachaidh
- bhagaide - buidheann de shruthan suas le crìochan cothromachaidh
- aig an deireadh - seòladh eisimpleir shuas an abhainn
Faodar gach aon de na buidhnean sin agus cuid eile a lìonadh a-steach gu dinamach; airson seo, tha an rèiteachadh a’ sònrachadh seòladh na seirbheis às am faighear an config. Faodaidh an t-seirbheis a bhith REST no gRPC, tha gRPC nas fheàrr.
Tha na seirbheisean air an ainmeachadh fa leth: LDS, VHDS, RDS, CDS agus EDS. Faodaidh tu rèiteachadh statach is fiùghantach a chur còmhla, leis a’ chuingealachadh nach urrainnear goireas fiùghantach a shònrachadh ann an tè statach.
Airson a’ mhòr-chuid de ghnìomhan, tha e gu leòr na trì seirbheisean mu dheireadh a chur an gnìomh, canar ADS (Seirbheis Lorg Co-iomlan) riutha), airson
Tha an rèiteachadh anns an fhoirm a leanas:
rèiteachadh fiùghantach 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
Aig toiseach tòiseachaidh tosgaire leis an rèiteachadh seo, ceangailidh e ris an itealan smachd agus feuchaidh e ri rèiteachadh RDS, CDS agus EDS iarraidh. Tha mìneachadh mar a tha am pròiseas eadar-obrachaidh a’ tachairt
Ann an ùine ghoirid, tosgaire a’ cur iarrtas a’ nochdadh an seòrsa goireas a thathar ag iarraidh, dreach agus crìochan an nód. Mar fhreagairt, gheibh e goireas agus dreach; mura h-eil an dreach air an itealan-smachd air atharrachadh, chan eil e a’ freagairt.
Tha 4 roghainnean eadar-obrachaidh ann:
- Aon sruth gRPC airson a h-uile seòrsa de ghoireasan, tha inbhe iomlan a 'ghoireis air a chuir.
- Sruthan air leth, làn staid.
- Aon sruth, staid mean air mhean.
- Separate streams, staid mean air mhean.
Leigidh xDS mean air mhean dhut trafaic a lughdachadh eadar an itealan-smachd agus tosgaire, tha seo buntainneach airson rèiteachaidhean mòra. Ach tha e a’ dèanamh an eadar-obrachaidh iom-fhillte; tha liosta de ghoireasan anns an iarrtas airson a bhith gun fho-sgrìobhadh agus fo-sgrìobhadh.
Bidh an eisimpleir againn a’ cleachdadh ADS - aon shruth airson RDS, CDS, EDS agus modh neo-mheudach. Gus am modh meudachaidh a chomasachadh, feumaidh tu sònrachadh api_type: DELTA_GRPC
Leis gu bheil paramadairean nòd anns an iarrtas, is urrainn dhuinn diofar ghoireasan a chuir chun phlèana smachd airson diofar shuidheachaidhean tosgaire, tha seo goireasach airson mogal seirbheis a thogail.
Blàthaich suas
air a ' tosgaire aig toiseach tòiseachaidh no nuair a gheibh thu rèiteachadh ùr bhon phlèana smachd, thèid am pròiseas blàthachadh ghoireasan a chuir air bhog. Tha e air a roinn ann an blàthachadh luchd-èisteachd agus blàthachadh brabhsair. Thèid a’ chiad fhear a chuir air bhog nuair a tha atharrachaidhean ann an RDS/LDS, an dàrna fear nuair a bhios CDS/EDS. Tha seo a’ ciallachadh mura h-atharraich ach sruthan shuas, nach tèid an neach-èisteachd ath-chruthachadh.
Rè a 'phròiseas blàthachaidh, thathar a' sùileachadh stòrasan eisimeileach bhon phlèana smachd rè na h-ùine-ama. Ma thachras an ùine a-mach, cha bhith tòiseachadh soirbheachail agus cha tòisich an neach-èisteachd ùr ag èisteachd air a’ phort.
Òrdugh tòiseachaidh: EDS, CDS, sgrùdadh slàinte gnìomhach, RDS, LDS. Le sgrùdaidhean slàinte gnìomhach air an comasachadh, cha tèid trafaic suas an abhainn ach às deidh aon sgrùdadh slàinte soirbheachail.
Ma chaidh an neach-èisteachd ath-chruthachadh, thèid an seann fhear a-steach don staid DRAIN agus thèid a sguabadh às às deidh a h-uile ceangal a dhùnadh no nuair a thig an ùine seachad --drain-time-s
, bunaiteach 10 mionaidean.
Airson a leantainn.
Source: www.habr.com