iraka. 1. Fampidirana

Miarahaba! Ity dia lahatsoratra fohy mamaly ny fanontaniana hoe: "Inona no atao hoe iraka?", "Nahoana no ilaina?" ary "aiza no hanombohana?".

Inona izany

Envoy dia mpandrindra L4-L7 voasoratra ao amin'ny C ++, mifantoka amin'ny fampisehoana avo lenta sy ny fahafahana. Amin'ny lafiny iray, amin'ny lafiny iray dia mitovy amin'ny nginx sy haproxy izany, azo ampitahaina amin'ny fampisehoana azy ireo. Amin'ny lafiny iray, miompana kokoa amin'ny maritrano microservice izy io ary manana fiasa tsy ratsy noho ny java sy go balancers, toy ny zuul na traefik.

Tabilao fampitahana ny haproxy/nginx/envoy, tsy milaza ny tenany ho fahamarinana tanteraka, fa manome sary ankapobeny.

nginx
haproxy
iraka
traefik

kintana amin'ny github
11.2k/fitaratra
1.1k/fitaratra
12.4k
27.6k

voasoratra ao
C
C
C ++
go

API
tsy misy
socket/tosika ihany
dataplane/misintona
Sintony

active healthcheck
tsy misy
Eny
Eny
Eny

Open tracing
plugin ivelany
tsy misy
Eny
Eny

J.W.T.
plugin ivelany
tsy misy
Eny
tsy misy

fanitarana
Lua/C
Lua/C
Lua/C++
tsy misy

What for

Tetikasa tanora ity, betsaka ny zavatra tsy hita, ny sasany amin'ny alpha voalohany. SAINGY iraka, noho ny fahatanorany ihany koa, dia mivoatra haingana ary efa manana endri-javatra mahaliana maro: fanamafisana mavitrika, sivana maro efa vita, interface tsara ho an'ny fanoratana ny sivanao manokana.
Ny faritra fampiharana dia manaraka avy amin'izany, fa voalohany misy antipatterns 2:

  • Static recoil.

