Umthunywa. 1. Intshayelelo

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 lungisa. Umbono uya kuphunyezwa kanye umthunywa zonke izinto ezifihlakeleyo (izihloko zoo) zokuthotyelwa kwe-RFC, kunye nokuphunyezwa okuthe ngqo kwenza ujongano. Kodwa okwangoku ayisiyiyo alpha, uyilo luphantsi kwengxoxo, PR vula (ngelixa ndandibhala inqaku le-PR, i-PR yafriza, kodwa le ngongoma isasebenza).

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 protobuf, ukuyivelisa kwiifayile zeproto kunzima kakhulu ukwenza impazamo.

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 java kwaye hamba kukho uzalisekiso olwenziwayo lwe-gRPC yedathaplane apho kufuneka nje ugcwalise izinto ezisuka kumthombo wakho.

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 apha.

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

Yongeza izimvo