Moemeli. 1. Selelekela

Lumelang! Ena ke sengoloa se sekhuts'oane se arabang lipotso tse reng: "Essay ke eng?", "Hobaneng e hlokahala?" le "ho qala kae?".

Ke eng

Envoy ke L4-L7 balancer e ngotsoeng ka C ++, e shebaneng le ts'ebetso e phahameng le ho fumaneha. Ka lehlakoreng le leng, ena ka tsela e itseng ke analogue ea nginx le haproxy, e ka bapisoang le ts'ebetso ea bona. Ka lehlakoreng le leng, e shebane le meralo ea microservice mme ha e na ts'ebetso e mpe ho feta java and go balancers, joalo ka zuul kapa traefik.

Tafole ea papiso ea haproxy / nginx / moemeli, ha e bolele hore ke 'nete e feletseng, empa e fana ka setšoantšo se akaretsang.

nginx
boitumelo
o ile a romela
Metsoako

linaleli ho github
11.2k/seipone
1.1k/seipone
12.4k
27.6k

ngotsoe ka
C
C
C ++
go

API
ha ho
socket only/ push
dataplane/ hula
Hula

tlhahlobo ea bophelo bo botle
ha ho
e
e
e

Tsela e bulehileng
plugin ea kantle
ha ho
e
e

J.W.T.
plugin ea kantle
ha ho
e
ha ho

katoloso
Lua/C
Lua/C
Lua/C++
ha ho

Hobaneng

Ona ke morero o monyane, ho na le lintho tse ngata tse sieo, tse ling li le alpha ea pele. Empa o ile a romela, hape ka lebaka la bocha ba eona, e ntse e tsoela pele ka potlako 'me e se e ntse e e-na le likarolo tse ngata tse thahasellisang: tlhophiso e matla, li-filters tse ngata tse lokiselitsoeng, sebopeho se bonolo sa ho ngola li-filters tsa hau.
Likarolo tsa ts'ebeliso li latela ho tsoa ho sena, empa pele ho na le li-antipattern tse 2:

  • Ho tsieleha ho tsitsitseng.

'Nete ke hore ka nako eo ka o ile a romela ha ho ts'ehetso ea caching. Bashanyana ba Google ba leka sena lokisa. Mohopolo o tla kengoa ts'ebetsong hang ka mor'a o ile a romela lintlha tsohle tse poteletseng (lihlooho tsa zoo) tsa ho latela RFC, le bakeng sa ts'ebetsong e khethehileng etsa sebopeho. Empa hajoale ha e sa le alpha, meaho e ntse e buisanoa, PR bula (ha ke ntse ke ngola sengoloa sa PR, PR e ile ea hoama, empa ntlha ena e ntse e sebetsa).

Hajoale, sebelisa nginx bakeng sa statics.

  • Tlhophiso e tsitsitseng.

U ka e sebelisa, empa o ile a romela Ha se seo e se etselitsoeng. Likarolo tsa tlhophiso e tsitsitseng li ke ke tsa pepesoa. Ho na le linako tse ngata:

Ha o hlophisa tlhophiso ho yaml, o tla fosa, o khalemele bahlahisi bakeng sa lentsoe mme o nahane hore li-nginx/haproxy configs, leha li sa hlophisoa hantle, li khuts'oane haholoanyane. Ke eona taba eo. Tlhophiso ea Nginx le Haproxy e entsoe bakeng sa ho hlophisoa ka letsoho, le o ile a romela bakeng sa moloko ho tloha khoutu. Tlhophiso eohle e hlalositsoe ho protobuf, ho e hlahisa ho tsoa ho lifaele tsa proto ho thata haholo ho etsa phoso.

Canary, b/g maemo a deployment le tse ling tse ngata hangata li sebelisoa feela ka tlhophiso e matla. Ha ke re taba ena e ke ke ea etsoa statically, kaofela rea ​​e etsa. Empa bakeng sa sena o hloka ho roala lithupa, leha e le efe ea li-balancers, ho o ile a romela ho kenyeletsa.

