Cennad. 1. Rhagymadrodd

Cyfarchion! Erthygl fer yw hon sy’n ateb y cwestiynau: “beth yw cennad?”, “pam mae ei angen?” a "lle i ddechrau?".

Beth ydyw?

Mae Envoy yn gydbwyswr L4-L7 wedi'i ysgrifennu yn C++, sy'n canolbwyntio ar berfformiad uchel ac argaeledd. Ar y naill law, mae hwn mewn rhyw ffordd yn analog o nginx a haproxy, sy'n debyg o ran perfformiad iddynt. Ar y llaw arall, mae'n canolbwyntio'n fwy ar bensaernïaeth microwasanaeth ac mae ganddo ymarferoldeb nad yw'n waeth na chydbwysedd java a go, fel zuul neu traefik.

Tabl cymhariaeth o haproxy/nginx/cennad, nid yw'n honni ei fod yn wirionedd absoliwt, ond mae'n rhoi darlun cyffredinol.

nginx
haproxy
anfonwyd
traefik

sêr ar github
11.2k/drych
1.1k/drych
12.4k
27.6k

wedi ei ysgrifennu yn
C
C
C + +
go

API
dim
soced yn unig/gwthio
awyren data/tynnu
tynnu

gwiriad iechyd gweithredol
dim
ie
ie
ie

Olrhain agored
ategyn allanol
dim
ie
ie

Mae J.W.T.
ategyn allanol
dim
ie
dim

estyniad
Lua/C
Lua/C
Lua/C++
dim

Pam

Mae hwn yn brosiect ifanc, mae llawer o bethau ar goll, rhai yn alffa cynnar. Ond anfonwyd, hefyd oherwydd ei ieuenctid, yn datblygu'n gyflym ac mae ganddo lawer o nodweddion diddorol eisoes: cyfluniad deinamig, llawer o hidlwyr parod, rhyngwyneb syml ar gyfer ysgrifennu eich hidlwyr eich hun.
Mae meysydd cais yn dilyn o hyn, ond yn gyntaf mae 2 wrth-batrwm:

  • Adlam statig.

Y ffaith yw bod ar hyn o bryd yn anfonwyd dim cefnogaeth caching. Mae'r guys Google yn ceisio hyn trwsio. Bydd y syniad yn cael ei roi ar waith unwaith i mewn anfonwyd mae'r holl gynildeb (penawdau sw) o gydymffurfio â Chlwb Rygbi, ac ar gyfer gweithrediadau penodol yn creu rhyngwyneb. Ond am y tro nid yw hyd yn oed yn alffa, mae'r bensaernïaeth yn cael ei drafod, PR agored (tra roeddwn i'n ysgrifennu'r erthygl PR, fe rewodd y PR, ond mae'r pwynt yma dal yn berthnasol).

Am y tro, defnyddiwch nginx ar gyfer statigau.

  • Cyfluniad statig.

Gallwch ei ddefnyddio, ond anfonwyd Nid dyna beth y cafodd ei greu ar ei gyfer. Ni fydd nodweddion mewn cyfluniad statig yn cael eu hamlygu. Mae yna lawer o eiliadau:

Wrth olygu'r ffurfweddiad yn yaml, byddwch yn camgymryd, yn dirmygu'r datblygwyr am eiriau ac yn meddwl bod y ffurfweddau nginx/haproxy, er eu bod yn llai strwythuredig, yn fwy cryno. Dyna'r pwynt. Crëwyd cyfluniad Nginx a Haproxy i'w golygu â llaw, a anfonwyd am genhedlaeth o god. Disgrifir y cyfluniad cyfan yn protobuf, mae ei gynhyrchu o ffeiliau proto yn llawer anoddach i wneud camgymeriad.

Fel rheol, dim ond mewn ffurfweddiad deinamig y caiff senarios defnyddio Canari, b/g a llawer mwy eu gweithredu. Nid wyf yn dweud na ellir gwneud hyn yn statig, rydym i gyd yn ei wneud. Ond ar gyfer hyn mae angen i chi roi ar faglau, yn unrhyw un o'r balancers, yn anfonwyd gan gynnwys.

