Moni! Iyi ndi nkhani yaifupi yomwe imayankha mafunso: "Nthumwi ndi chiyani?", "Chifukwa chiyani ikufunika?" ndi "kuti tiyambire?".
Ichi ndi chiani
Envoy ndi L4-L7 balancer yolembedwa mu C ++, yoyang'ana kwambiri pakuchita bwino komanso kupezeka. Kumbali imodzi, iyi ndi njira ina yofananira ya nginx ndi haproxy, yofananira ndikuchita nawo. Kumbali ina, imayang'ana kwambiri kamangidwe ka microservice ndipo ilibe magwiridwe antchito kuposa java ndi go balancers, monga zuul kapena traefik.
Gome lofananiza la haproxy/nginx/envoy, silimadzinenera kuti ndi chowonadi chenicheni, koma limapereka chithunzi chonse.
nginx
haproxy
anatumiza
alireza
nyenyezi pa github
11.2k / galasi
1.1k / galasi
12.4k
27.6k
yolembedwa mu
C
C
C ++
go
API
palibe
socket only/ push
dataplane/koka
Kokani
yogwira thanzi cheki
palibe
inde
inde
inde
Tsegulani kutsatira
pulogalamu yowonjezera kunja
palibe
inde
inde
J.W.T.
pulogalamu yowonjezera kunja
palibe
inde
palibe
kutambasuka
Lua/C
Lua/C
Lua/C++
palibe
Chifukwa
Iyi ndi ntchito yachinyamata, pali zinthu zambiri zomwe zikusowa, zina mu alpha oyambirira. Koma anatumiza, komanso chifukwa cha unyamata wake, ikukula mofulumira ndipo ili kale ndi zinthu zambiri zosangalatsa: kasinthidwe kosinthika, zosefera zambiri zokonzeka, mawonekedwe osavuta olembera zosefera zanu.
Magawo ogwiritsira ntchito amatsatira izi, koma choyamba pali 2 antipatterns:
- Static recoil.
Chowonadi ndi chakuti pakali pano mu anatumiza palibe chithandizo cha caching. Anyamata a Google akuyesera izi
Pakadali pano, gwiritsani ntchito nginx pama statics.
- Kusintha kokhazikika.
Mutha kugwiritsa ntchito, koma anatumiza Sindicho chimene chinalengedwera. Mawonekedwe a static kasinthidwe sangawonekere. Pali nthawi zambiri:
Mukakonza kasinthidwe mu yaml, mudzalakwitsa, dzudzulani omanga kuti mumve mawu achinsinsi ndikuganiza kuti masinthidwe a nginx/haproxy, ngakhale osakonzedwa bwino, amakhala achidule. Ndiyo mfundo yake. Kukonzekera kwa Nginx ndi Haproxy kudapangidwa kuti zisinthidwe ndi dzanja, ndi anatumiza kwa kubadwa kuchokera ku code. Kukonzekera konse kumafotokozedwa mu
Zochitika za Canary, b/g zotumizira ndi zina zambiri zimangokhazikitsidwa pamasinthidwe amphamvu. Sindikunena kuti izi sizingachitike mwadongosolo, tonse timazichita. Koma pa izi muyenera kuvala ndodo, mu balancers iliyonse, mu anatumiza kuphatikizapo.
Ntchito zomwe Mtumiki ndi wofunikira:
- Kulinganiza kwa magalimoto muzinthu zovuta komanso zosinthika. Izi zikuphatikiza ma mesh a service, koma sikuti ndi okhawo.
- Kufunika kogawa magwiridwe antchito, chilolezo chovuta kapena ntchito zina zomwe zikupezeka anatumiza kunja kwa bokosi kapena kukhazikitsidwa bwino, koma mu nginx/haproxy muyenera kuzunguliridwa ndi lua ndi mapulagini okayikitsa.
Onse, ngati kuli kofunikira, amapereka ntchito yapamwamba.
Kodi ntchito
Evoy imagawidwa m'mabini ngati chithunzi cha docker. Chithunzichi chili kale ndi chitsanzo cha kasinthidwe kokhazikika. Koma ife tiri ndi chidwi ndi izo kokha kumvetsa kapangidwe.
envoy.yaml static kasinthidwe
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
Kusintha kwamphamvu
Kodi tikuyang'ana vuto lanji? Simungathe kungoyikanso kasinthidwe ka katundu wonyamula katundu; mavuto "aang'ono" adzabuka:
- Kutsimikizira kasinthidwe.
Zosintha zimatha kukhala zazikulu, zitha kukhala zazikulu kwambiri, ngati titazidzaza zonse nthawi imodzi, mwayi wolakwitsa kwinakwake ukuwonjezeka.
- Kulumikizana kwanthawi yayitali.
Mukayambitsa womvera watsopano, muyenera kusamalira zolumikizira zomwe zikuyenda pa yakaleyo; ngati kusintha kumachitika pafupipafupi ndipo pali kulumikizana kwanthawi yayitali, muyenera kuyang'ana kusagwirizana. Moni, kubernetes ingress pa nginx.
- Kuwunika thanzi lachangu.
Ngati tili ndi macheke aumoyo, tiyenera kuwayang'ana kawiri mukusintha kwatsopano tisanatumize magalimoto. Ngati pali zambiri kumtunda, izi zimatenga nthawi. Hello haproxy.
Izi zimathetsedwa bwanji mu anatumizaMwa kutsitsa config dynamically, malinga ndi dziwe lachitsanzo, mukhoza kuligawa m'magawo osiyana ndipo osayambitsanso gawo lomwe silinasinthe. Mwachitsanzo, womvera, amene ndi okwera mtengo reinitialize ndi kawirikawiri kusintha.
Kukhazikika anatumiza (kuchokera pafayilo ili pamwambapa) ili ndi izi:
- womvera - womvera atapachikidwa pa ip/doko linalake
- pafupifupi host - wokhala ndi dzina lachidziwitso
- njira - kulinganiza lamulo
- m'bulu - gulu la mitsinje yokhala ndi magawo ofananira
- mapeto - adilesi yakumtunda kwachiwonetsero
Iliyonse mwazinthu izi kuphatikiza zina zitha kudzazidwa mwamphamvu; pa izi, kasinthidwe kameneka kamafotokoza adilesi yautumiki komwe kulandilidwa. Ntchitoyi ikhoza kukhala REST kapena gRPC, gRPC ndiyabwino.
Ntchitozi zimatchulidwa motsatira: LDS, VHDS, RDS, CDS ndi EDS. Mutha kuphatikiza masinthidwe okhazikika komanso osinthika, ndikuchepetsa kuti chiwongolero champhamvu sichingatchulidwe mu static imodzi.
Pazochita zambiri, ndizokwanira kugwiritsa ntchito ntchito zitatu zomaliza, zomwe zimatchedwa ADS (Aggregated Discovery Service),
Kukonzekera kumatenga mawonekedwe awa:
envoy.yaml dynamic kasinthidwe
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
Poyambira anatumiza ndi kasinthidwe kameneka, idzalumikizana ndi ndege yolamulira ndikuyesera kupempha kasinthidwe ka RDS, CDS ndi EDS. Momwe njira yolumikizirana imachitikira imafotokozedwa
Mwachidule, anatumiza imatumiza pempho losonyeza mtundu wazinthu zomwe zikufunsidwa, mtundu ndi magawo a node. Poyankha, imalandira chithandizo ndi mtundu; ngati mtundu wa ndegeyo sunasinthe, suyankha.
Pali njira 4 zolumikizirana:
- Mtsinje umodzi wa gRPC wamitundu yonse yazinthu, mawonekedwe athunthu amatumizidwa.
- Patulani mitsinje, yodzaza.
- Mtsinje umodzi, chikhalidwe chowonjezereka.
- Mitsinje yopatukana, mkhalidwe wowonjezereka.
Kuchulukitsa kwa xDS kumakupatsani mwayi wochepetsera kuchuluka kwa magalimoto pakati pa ndege zowongolera ndi anatumiza, izi ndizofunikira pamasinthidwe akuluakulu. Koma zimasokoneza kuyanjana; pempholi lili ndi mndandanda wazinthu zothandizira kusalembetsa ndikulembetsa.
Chitsanzo chathu chimagwiritsa ntchito ADS - mtsinje umodzi wa RDS, CDS, EDS ndi mawonekedwe osawonjezera. Kuti mutsegule mode yowonjezera, muyenera kufotokoza api_type: DELTA_GRPC
Popeza pempholi lili ndi magawo a node, titha kutumiza zinthu zosiyanasiyana ku ndege yowongolera nthawi zosiyanasiyana anatumiza, izi ndizosavuta kupanga mauna a service.
Konzekera
pa anatumiza poyambira kapena mukalandira kasinthidwe katsopano kuchokera ku ndege yowongolera, njira yotenthetsera zida imayambika. Amagawidwa kukhala omvera kutentha ndi kutentha kwamagulu. Yoyamba imayambitsidwa pamene pali kusintha kwa RDS/LDS, yachiwiri pamene CDS/EDS. Izi zikutanthauza kuti ngati mitsinje yokhayo yasintha, womverayo samapangidwanso.
Pa nthawi yotentha, zinthu zodalira zimayembekezeredwa kuchokera ku ndege yolamulira panthawi yopuma. Ngati nthawi yatha ichitika, kuyambitsa sikungayende bwino ndipo womvera watsopano sangayambe kumvetsera padoko.
Dongosolo loyambitsa: EDS, CDS, cheke yaumoyo, RDS, LDS. Ndikayezetsedwe kaumoyo, kuchuluka kwa magalimoto kumakwera pokhapokha atayezetsa bwino zaumoyo kamodzi.
Ngati womverayo adapangidwanso, yakaleyo imapita ku DRAIN ndipo idzachotsedwa maulumikizidwe onse atatsekedwa kapena nthawi yake itatha. --drain-time-s
, kusakhulupirika kwa mphindi 10.
Zipitilizidwa.
Source: www.habr.com