Internuntius. 1. Introductio

Salvete! Articulus brevis est qui interrogata respondet: "quid est legatus?", "quid opus est?" et "ubi committitur?".

Quid est hoc,

Internuntius est librarius L4-L7 in C ++, editus in agendis et promptitudinis intentis. Ex altera parte, hoc quodammodo analogum est nginx et haproxy, quod illis comparandum est. Ex altera parte, magis ad architecturae microservicium dirigitur et functionem non deteriorem quam Java et librarios, ut zuul vel traefik, habet.

Comparatio tabulae haproxy/nginx/legati, non veritatem absolutam esse affirmat, sed imaginem generalem praebet.

nginx
haproxy
missus
traefik

stellae in github
11.2k/miror
1.1k/miror
12.4k
27.6k

scriptum in-
C
C
C ++
go

API
no
ostium tabernaculi tantum / dis
dataplane / viverra
trahere

active healthcheck
no
yes
yes
yes

Open typum
externum plugin
no
yes
yes

J.W.T.
externum plugin
no
yes
no

extensio
Lua/C
Lua/C
Luae/C++
no

quod

Hic est iuvenis consilium, multum est deesse, quaedam in primo alpha. Sed missus, etiam ob iuventutem suam, celeriter augescit ac iam multa iucunda lineamenta habet: conformatio dynamica, multae paratae fibrae, simplex interface ad scribendas proprias columellas.
Applicationis partes ex hoc sequuntur, sed primum sunt 2 antipattrae;

  • Statio casura.

Factum est in momento missus nullo caching auxilio. Google guys hoc conantur fix. Idea perficietur semel in missus omnes argutiae (zoo capitis) RFC obsequii, et pro certis exsecutionibus interfaciem faciunt. Sed nunc ne alpha, de architectura agitur, PR apertum (dum scribebat PR articulus, PR adligat, sed hoc punctum adliuc pertinet).

Nunc enim nginx pro statice utuntur.

  • Configuratio static.

Uti potes, sed missus Ut non quam erat. Features in configuratione stata non patebunt. Multa momenta;

Cum figuram in yaml emendo, erraberis, tincidunt verbositatis obiurgare et nginx/haproxy configiones, etsi minus structas, breviores esse putes. Id punctum. Configuratio Nginx et Haproxy facta est ad manum emendi, et missus ad generationem ex codice. Configuratio tota describitur in protobuf *multo difficilius est errare.

Canariae, b/g missiones instruere et multo magis normaliter solum in configuratione dynamica perficiuntur. Non dico hoc stabiliter fieri posse, omnes facimus. Sed pro hoc debes fusum induere in quolibet librario, in missus comprehendo.

Munus quod Legatus pernecessarius est;

  • Negotiatio conpensationem in systematibus complexis et dynamicis. Hoc reticulum includit, sed non necessario solum.
  • Necessitas distribuitur excandescentis functionis, multiplicis auctoritatis vel alterius functionis quae in promptu est missus ex cista vel commodius perficiatur, sed in nginx/haproxy circumiri debes a lua et dubiis plugins.

Uterque, si opus sit, altam observantiam praebeat.

Quam facit hoc opus

Legatus in binarios tantum distribuitur sicut imago doatrina. Imago iam exemplum figurae statice continet. Sed in ea solum quaerimus structuram intelligendi.

envoy.yaml configuratione stabilis

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

Dynamic configuratione

Quid problema solutionem quaerimus? Non potes modo reload oneris configurationis librariae sub onere: "parvae" difficultates orientur:

  • Configurationis sanatio.

Mando amplum esse potest, amplissimum esse potest, si eam simul oneremus, casus erroris alicubi crescat.

  • Longaevus hospites.

Cum novum auditorem initialem facias, nexus qui in veteri currendo curare debes, si mutationes pluries fiunt et nexus diuturnae sunt, compromissum debebis quaerere. Salve, kubernetes ingressu in nginx.

  • Active valetudo compescit.

Si valetudinem activam habemus, omnes in novo config antequam negotiationem mittamus, duplicare necesse est. Aliquam sit amet suscipit nisi, id tempus quam. Salve haproxy.

Quomodo hoc certum est? missusdynamice config oneratisque, iuxta exemplar piscinae, eam dividere potes in partes separatas et non inchoare illam partem quae non mutata est. Exempli gratia, auditor, quod carum est, innovare et raro mutat.

configuratione missus (e tabella supra) sequentia habet:

  • audientis - auditorem pendentem in propria IP / portum
  • virtualis exercitum - virtualis hospes ab domain nomen
  • route - regulae conpensatione
  • botrum portassent - coetus fluminum conpensatione parametri
  • endpoint - flumine exempli electronica

Unaquaeque haec entia plus quaedam alia dynamice compleri possunt: ​​hoc enim configuratione denotat orationem serviendi unde recipietur config. Ministerium potest esse CETERA vel gRPC, gRPC potior.

Servitia respective nominantur: LDS, VHDS, RDS, CDS et EDS. Potes conformationem static et dynamicam coniungere, cum limitatione quam resource dynamicae non potest definiri in statice.

Ad pleraque officia, satis est ad tres proximas operas efficiendas, vocantur ADS (Aggregated Service Inventio), pro. Java et ite ad exsecutionem gRPC datae plani paratae, in qua solum opus est ut obiectis ex fonte tuo impleas.

Configuratio hanc formam accipit:

envoy.yaml dynamic configuratione

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

Quando vos satus missus cum hac config, coniunget cum plano moderante et conetur petere configurationem RDS, CDS et EDS. Quomodo commercium processus describitur hic.

In brevi, missus petitionem mittit rogatum indicans genus subsidii petitum, versionem et parametri nodi. Respondens accipit auxilium et versionem: si versio in dicione plane mutata non est, non respondet.
Sunt IV commercium optiones:

  • Unus grRPC rivus ad omnia genera opum, plenus status subsidii mittitur.
  • Separate rivos, plena conditio.
  • Fluvius unus, incremental status.
  • Flumina separata, incrementalia publica.

Incremental xDS sino vos reducere commercium inter planum et imperium missushoc pertinet ad magnas figuras. Sed commercium implicat, petitio continet elenchum facultatum in subscriptione et subscriptione.

Exemplar nostrum utitur ADS - unus amnis pro RDS, CDS, EDS et modo non-incrementali. Ut incremental modus, specificare debes api_type: DELTA_GRPC

Cum petitio parametros nodi contineat, varias facultates ad planum moderandum pro diversis instantias mittere possumus missushaec apta reticulum construendo.

warmup

In missus ad satus vel cum novam configurationem e plano moderante accipiendo, processus calefactionis subsidii educitur. Distinguitur in auditorem fermentum et botrum fermentum. Prima movetur cum mutationes sunt in RDS/LDS, secunda cum CD/EDS. Hoc significat, si modo fluvii mutant, auditor non recreatur.

In processu fermentum, subsidia dependentia expectantur a plano moderatio per timeout. Si tempus incidit, initialization felix non erit et novus auditor non incipiet auscultare in portu.
Ordo initialization: EDS, CDS, activae valetudinis perscriptio, RDS, LDS. Cum activae valetudinis causa impeditur, commercium adverso flumine tantum post unam bonam valetudinem sustinuit.

Si auditor recreatus est, vetus vetus in statum exhaurietur et delebitur postquam omnes nexus claudentur vel exspirat timeout --drain-time-s, defaltam 10 minuta.

Tertia pars sequetur.

Source: www.habr.com