Tasgau y mae Cennad yn anhepgor ar eu cyfer:

  • Cydbwyso traffig mewn systemau cymhleth a deinamig. Mae hyn yn cynnwys y rhwyll gwasanaeth, ond nid dyma'r unig un o reidrwydd.
  • Yr angen am ymarferoldeb olrhain dosranedig, awdurdodiad cymhleth neu swyddogaeth arall sydd ar gael yn anfonwyd allan o'r bocs neu wedi'i weithredu'n gyfleus, ond yn nginx/haproxy mae angen i chi gael eich amgylchynu gan lu ac ategion amheus.

Mae'r ddau, os oes angen, yn darparu perfformiad uchel.

Sut mae hwn

Cennad yn cael ei ddosbarthu mewn deuaidd yn unig fel delwedd docwr. Mae'r ddelwedd eisoes yn cynnwys enghraifft o ffurfweddiad statig. Ond dim ond ar gyfer deall y strwythur y mae gennym ddiddordeb ynddo.

cyfluniad statig 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

Cyfluniad deinamig

Pa broblem ydyn ni'n chwilio am ateb iddi? Ni allwch ail-lwytho cyfluniad y cydbwysedd llwyth dan lwyth yn unig; bydd problemau “bach” yn codi:

  • Dilysiad cyfluniad.

Gall y ffurfwedd fod yn fawr, gall fod yn fawr iawn, os byddwn yn gorlwytho'r cyfan ar unwaith, mae'r siawns o gamgymeriad yn rhywle yn cynyddu.

  • Cysylltiadau hirhoedlog.

Wrth gychwyn gwrandäwr newydd, mae angen i chi ofalu am y cysylltiadau sy'n rhedeg ar yr hen un; os bydd newidiadau'n digwydd yn aml a bod cysylltiadau hirhoedlog, bydd yn rhaid i chi chwilio am gyfaddawd. Helo, kubernetes ingress ar nginx.

  • Gwiriadau iechyd gweithredol.

Os oes gennym wiriadau iechyd gweithredol, mae angen i ni wirio pob un ohonynt yn y ffurfwedd newydd cyn anfon traffig. Os oes llawer o bethau i fyny'r afon, mae hyn yn cymryd amser. Helo haproxy.

Sut mae hyn yn cael ei ddatrys yn anfonwydTrwy lwytho'r config yn ddeinamig, yn ôl y model pwll, gallwch ei rannu'n rhannau ar wahân a pheidio ag ail-gychwyn y rhan nad yw wedi newid. Er enghraifft, gwrandäwr, sy'n ddrud i'w ail-gychwyn ac anaml yn newid.