Mesebetsi eo Moemeli e leng oa bohlokoa ho eona:

  • Ho leka-lekanya sephethephethe tsamaisong e rarahaneng le e matla. Sena se kenyelletsa mesh ea lits'ebeletso, empa ha se eona feela.
  • Tlhokahalo ea ts'ebetso ea ts'ebetso e ajoang, tumello e rarahaneng kapa ts'ebetso e 'ngoe e fumanehang ho o ile a romela ho tsoa ka lebokoseng kapa ho sebelisoa ka mokhoa o bonolo, empa ho nginx/haproxy o hloka ho pota-potiloe ke lua le li-plugins tse belaetsang.

Ka bobeli, ha ho hlokahala, fana ka ts'ebetso e phahameng.

Joang mosebetsing ona

Envoy e ajoa ka li-binary feela joalo ka setšoantšo sa docker. Setšoantšo se se se ntse se na le mohlala oa tlhophiso e tsitsitseng. Empa re e thahasella feela bakeng sa ho utloisisa sebopeho.

envoy.yaml static tlhophiso

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

Phetoho e matla

Re batla tharollo ea bothata bofe? U ke ke ua kenya feela tlhophiso ea balancer ea mojaro tlas'a mojaro; mathata a "manyane" a tla hlaha:

  • Netefatso ya tlhophiso.

Sebopeho se ka ba seholo, se ka ba seholo haholo, haeba re ka se jara kaofela ka nako e le 'ngoe, menyetla ea phoso kae-kae ea eketseha.

  • Likhokahano tsa nako e telele.

Ha o qala momameli e mocha, o hloka ho hlokomela likhokahano tse sebetsang ho ea khale; haeba liphetoho li etsahala khafetsa 'me ho na le likhokahano tsa nako e telele, u tla tlameha ho batla ho sekisetsa. Lumela, kubernetes ingress ho nginx.

  • Litlhahlobo tse sebetsang tsa bophelo bo botle.

Haeba re na le litlhahlobo tse sebetsang tsa bophelo bo botle, re hloka ho li hlahloba habeli ka har'a tlhophiso e ncha pele re romella sephethephethe. Haeba ho na le makhasi a mangata, sena se nka nako. Hello haproxy.

Sena se rarolloa joang ka o ile a romelaKa ho kenya config ka matla, ho latela mohlala oa letamo, u ka e arola ka likarolo tse arohaneng 'me u se ke ua qala hape karolo e sa kang ea fetoha. Ka mohlala, momameli, e leng theko e boima ho reinitialize le ka seoelo liphetoho.

Moralo o ile a romela (ho tsoa faeleng e ka holimo) e na le mekhatlo e latelang:

  • momameli — momameli o leketlile ho ip/port e itseng
  • moamoheli oa sebele - moamoheli ea fumanehang ka lebitso la domain
  • tseleng - molao oa ho leka-lekanya
  • lesihla - sehlopha sa libaka tse holimo tse nang le litekanyetso tsa ho leka-lekanya
  • qetello - aterese ea mohlala e holimo

E 'ngoe le e' ngoe ea likarolo tsena hammoho le tse ling e ka tlatsoa ka matla; bakeng sa sena, tlhophiso e totobatsa aterese ea ts'ebeletso moo tlhophiso e tla amoheloa teng. Ts'ebeletso e ka ba REST kapa gRPC, gRPC e ka khethoa.

Litšebeletso li bitsoa ka ho latellana: LDS, VHDS, RDS, CDS le EDS. U ka kopanya tlhophiso e tsitsitseng le e matla, ka moeli oa hore mohloli o matla o ke ke oa hlalosoa ka mokhoa o tsitsitseng.

