Toscaire. 1. Réamhrá

Beannachtaí! Is alt gearr é seo a fhreagraíonn na ceisteanna: “cad is toscaire ann?”, “cén fáth a bhfuil gá leis?” agus "cá háit le tosú?".

Cad é seo

Is cothromóir L4-L7 é Toscaire atá scríofa i C++, dírithe ar ardfheidhmíocht agus infhaighteacht. Ar thaobh amháin, is analóg é seo ar bhealach éigin de nginx agus haproxy, atá inchomparáide ó thaobh feidhmíochta leo. Ar an láimh eile, tá sé dírithe níos mó ar ailtireacht microservice agus níl feidhmiúlacht aige níos measa ná java and go balancers, mar shampla zuul nó traefik.

Tábla comparáide haproxy/nginx/toscaire, ní mhaíonn sé gurb é an fhírinne iomlán é, ach tugann sé pictiúr ginearálta.

nginx
haprocsa
toscaire
traefik

réaltaí ar github
11.2k/scáthán
1.1k/scáthán
12.4k
27.6k

scríofa i
C
C
C + +
go

API
aon
soicéad amháin/bhrú
eitleán sonraí/tarraingt
tharraingt

seiceáil sláinte gníomhach
aon
yes
yes
yes

Oscailt rianaithe
breiseán seachtrach
aon
yes
yes

J.W.T.
breiseán seachtrach
aon
yes
aon

síneadh
Lua/C
Lua/C
Lua/C++
aon

Cad le haghaidh

Is tionscadal óg é seo, tá go leor rudaí in easnamh, cuid acu go luath alfa. Ach toscaire, freisin mar gheall ar a óige, ag forbairt go tapa agus cheana féin tá go leor gnéithe suimiúla: cumraíocht dinimiciúil, go leor scagairí réidh-déanta, comhéadan simplí do scríobh do scagairí féin.
Leanann réimsí iarratais uaidh seo, ach ar dtús tá 2 fhrithpatrún:

  • Reoil statach.

Is é fírinne an scéil go bhfuil i láthair na huaire i toscaire gan tacaíocht taisce. Tá na guys Google ag baint triail as seo a shocrú. Cuirfear an smaoineamh i bhfeidhm uair amháin i toscaire déanann na subtleties go léir (ceanntásca zúnna) a bhaineann le comhlíonadh RFC, agus le haghaidh feidhmiúcháin ar leith comhéadan. Ach faoi láthair ní alfa fiú é, tá an ailtireacht faoi chaibidil, PR oscailte (agus an t-alt PR á scríobh agam, froze an PR, ach tá an pointe seo fós ábhartha).

Go dtí seo, bain úsáid as nginx le haghaidh statach.

  • Cumraíocht statach.

Is féidir leat é a úsáid, ach toscaire Ní mar sin a cruthaíodh é. Ní nochtfar gnéithe i gcumraíocht statach. Tá go leor chuimhneacháin ann:

Nuair a bheidh tú ag déanamh eagarthóireachta ar an gcumraíocht in yaml, beidh dul amú ort, cuir an-bhéim ar na forbróirí as briathra agus sílim go bhfuil na cumraíochtaí nginx/haproxy, cé nach bhfuil siad chomh struchtúrtha, níos gonta. Sin é an pointe. Cruthaíodh cumraíocht Nginx agus Haproxy le haghaidh eagarthóireacht de láimh, agus toscaire le haghaidh giniúna ó chód. Tá cur síos ar an chumraíocht iomlán i protobuf, é a ghiniúint ó chomhaid proto i bhfad níos deacra botún a dhéanamh.

Is i gcumraíocht dhinimiciúil amháin a chuirtear cásanna imscartha Chanáracha, b/g agus go leor eile i bhfeidhm de ghnáth. Níl mé ag rá nach féidir é seo a dhéanamh go statach, déanaimid go léir é. Ach le haghaidh seo ní mór duit a chur ar crutches, in aon cheann de na balancers, i toscaire san áireamh.

Tascanna a bhfuil Toscaire fíor-riachtanach ina leith:

  • Cothromú tráchta i gcórais chasta agus dhinimiciúla. Áirítear leis seo an mogalra seirbhíse, ach ní gá gurb é an t-aon cheann é.
  • An gá atá le feidhmiúlacht rianaithe dáilte, údarú casta nó feidhmiúlacht eile atá ar fáil i toscaire amach as an mbosca nó curtha i bhfeidhm go caothúil, ach i nginx/haproxy ní mór duit a bheith timpeallaithe ag lua agus forlíontáin amhrasacha.

Soláthraíonn an dá cheann, más gá, ardfheidhmíocht.

Conas a oibríonn seo

Ní dhéantar Toscaire a dháileadh i ndénártha ach mar íomhá docker. Tá sampla de chumraíocht statach san íomhá cheana féin. Ach tá suim againn ann ach amháin chun tuiscint a fháil ar an struchtúr.

cumraíocht statach 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

Cumraíocht dhinimiciúil

Cén fhadhb atá á lorg againn le réiteach? Ní féidir leat cumraíocht an chothromóra ualaigh a athlódáil faoi ualach; tiocfaidh fadhbanna “beaga” chun cinn:

  • Bailíochtú cumraíochta.

Is féidir leis an config a bheith mór, is féidir é a bheith an-mhór, má táimid ró-ualach ar fad ag an am céanna, an seans earráid a mhéadú áit éigin.

  • Naisc fadsaoil.

