Avefe'au. 1. Folasaga

Fa'afetai! O se tala puupuu lea e tali ai fesili: "O le a le avefeʻau?", "Aisea e manaʻomia ai?" ma "o fea e amata ai?".

O le a lenei mea

O le avefe'au o se paleni L4-L7 na tusia i le C ++, e taulaʻi i le maualuga o le faʻatinoga ma le avanoa. I le tasi itu, o se mea lea o se faʻatusa o nginx ma haproxy, faʻatusatusa i le faʻatinoga ia i latou. I le isi itu, e sili atu le faʻaogaina i le microservice architecture ma e leai se mea e sili atu le leaga nai lo java ma alu paleni, pei o le zuul poʻo le traefik.

Faʻatusatusa laulau o haproxy / nginx / envoy, e le o fai mai o le mea moni atoatoa, ae tuʻuina atu se ata lautele.

nginx
haproxy
auina
traffik

fetu ile github
11.2k/fa'ata
1.1k/fa'ata
12.4k
27.6k

tusia i totonu
C
C
C ++
go

API
leai
na'o le socket/uomi
vaalele / toso
toso

toaga siaki soifua maloloina
leai
ioe
ioe
ioe

Tatala su'ega
fa'apipi'i fafo
leai
ioe
ioe

Ua ta'ua e J.W.T.
fa'apipi'i fafo
leai
ioe
leai

faʻaseʻe
Lua/C
Lua/C
Lua/C++
leai

O le a mo

O se poloketi talavou lenei, e tele mea o loʻo misi, o nisi i le amataga o le alpha. Ae auina, faʻapea foʻi ona o lona talavou, o loʻo faʻatupuina vave ma ua uma ona i ai le tele o mea mataʻina: faʻatulagaina faʻamalosi, tele filiga saunia, se faʻaoga faigofie mo le tusiaina o au lava filiga.
O vaega o le talosaga e mulimuli mai i lenei, ae muamua e 2 antipatterns:

  • Toe solomuli.