Bakeng sa mesebetsi e mengata, ho lekane ho kenya tšebetsong lits'ebeletso tse tharo tsa ho qetela, li bitsoa ADS (Aggregated Discovery Service), java 'me u ee ho na le ts'ebetsong e seng e entsoe ea gRPC dataplane eo ho eona u hlokang feela ho tlatsa lintho tse tsoang mohloling oa hau.

Sebopeho se etsoa ka mokhoa o latelang:

envoy.yaml tlhophiso e matla

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

Qalong o ile a romela ka tlhophiso ena, e tla hokela sefofaneng sa taolo ebe o leka ho kopa tlhophiso ea RDS, CDS le EDS. Mokhoa oa tšebelisano 'moho o hlalosoa joang mona.

Ka bokhutšoane, o ile a romela e romella kopo e bonts'ang mofuta oa sesebelisoa se kopuoang, mofuta le liparamente tsa node. Ho arabela, e fumana sesebelisoa le mofuta; haeba mofuta oa sefofane sa taolo o sa fetoha, ha o arabe.
Ho na le likhetho tse 4 tsa puisano:

  • Molapo o le mong oa gRPC bakeng sa mefuta eohle ea lisebelisoa, boemo bo felletseng ba sesebelisoa bo romelloa.
  • Melapo e arohaneng, boemo bo tletseng.
  • Molapo o le mong, boemo bo ntseng bo eketseha.
  • Melapo e arohaneng, boemo bo ntseng bo eketseha.

Keketseho ea xDS e u lumella ho fokotsa sephethephethe lipakeng tsa sefofane sa taolo le o ile a romela, sena se bohlokoa bakeng sa litlhophiso tse kholo. Empa e thatafatsa tšebelisano; kopo e na le lethathamo la lisebelisoa bakeng sa ho ingolisa le ho ingolisa.

Mohlala oa rona o sebelisa ADS - molapo o le mong bakeng sa RDS, CDS, EDS le mokhoa o sa eketseng. Ho nolofalletsa mokhoa oa ho eketsa, o hloka ho hlakisa api_type: DELTA_GRPC

Kaha kopo e na le li-parameter tsa node, re ka romela lisebelisoa tse fapaneng ho sefofane sa taolo bakeng sa maemo a fapaneng o ile a romela, sena se loketse ho haha ​​​​mesh ea tšebeletso.

Iphuthumatsa

mabapi le o ile a romela ha u qala kapa ha u fumana tlhophiso e ncha ho tloha sefofaneng sa taolo, ts'ebetso ea ho futhumatsa lisebelisoa e qala. E arotsoe ka mofuthu oa bamameli le mofuthu oa lihlopha. Ea pele e qalisoa ha ho na le liphetoho ho RDS/LDS, ea bobeli ke CDS/EDS. Sena se bolela hore haeba feela melapo e ka holimo e fetoha, momameli ha a bōptjoe bocha.

Nakong ea ts'ebetso ea ho futhumatsa, lisebelisoa tse itšetlehileng ka tsona li lebeletsoe ho tloha sefofaneng sa taolo nakong ea nako. Haeba nako e felile, ho qala ho ke ke ha atleha mme momameli e mocha a ke ke a qala ho mamela boema-kepe.
Taelo ea ho qala: EDS, CDS, tlhahlobo e sebetsang ea bophelo bo botle, RDS, LDS. Ha tlhahlobo ea bophelo bo botle e lumelletsoe, sephethephethe se tla nyoloha feela ka mor'a tlhahlobo e le 'ngoe e atlehileng ea bophelo bo botle.

Haeba momameli a ne a bōpiloe bocha, ea khale e ea sebakeng sa DRAIN 'me e tla hlakoloa ka mor'a hore likhokahano tsohle li koaloe kapa nako ea nako e felile. --drain-time-s, metsotso e 10 ea kamehla.

E tla ntšetsoa pele.

Source: www.habr.com

Eketsa ka tlhaloso