Ffurfweddiad anfonwyd (o'r ffeil uchod) yr endidau canlynol:

  • gwrandäwr — gwrandäwr yn hongian ar ip/porthladd penodol
  • gwesteiwr rhithwir - gwesteiwr rhithwir yn ôl enw parth
  • llwybr - rheol cydbwyso
  • clwstwr — grŵp o ffrydiau i fyny'r afon gyda pharamedrau cydbwyso
  • endpoint — cyfeiriad enghraifft i fyny'r afon

Gellir llenwi pob un o'r endidau hyn ynghyd â rhai eraill yn ddeinamig; ar gyfer hyn, mae'r ffurfweddiad yn nodi cyfeiriad y gwasanaeth lle bydd y ffurfwedd yn cael ei dderbyn. Gall y gwasanaeth fod yn REST neu gRPC, mae gRPC yn well.

Enwir y gwasanaethau yn y drefn honno: LDS, VHDS, RDS, CDS ac EDS. Gallwch gyfuno cyfluniad statig a deinamig, gyda'r cyfyngiad na ellir pennu adnodd deinamig mewn un statig.

Ar gyfer y rhan fwyaf o dasgau, mae'n ddigon i weithredu'r tri gwasanaeth olaf, fe'u gelwir yn ADS (Gwasanaeth Darganfod Cyfunol), ar gyfer Java ac ewch mae yna weithrediad parod o awyren ddata gRPC lle mae angen i chi lenwi'r gwrthrychau o'ch ffynhonnell.

Mae'r ffurfweddiad ar y ffurf ganlynol:

cyfluniad deinamig 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

Ar y cychwyn anfonwyd gyda'r ffurfwedd hon, bydd yn cysylltu â'r awyren reoli ac yn ceisio gofyn am ffurfweddiad RDS, CDS ac EDS. Disgrifir sut mae'r broses ryngweithio yn digwydd yma.

Yn fyr, anfonwyd yn anfon cais yn nodi'r math o adnodd y gofynnir amdano, fersiwn a pharamedrau'r nod. Mewn ymateb, mae'n derbyn adnodd a fersiwn; os nad yw'r fersiwn ar yr awyren reoli wedi newid, nid yw'n ymateb.
Mae 4 opsiwn rhyngweithio:

  • Un ffrwd GRPC ar gyfer pob math o adnoddau, mae statws llawn yr adnodd yn cael ei anfon.
  • Ffrydiau ar wahân, cyflwr llawn.
  • Un ffrwd, cyflwr cynyddrannol.
  • Ffrydiau ar wahân, cyflwr cynyddrannol.

Mae xDS cynyddrannol yn caniatáu ichi leihau traffig rhwng yr awyren reoli a anfonwyd, mae hyn yn berthnasol ar gyfer cyfluniadau mawr. Ond mae’n cymhlethu’r rhyngweithio; mae’r cais yn cynnwys rhestr o adnoddau ar gyfer dad-danysgrifio a thanysgrifio.

Mae ein hesiampl yn defnyddio ADS - un ffrwd ar gyfer RDS, CDS, EDS a modd nad yw'n gynyddrannol. Er mwyn galluogi modd cynyddrannol, mae angen i chi nodi api_type: DELTA_GRPC

Gan fod y cais yn cynnwys paramedrau nod, gallwn anfon gwahanol adnoddau i'r awyren reoli ar gyfer gwahanol achosion anfonwyd, mae hyn yn gyfleus ar gyfer adeiladu rhwyll gwasanaeth.

Cynhesu

Ar anfonwyd wrth gychwyn neu wrth dderbyn cyfluniad newydd o'r awyren reoli, mae'r broses cynhesu adnoddau yn cael ei lansio. Mae wedi'i rannu'n warmup gwrandäwr a warmup clwstwr. Mae'r cyntaf yn cael ei lansio pan fydd newidiadau yn y system RDS/LDS, a'r ail pan fydd CDS/EDS. Mae hyn yn golygu, os mai dim ond rhannau i fyny'r afon sy'n newid, ni chaiff y gwrandäwr ei ail-greu.

Yn ystod y broses gynhesu, disgwylir adnoddau dibynnol o'r awyren reoli yn ystod y terfyn amser. Os bydd y terfyn amser yn digwydd, ni fydd y cychwyn yn llwyddiannus ac ni fydd y gwrandäwr newydd yn dechrau gwrando ar y porthladd.
Gorchymyn cychwyn: EDS, CDS, gwiriad iechyd gweithredol, RDS, LDS. Gyda gwiriadau iechyd gweithredol wedi'u galluogi, dim ond ar ôl un gwiriad iechyd llwyddiannus y bydd traffig yn mynd i fyny'r afon.

Os cafodd y gwrandäwr ei ail-greu, mae'r hen un yn mynd i'r cyflwr DRAIN a bydd yn cael ei ddileu ar ôl i'r holl gysylltiadau gau neu pan ddaw'r terfyn amser i ben --drain-time-s, diofyn 10 munud.

I'w barhau.

Ffynhonnell: hab.com

Ychwanegu sylw