Kazembe. 1. Mawu Oyamba

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 kukonza. Lingalirolo lidzakwaniritsidwa kamodzi anatumiza zobisika zonse (zoo headers) za RFC kutsatira, ndi kukhazikitsa mwachindunji kupanga mawonekedwe. Koma pakadali pano si alpha, zomangamanga zikukambidwa, PR tsegulani (pamene ndimalemba nkhani ya PR, PR idazizira, koma mfundoyi idakali yofunika).

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 protobuf, kupanga kuchokera ku mafayilo a proto ndikovuta kwambiri kulakwitsa.

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), java ndipo pitani pali kukhazikitsidwa kokonzeka kwa gRPC dataplane momwe mumangofunika kudzaza zinthu kuchokera kugwero lanu.

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

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

Kuwonjezera ndemanga