O le mea moni e faapea i le taimi nei i totonu auina leai se fesoasoani fa'apipi'i. O lo'o taumafai tagata Google i lenei mea lipea. O le manatu o le a faʻatinoina tasi i totonu auina mea fa'apitoa uma (fa'aulu fa'ato'aga) o le tausisia o le RFC, ma mo fa'atinoga fa'apitoa e fai ai se atina'e. Ae mo le taimi nei e le o le alpha, o le fausaga o loʻo talanoaina, PR tatala (a'o ou tusia le PR article, o le PR na malo, ae o lenei itu e talafeagai pea).

Mo le taimi nei, faʻaaoga le nginx mo statics.

  • Fa'atonu tulaga.

E mafai ona e faʻaaogaina, ae auina E le o le mea lena na foafoaina ai. E le fa'aalia uiga o lo'o i totonu o se fa'atonuga. E tele taimi:

Pe a faʻasaʻo le faʻatulagaga i le yaml, o le a e sese, otegia le au atiaʻe mo le tautala ma mafaufau o le nginx / haproxy configs, e ui ina itiiti le faʻatulagaina, e sili atu ona puʻupuʻu. O le manatu lena. O le faʻatulagaina o Nginx ma Haproxy na faia mo le faʻasaʻoina e lima, ma auina mo tupulaga mai le code. O loʻo faʻamatalaina atoa le faʻatulagaga i totonu protobuf, fa'atupuina mai faila faila e sili atu ona faigata ona fai se mea sese.

Canary, b/g deployment scenario ma le tele o isi mea e masani ona faʻatinoina i se faʻatulagaga malosi. Ou te le o fai atu e le mafai ona faia lenei mea, tatou te faia uma lava. Ae mo lenei mea e tatau ona e tuʻu i luga o tootoo, i soʻo se paleni, i totonu auina aofia ai.

Galuega e mana'omia ai le Avefe'au:

  • Fa'apaleni ta'avale i faiga lavelave ma le malosi. E aofia ai le 'au'aunaga mesh, ae e le na'o le tasi.
  • Le mana'omia mo le tufatufaina atu o galuega faatino, fa'atagaga lavelave po'o isi galuega o lo'o avanoa i totonu auina i fafo o le atigipusa poʻo le faʻatinoina lelei, ae i le nginx / haproxy e tatau ona e siosiomia e lua ma faʻalavelave faʻapipiʻi.

O mea uma e lua, pe a manaʻomia, tuʻuina atu faʻatinoga maualuga.

E faapefea e lenei galuega

E tufatufaina atu le avefeau i binaries na o se ata docker. O le ata ua uma ona i ai se faʻataʻitaʻiga o se faʻatulagaina faʻamau. Ae matou te fiafia i ai mo na o le malamalama i le fausaga.

envoy.yaml static configuration

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

Fa'atonuga malosi

O le a le faafitauli o loo tatou sailia mo se fofo? E le mafai ona e toe faʻapipiʻiina le faʻatulagaina o le paleni o uta i lalo o le uta; "laʻi" faʻafitauli o le a tulaʻi mai:

  • Fa'amautu fa'amaonia.

O le config e mafai ona tele, e mafai ona telē tele, afai tatou te faʻateleina uma i le taimi e tasi, e faʻateleina le avanoa o se mea sese i se mea.

  • So'oga umi.

Pe a amataina se tagata faʻalogo fou, e tatau ona e vaʻaia fesoʻotaʻiga o loʻo faʻaogaina i luga o le mea tuai; afai e tupu soo suiga ma e iai ni fesoʻotaʻiga umi, e tatau ona e suʻeina se maliega. Talofa, kubernetes ingress i le nginx.

  • Su'ega fa'alesoifua maloloina.

Afai e iai a matou siaki fa'alesoifua maloloina, e mana'omia ona siaki fa'alua uma i le config fou a'o le'i tu'uina atu ta'avale. Afai e tele alia i luga, e umi se taimi. Talofa haproxy.

E faapefea ona foia lenei mea i auinaE ala i le faʻapipiʻiina o le config dynamically, e tusa ai ma le faʻataʻitaʻiga vaitaele, e mafai ona e vaevaeina i ni vaega eseese ma e le toe amataina le vaega e leʻi suia. Mo se faʻataʻitaʻiga, o se faʻalogo, lea e taugata e toe faʻafouina ma e seasea ona suia.

Fetuunaiga auina (mai le faila i luga) o loʻo i ai faʻalapotopotoga nei:

  • faʻalogo - tagata fa'alogologo o lo'o tautau i luga o se ip/taulaga fa'apitoa
  • 'au fa'akomepiuta - host virtual ile igoa ole igoa
  • auala - tulafono paleni
  • fuifui - o se vaega o alia'e i luga ma fa'atatau paleni
  • pito i luga - tuatusi fa'ata'ita'iga i luga

O nei faʻalapotopotoga taʻitasi faʻatasi ai ma isi e mafai ona faʻatumu ma le malosi; mo lenei mea, o le faʻatulagaga e faʻamaonia ai le tuatusi o le tautua mai le mea o le a maua ai le config. O le tautua e mafai ona REST po'o gRPC, gRPC e sili.

E ta'u igoa o auaunaga: LDS, VHDS, RDS, CDS ma EDS. E mafai ona e tu'ufa'atasia le fa'atulagaina ma le fa'amalosi, fa'atasi ai ma le fa'atapula'aina e le mafai ona fa'ailoa mai se puna'oa malosi i se mea fa'amau.

Mo le tele o galuega, ua lava le faʻatinoina o auaunaga mulimuli e tolu, e taʻua o le ADS (Aggregated Discovery Service), mo java ma alu i ai o loʻo i ai se faʻatinoina o le gRPC dataplane lea e te manaʻomia e faʻatumu ai mea mai lau puna.

O le fa'atulagaga e fai le fomu nei:

envoy.yaml fa'atulagaina fa'amalosi

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

I le amataga auina faatasi ai ma lenei config, o le a fesootai i le pulea-vaalele ma taumafai e talosagaina le RDS, CDS ma EDS faatulagaga. O loʻo faʻamatalaina pe faʻafefea ona tupu le faʻagasologa o fegalegaleaiga iinei.

I se faapuupuuga, auina auina atu se talosaga e faailoa mai ai le ituaiga o punaoa o loʻo talosagaina, le faʻasologa ma faʻamaufaʻailoga o le node. I le tali atu, na te mauaina se punaoa ma se faʻamatalaga; afai e leʻi suia le faʻasologa i luga o le vaʻalele faʻatonutonu, e le tali mai.
E 4 avanoa fa'afeso'ota'i:

  • Tasi le gRPC stream mo ituaiga uma o punaoa, o le tulaga atoa o le punaoa e auina atu.
  • Vaitafe eseese, tulaga atoatoa.
  • Tasi alia, tulaga fa'aopoopo.
  • Vaitafe eseese, tulaga fa'aopoopo.

Faʻaopoopoga xDS faʻatagaina oe e faʻaitiitia feoaiga i le va o le vaʻalele faʻatonutonu ma auina, e talafeagai lenei mo faʻasalalauga tetele. Ae e faʻalavelaveina le fegalegaleaiga; o le talosaga o loʻo i ai se lisi o punaoa mo le unsubscribe ma le lesitala.

O la matou fa'ata'ita'iga e fa'aogaina le ADS - tasi le vaitafe mo RDS, CDS, EDS ma le le fa'aopoopoina. Ina ia mafai ona faʻatupuina faʻaopoopoga, e tatau ona e faʻamaonia api_type: DELTA_GRPC

Talu ai o le talosaga o loʻo i ai faʻamaufaʻailoga node, e mafai ona matou auina atu punaoa eseese i le vaʻalele faʻatonutonu mo tulaga eseese auina, e faigofie lenei mo le fausiaina o se masini tautua.

Faamasani mai

i auina i le amataga poʻo le taimi e maua ai se faʻatulagaga fou mai le vaʻalele faʻatonutonu, e faʻalauiloa le faagasologa o le mafanafana o punaoa. Ua vaevaeina i le mafanafana o le tagata faalogologo ma le mafanafana o le fuifui. O le muamua e fa'alauiloa pe a iai suiga ile RDS/LDS, ole lona lua ile CDS/EDS. O lona uiga afai e na'o le pito i luga e sui, e le toe faia le tagata fa'alogologo.

I le faagasologa o le mafanafana, o punaoa faʻalagolago e faʻamoemoeina mai le vaʻalele faʻatonutonu i le taimi e malolo ai. A o'o mai le taimi fa'agata, o le a le manuia le amataga ma o le tagata fa'alogo fou o le a le amata ona fa'alogo i luga o le uafu.
Poloaiga amata: EDS, CDS, siaki soifua maloloina malosi, RDS, LDS. A fa'agaoioi su'esu'ega fa'alesoifua maloloina, e fa'ato'a alu le ta'avale i luga pe a mae'a se siaki fa'alesoifua maloloina manuia.

Afai na toe faia le tagata fa'alogologo, e alu le mea tuai i le DRAIN state ma o le a tapeina pe a uma ona tapunia uma feso'ota'iga pe muta le taimi --drain-time-s, fa'aletonu 10 minute.

Ia toe faauau.

puna: www.habr.com

Faaopoopo i ai se faamatalaga