Ny zava-misy dia amin'izao fotoana izao ao amin'ny iraka tsy misy fanohanana cache. Manandrana izany ry zalahy Google to fix. Ny hevitra dia hampiharina indray mandeha iraka Ny santionany rehetra (lohatenin'ny zoo) momba ny fanarahan-dalàna RFC, ary ho an'ny fampiharana manokana dia manao interface. Saingy amin'izao fotoana izao dia tsy alpha akory, ny architecture dia eo am-pandinihana, PR misokatra (raha nanoratra ny lahatsoratra PR aho dia nivaingana ny PR, saingy mbola manan-danja io teboka io).

Amin'izao fotoana izao, ampiasao nginx ho an'ny statika.

  • Fikirakirana static.

Azonao ampiasaina izany, fa iraka Tsy izany no namoronana azy. Tsy haseho ireo endri-javatra amin'ny tefy static. Misy fotoana maro:

Rehefa manitsy ny fanitsiana ao amin'ny yaml ianao dia ho diso hevitra, teneniny ireo mpamorona amin'ny teny tsy misy dikany ary mieritreritra fa ny configs nginx/haproxy, na dia tsy dia misy rafitra aza, dia fohy kokoa. Izany no hevitra. Ny fanamafisana ny Nginx sy Haproxy dia noforonina ho an'ny fanitsiana amin'ny tanana, ary iraka ho an'ny taranaka avy amin'ny code. Voafaritra ao amin'ny protobuf, ny famoronana azy avy amin'ny rakitra proto dia sarotra kokoa ny manao fahadisoana.

Canary, b/g scenario deployment sy ny maro hafa dia tsy ampiharina afa-tsy amin'ny endrika mavitrika. Izaho tsy miteny hoe tsy azo atao statique izany fa samy manao an'izany daholo. Fa ho an'izany dia mila mametraka tehina ianao, amin'ny iray amin'ireo mpifandanja, in iraka ao anatin'izany.

Asa izay tena ilain'ny iraka:

  • Fifandanjan'ny fifamoivoizana amin'ny rafitra sarotra sy mavitrika. Anisan'izany ny serivisy serivisy, saingy tsy voatery ho iray ihany.
  • Ny filàna fampiasa tracing zaraina, fanomezan-dàlana sarotra na fiasa hafa misy ao iraka ivelan'ny boaty na azo ampiharina, fa amin'ny nginx/haproxy dia mila voahodidin'ny lua sy plugins mampiahiahy ianao.

Samy, raha ilaina, dia manome fampisehoana avo lenta.

Inona no manao izany asa

Ny iraka dia zaraina amin'ny binary fotsiny ho sary docker. Ny sary dia efa misy ohatra iray amin'ny fikirakirana static. Saingy ny fahatakarana ny rafitra ihany no liana amin'izany.

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

Fikirakirana dinamika

Inona no olana tadiavintsika vahaolana? Tsy azonao atao ny mamerina mamerina fotsiny ny fampifanarahana ny mpanelanelana entana eo ambany enta-mavesatra; Hipoitra ny olana "kely":

  • Fanamarinana config.

Ny config dia mety ho lehibe, mety ho lehibe be, raha be loatra ny entana indray mandeha dia mitombo ny mety hisian'ny fahadisoana any ho any.

  • Fifandraisana maharitra.

Rehefa manomboka mpihaino vaovao ianao dia mila mikarakara ny fifandraisana mandeha amin'ny taloha; raha misy fiovana mitranga matetika ary misy fifandraisana maharitra, dia tsy maintsy mitady marimaritra iraisana ianao. Salama, miditra amin'ny nginx ny kubernetes.

  • Fanamarinana ara-pahasalamana mavitrika.

Raha manana fisavana ara-pahasalamana mavitrika isika dia mila manamarina azy rehetra ao amin'ny config vaovao alohan'ny handefasana fifamoivoizana. Raha betsaka ny any ambony dia mila fotoana izany. Salama haproxy.

Ahoana no hamahana izany amin'ny irakaAmin'ny alàlan'ny famenoana ny config amin'ny fomba mavitrika, araka ny modely dobo, azonao atao ny mizara azy ho faritra samihafa ary tsy mamerina ny ampahany tsy niova. Ohatra, mpihaino iray, izay lafo vidy ny famerenana indray ary zara raha miova.

fanahafana iraka (avy amin'ny rakitra etsy ambony) dia manana ireto singa manaraka ireto:

  • mpihaino - mpihaino mihantona amin'ny ip/port manokana
  • mpampiantrano virtoaly - mpampiantrano virtoaly amin'ny anaran'ny sehatra
  • lalana - fitsipika mampifandanja
  • sampahom-boaloboka - vondron'olona ambony misy masontsivana mampifandanja
  • endpoint - adiresin'ny ohatra ambony

Ny tsirairay amin'ireo sampan-draharaha ireo miaraka amin'ny hafa dia azo fenoina amin'ny fomba mavitrika; noho izany, ny fanamafisana dia mamaritra ny adiresin'ny serivisy izay handraisana ny config. Ny serivisy dia mety ho REST na gRPC, ny gRPC no tsara kokoa.

Ny serivisy dia nomena anarana tsirairay: LDS, VHDS, RDS, CDS ary EDS. Azonao atao ny manambatra ny fikirakirana static sy dynamique, miaraka amin'ny famerana fa tsy azo faritana amin'ny static ny loharano dynamique.

Ho an'ny ankamaroan'ny asa dia ampy ny mampihatra ireo serivisy telo farany, antsoina hoe ADS (Service Discovery Aggregated), java- ary mandehana misy fampiharana efa vonona ny gRPC dataplane izay ilainao hamenoana ireo zavatra avy amin'ny loharanonao.

Ny config dia maka ity endrika manaraka ity:

envoy.yaml dynamic configuration

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

Amin'ny fanombohana iraka miaraka amin'ity config ity dia hifandray amin'ny fiaramanidina fanaraha-maso izy ary manandrana mangataka ny fanamafisana RDS, CDS ary EDS. Lazalazaina ny fomba fizotry ny fifandraisana eto.

Raha afohezina, iraka mandefa fangatahana manondro ny karazana loharano angatahina, ny dikan-teny sy ny mason'ny node. Ho setrin'izany dia mahazo loharano sy dikan-teny izy; raha tsy niova ny dikan-teny amin'ny fiaramanidina fanaraha-maso dia tsy mamaly izy.
Misy safidy fifandraisana 4:

  • Iray gRPC stream ho an'ny karazana loharanon-karena rehetra, ny sata fenon'ny loharano dia alefa.
  • Renirano misaraka, fepetra feno.
  • Iray renirano, fanjakana incremental.
  • Renirano misaraka, fanjakana incremental.

Ny incremental xDS dia ahafahanao mampihena ny fifamoivoizana eo amin'ny fiaramanidina fanaraha-maso sy iraka, mifanentana amin'ny fanamafisana lehibe izany. Saingy manasarotra ny fifandraisana izany; ny fangatahana dia misy lisitr'ireo loharanon-karena ho an'ny tsy famandrihana sy famandrihana.

Ny ohatra ataontsika dia mampiasa ADS - stream iray ho an'ny RDS, CDS, EDS ary fomba tsy misy incremental. Mba hahafahan'ny mode incremental dia mila mamaritra ianao api_type: DELTA_GRPC

Satria ny fangatahana dia misy masontsivana node, afaka mandefa loharano samihafa amin'ny fiaramanidina fanaraha-maso isika amin'ny tranga samihafa iraka, mety amin'ny fananganana harato serivisy izany.

Hetsika famanam-batana

amin'ny iraka amin'ny fanombohana na rehefa mahazo fanefena vaovao avy amin'ny fiaramanidina fanaraha-maso, dia atomboka ny fizotran'ny fanafanana loharano. Izy io dia mizara ho fampiononana mpihaino sy fanamainana cluster. Ny voalohany dia alefa rehefa misy fiovana ao amin'ny RDS/LDS, ny faharoa rehefa CDS/EDS. Midika izany fa raha ny any ambony ihany no miova dia tsy averina ny mpihaino.

Mandritra ny fizotran'ny fanafanana, ny loharanon-karena miankina dia andrasana avy amin'ny fiaramanidina fanaraha-maso mandritra ny fotoana fiatoana. Raha tonga ny fe-potoana dia tsy hahomby ny fanombohana ary tsy hanomboka hihaino eo amin'ny seranan-tsambo ny mpihaino vaovao.
Filaharana fanombohana: EDS, CDS, fitiliana ara-pahasalamana mavitrika, RDS, LDS. Miaraka amin'ny fanaraha-maso ara-pahasalamana mavitrika dia hiakatra ny fifamoivoizana raha tsy aorian'ny fisavana ara-pahasalamana mahomby.

Raha noforonina indray ny mpihaino, dia miditra amin'ny DRAIN ilay taloha ary ho voafafa rehefa mikatona ny fifandraisana rehetra na tapitra ny fe-potoana. --drain-time-s, default 10 minitra.

To continue.

Source: www.habr.com

Add a comment