Onye ozi. 1. Okwu mmalite

Ekele! Nke a bụ akụkọ dị mkpirikpi nke na-aza ajụjụ ndị a: “gịnị bụ onye ozi?”, “Gịnị mere o ji dị ya mkpa?” na "ebee ka ịmalite?".

Kedu ihe bụ nke a

Onye ozi bụ L4-L7 balancer nke edere na C++, lekwasịrị anya na arụmọrụ dị elu yana nnweta. N'otu aka ahụ, nke a bụ n'ụzọ ụfọdụ analogue nke nginx na haproxy, iji tụnyere arụmọrụ ha. N'aka nke ọzọ, ọ na-adabere na ụlọ ọrụ microservice ma nwee ọrụ adịghị njọ karịa java na-aga n'ihu, dị ka zuul ma ọ bụ traefik.

Ntụle tebụl nke haproxy / nginx / envoy, ọ naghị ekwu na ọ bụ eziokwu zuru oke, kama ọ na-enye nkọwa zuru ezu.

nginx
haproxy
zitere
traefik

kpakpando na github
11.2k / mirror
1.1k / mirror
12.4k
27.6k

edere na
C
C
C +
go

API
ọ dịghị
sọket naanị/pịa
ụgbọ elu data/ dọrọ
Dọọ

nlele ahụike na-arụ ọrụ
ọ dịghị
ee
ee
ee

Mepee nchọta
ngwa mgbakwunye mpụga
ọ dịghị
ee
ee

J.W.T.
ngwa mgbakwunye mpụga
ọ dịghị
ee
ọ dịghị

ndọtị
Lua/C
Lua/C
Lua/C++
ọ dịghị

Ntak-a

Nke a bụ ọrụ ntorobịa, enwere ọtụtụ ihe na-efu, ụfọdụ na mbido alfa. Ma zitere, nakwa n'ihi ntorobịa ya, na-etolite ngwa ngwa ma nweelarị ọtụtụ atụmatụ na-adọrọ mmasị: nhazi ike, ọtụtụ ihe nzacha dị njikere, interface dị mfe maka ide ihe nzacha gị.
Mpaghara ngwa na-eso nke a, mana nke mbụ enwere ụzọ mgbochi abụọ:

  • Nkwụghachi azụ static.

Nke bụ eziokwu bụ na n'oge a zitere enweghị nkwado caching. Ụmụ okorobịa Google na-anwale nke a idozi. A ga-emejuputa echiche ahụ otu ugboro zitere ihe aghụghọ niile (ndị isi ụlọ zoo) nke nnabata RFC, yana maka mmejuputa a kapịrị ọnụ na-eme interface. Ma ugbu a, ọ bụghị ọbụna alfa, a na-akparịta ụka banyere ụkpụrụ ụlọ, PR meghere (mgbe m na-ede akụkọ PR, PR kwụsịrị, mana isi ihe a ka dị mkpa).

Maka ugbu a, jiri nginx maka statics.

  • Nhazi static.

Ị nwere ike iji ya, ma zitere Nke ahụ abụghị ihe e kere ya. Agaghị ekpughe atụmatụ dị na nhazi kwụ ọtọ. Enwere ọtụtụ oge:

Mgbe ị na-edezi nhazi na yaml, ị ga-ehie ụzọ, baara ndị mmepe mba maka ikwu okwu ma chee na nginx/haproxy configs, n'agbanyeghị na ha ahazibeghị ya, dị nkenke. Nke ahụ bụ isi ihe. E mepụtara nhazi nke Nginx na Haproxy maka iji aka dezie, na zitere maka ọgbọ site na koodu. A kọwara nhazi niile n'ime protobuf, imepụta ya site na faịlụ proto na-esikarị ike ime ndudue.

Canary, b/g ntinye ọnọdụ na ọtụtụ ndị ọzọ ka a na-emejuputa atumatu naanị na nhazi siri ike. Anaghị m ekwu na enweghị ike ịme nke a n'ụzọ ziri ezi, anyị niile na-eme ya. Ma maka nke a, ị ga-etinye na crutches, na nke ọ bụla nke balancers, na zitere gụnyere.