Agus éisteoir nua á thosú, ní mór duit aire a thabhairt do na naisc atá ag rith ar an seancheann; má tharlaíonn athruithe go minic agus go bhfuil naisc fhadtéarmacha ann, beidh ort comhréiteach a lorg. Dia duit, kubernetes isteach ar nginx.

  • Seiceálacha sláinte gníomhacha.

Má tá seiceálacha sláinte gníomhacha againn, ní mór dúinn iad go léir a sheiceáil faoi dhó sa chumraíocht nua sula seolfar trácht. Má tá go leor in aghaidh srutha, tógann sé seo am. Dia duit haproxy.

Conas a réitítear é seo i toscaireTríd an config a luchtú go dinimiciúil, de réir an tsamhail linn snámha, is féidir leat é a roinnt ina chodanna ar leith agus gan an chuid nár athraigh a ath-thionscnamh. Mar shampla, éisteoir, atá costasach le hathinsint agus is annamh a athraíonn.

Cumraíocht toscaire (ón gcomhad thuas) na heintitis seo a leanas:

  • éisteoir — éisteoir ar crochadh ar IP/port ar leith
  • óstach fíorúil - óstach fíorúil de réir ainm fearainn
  • bealach - riail chothromaíochta
  • braisle — grúpa réamhtheachtacha le paraiméadair chothromaithe
  • críochphointe — seoladh shampla in aghaidh an tsrutha

Is féidir gach ceann de na haonáin seo agus roinnt eile a líonadh isteach go dinimiciúil; chuige seo, sonraíonn an chumraíocht seoladh na seirbhíse óna bhfaighfear an chumraíocht. Is féidir leis an tseirbhís a bheith REST nó gRPC, is fearr gRPC.

Ainmnítear na seirbhísí faoi seach: LDS, VHDS, RDS, CDS agus EDS. Is féidir leat cumraíocht statach agus dhinimiciúil a chomhcheangal, leis an teorainn nach féidir acmhainn dhinimiciúil a shonrú in acmhainn statach.

I gcás fhormhór na dtascanna, is leor na trí sheirbhís dheireanacha a chur i bhfeidhm, tugtar ADS (Seirbhís Fionnachtana Comhiomlánaithe) orthu, le haghaidh Java agus téigh go bhfuil cur i bhfeidhm réidh-déanta de dataplane gRPC inar gá duit a líonadh isteach na rudaí ó do fhoinse.

Tá an chumraíocht san fhoirm seo a leanas:

cumraíocht dhinimiciúil 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

Ag am tosaithe toscaire Leis an gcumraíocht seo, nascfaidh sé leis an eitleán rialaithe agus déanfaidh sé iarracht cumraíocht RDS, CDS agus EDS a iarraidh. Déantar cur síos ar an gcaoi a dtarlaíonn an próiseas idirghníomhaíochta anseo.

I mbeagán focal, toscaire cuireann sé iarratas a léiríonn an cineál acmhainne atá á hiarraidh, an leagan agus paraiméadair an nód. Mar fhreagra, faigheann sé acmhainn agus leagan; mura bhfuil an leagan ar an eitleán rialaithe athraithe, ní fhreagraíonn sé.
Tá 4 rogha idirghníomhaíochta ann:

  • Sruth amháin gRPC do gach cineál acmhainní, seoltar stádas iomlán na hacmhainne.
  • Sruthanna ar leith, riocht iomlán.
  • Sruth amháin, staid incriminteach.
  • Sruthanna ar leith, staid incriminteach.

Ceadaíonn xDS incriminteach duit trácht a laghdú idir an eitleán rialaithe agus toscaire, tá sé seo ábhartha le haghaidh cumraíochtaí móra. Ach cuireann sé casta ar an idirghníomhaíocht; tá liosta acmhainní san iarratas chun díliostáil agus liostáil.

Úsáideann ár sampla ADS - sruth amháin le haghaidh RDS, CDS, EDS agus modh neamh-incriminteach. Chun mód incriminteach a chumasú, ní mór duit a shonrú api_type: DELTA_GRPC

Ós rud é go bhfuil paraiméadair nód san iarratas, is féidir linn acmhainní éagsúla a sheoladh chuig an eitleán rialaithe le haghaidh cásanna éagsúla toscaire, tá sé seo áisiúil chun mogalra seirbhíse a thógáil.

Te suas

Ar toscaire ag am tosaithe nó nuair a fhaigheann cumraíocht nua ón eitleán rialaithe, seoltar an próiseas téamh acmhainní. Tá sé roinnte ina warmup éisteoir agus warmup braisle. Seoltar an chéad cheann nuair a bhíonn athruithe ar RDS/LDS, agus seoltar an dara ceann nuair a bhíonn CDS/EDS. Ciallaíonn sé seo mura n-athraíonn ach sruthanna in aghaidh srutha, ní athchruthaítear an t-éisteoir.

Le linn an phróisis téimh, táthar ag súil le hacmhainní cleithiúnacha ón eitleán rialaithe le linn an ama istigh. Má tharlaíonn an teorainn ama, ní éireoidh leis an tosaithe agus ní thosóidh an t-éisteoir nua ag éisteacht ar an bport.
Ordú tosaigh: EDS, CDS, seiceáil gníomhach sláinte, RDS, LDS. Agus seiceálacha sláinte gníomhacha cumasaithe, ní rachaidh an trácht in aghaidh an tsrutha ach amháin tar éis seiceáil sláinte rathúil amháin.

Má athchruthaíodh an t-éisteoir, téann an seancheann isteach sa staid DRAIN agus scriosfar é nuair a dhúntar gach nasc nó nuair a théann an t-am istigh in éag --drain-time-s, réamhshocraithe 10 nóiméad.

Le leanúint.

Foinse: will.com

Add a comment