Ọrụ ndị onye nnọchi anya dị mkpa maka:

  • Ịhazi okporo ụzọ na usoro mgbagwoju anya na nke siri ike. Nke a gụnyere ntupu ọrụ, mana ọ bụghị naanị ya.
  • Mkpa maka ọrụ ịchụ nta nkesa, ikike mgbagwoju anya ma ọ bụ ọrụ ndị ọzọ dị na ya zitere site na igbe ma ọ bụ mejuputa ya nke ọma, mana na nginx/haproxy, ị ga-achọ ka lua na plugins gbara gị gburugburu.

Abụọ, ọ bụrụ na ọ dị mkpa, na-enye ọrụ dị elu.

Olee otú nke a na-arụ ọrụ

A na-ekesa onye ozi na ọnụọgụ abụọ naanị ka onyonyo docker. Onyonyo a enweelarị ihe atụ nke nhazi static. Mana anyị nwere mmasị na ya naanị maka ịghọta usoro ahụ.

envoy.yaml static nhazi

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

Nhazi dị omimi

Kedu nsogbu anyị na-achọ ngwọta ya? Ịnweghị ike ibugharị nhazi nhazi nke ibu n'okpuru ibu; nsogbu "obere" ga-ebili:

  • Nkwenye nhazi.

Nhazi ahụ nwere ike buru ibu, ọ nwere ike buru ibu, ọ bụrụ na anyị ebufe ya n'otu oge, ohere nke njehie ebe na-abawanye.

  • Njikọ ogologo ndụ.

Mgbe ị na-amalite onye na-ege ntị ọhụrụ, ịkwesịrị ilekọta njikọ ndị na-agba ọsọ na nke ochie; ọ bụrụ na mgbanwe na-eme ugboro ugboro ma enwere njikọ dị ogologo, ị ga-achọ nkwekọrịta. Ndewo, kubernetes ingress na nginx.

  • Nyocha ahụike na-arụ ọrụ.

Ọ bụrụ na anyị nwere nlele ahụike na-arụsi ọrụ ike, anyị kwesịrị ịlele ha niile na nhazi ọhụrụ tupu izipu okporo ụzọ. Ọ bụrụ na e nwere ọtụtụ n'elu, nke a na-ewe oge. Ndewo haproxy.

Kedu ka esi edozi nke a zitereSite n'ịkwado nhazi ahụ n'ụzọ dị egwu, dị ka ụdị ọdọ mmiri si dị, ị nwere ike kewaa ya n'ime akụkụ dị iche iche ma ghara ịmaliteghachi akụkụ nke na-agbanwebeghị. Dịka ọmụmaatụ, onye na-ege ntị, nke dị oke ọnụ iji reinitialize na adịkarịghị agbanwe.

Nhazi zitere (site na faịlụ dị n'elu) nwere ihe ndị a:

  • na-ege ntị - onye na-ege ntị kwụgidere na otu ip/ọdụ ụgbọ mmiri
  • mebere onye ọbịa - mebere ọbịa site na ngalaba aha
  • ụzọ - itule iwu
  • ụyọkọ - otu nke upstreams nwere itule parameters
  • njedebe - adreesị ihe atụ elu

Nke ọ bụla n'ime ụlọ ọrụ ndị a gbakwunyere ụfọdụ ndị ọzọ nwere ike jupụta n'ike n'ike; maka nke a, nhazi ahụ na-akọwapụta adreesị ọrụ site na ebe a ga-enweta nhazi ahụ. Ọrụ ahụ nwere ike ịbụ REST ma ọ bụ gRPC, gRPC ka mma.

Akpọrọ aha ọrụ ndị a otu: LDS, VHDS, RDS, CDS na EDS. Ị nwere ike ijikọta nhazi static na ike dị ike, yana njedebe na enweghị ike ịkọwapụta akụ na-agbanwe agbanwe na nke static.

Maka ọtụtụ ọrụ, o zuru ezu iji mejuputa ọrụ atọ ikpeazụ, a na-akpọ ha ADS (Aggregated Discovery Service), maka java wee gaa na enwere mmejuputa gRPC dataplane emebere nke ị ga-eji mejupụta ihe ndị sitere na isi mmalite gị.

Nhazi ahụ na-ewere ụdị a:

envoy.yaml nhazi ike

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

Na mmalite zitere na nhazi a, ọ ga-ejikọta na ụgbọ elu njikwa wee gbalịa ịrịọ nhazi RDS, CDS na EDS. A kọwara etu usoro mmekọrịta si eme ebe a.

Na mpempe, zitere na-eziga arịrịọ na-egosi ụdị akụ a na-arịọ, ụdị na paramita nke ọnụ. Na nzaghachi, ọ na-enweta akụrụngwa na ụdị; ọ bụrụ na ụdị dị na ụgbọ elu njikwa agbanwebeghị, ọ naghị azaghachi.
Enwere nhọrọ mmekọrịta 4:

  • Otu iyi gRPC maka ụdị akụrụngwa niile, a na-eziga ọkwa zuru oke nke akụrụngwa ahụ.
  • iyi dị iche iche, ọnọdụ zuru oke.
  • Otu iyi, ọnọdụ mmụba.
  • iyi dị iche iche, ọnọdụ agbakwunyere.

Mmụba xDS na-enye gị ohere ibelata okporo ụzọ n'etiti ụgbọ elu njikwa na zitere, nke a dị mkpa maka nnukwu nhazi. Mana ọ na-akpaghasị mmekọrịta ahụ; arịrịọ ahụ nwere ndepụta akụrụngwa maka ịwepu aha na ịdenye aha.

Ihe atụ anyị na-eji ADS - otu iyi maka RDS, CDS, EDS na ọnọdụ anaghị abawanye. Iji mee ka ọnọdụ mgbakwunye, ịkwesịrị ịkọwapụta api_type: DELTA_GRPC

Ebe ọ bụ na arịrịọ ahụ nwere paramita ọnụ ọnụ, anyị nwere ike izipu akụrụngwa dị iche iche na ụgbọ elu njikwa maka oge dị iche iche zitere, nke a dị mma maka iwulite ntupu ọrụ.

Kpoo ahụ ọkụ

Na zitere na mmalite ma ọ bụ mgbe ị na-enweta nhazi ọhụrụ site na njikwa-ụgbọ elu, a na-amalite usoro ikpo ọkụ ihe onwunwe. E kewara ya na ikpo ọkụ na-ege ntị na ikpo ọkụ. Emere nke mbụ mgbe enwere mgbanwe na RDS/LDS, nke abụọ mgbe CDS/EDS. Nke a pụtara na ọ bụrụ naanị n'elu mmiri na-agbanwe, a naghị emepụtaghachi onye na-ege ntị.

N'oge usoro ikpo ọkụ, a na-atụ anya ihe ndị dabere na ụgbọ elu na-achịkwa n'oge oge nkwụsị. Ọ bụrụ na oge agwụla, mmalite agaghị aga nke ọma na onye na-ege ntị ọhụrụ agaghị amalite ige ntị na ọdụ ụgbọ mmiri.
Usoro mmalite: EDS, CDS, nlele ahụike nọ n'ọrụ, RDS, LDS. Site na agbanyere nyocha ahụike na-arụ ọrụ, okporo ụzọ ga-arịgo elu naanị mgbe otu nyocha ahụike na-aga nke ọma.

Ọ bụrụ na emegharịrị onye na-ege ntị, nke ochie na-abanye na steeti DRAIN, a ga-ehichapụ ya ma emechiri njikọ niile ma ọ bụ oge agwụla. --drain-time-s, ndabara 10 nkeji.

Ka ga-aga n'ihu.

isi: www.habr.com

Tinye a comment