தூதுவர். 1. அறிமுகம்

வாழ்த்துக்கள்! "தூதர் என்றால் என்ன?", "அது ஏன் தேவை?" என்ற கேள்விகளுக்கு பதிலளிக்கும் ஒரு சிறிய கட்டுரை இது. மற்றும் "எங்கே தொடங்குவது?".

அது என்ன

Envoy என்பது C++ இல் எழுதப்பட்ட L4-L7 பேலன்சர் ஆகும், இது அதிக செயல்திறன் மற்றும் கிடைக்கும் தன்மையில் கவனம் செலுத்துகிறது. ஒருபுறம், இது ஒருவிதத்தில் nginx மற்றும் haproxy ஆகியவற்றின் அனலாக் ஆகும், இது செயல்திறனில் ஒப்பிடத்தக்கது. மறுபுறம், இது மைக்ரோ சர்வீஸ் கட்டமைப்பை நோக்கியதாக உள்ளது மற்றும் zuul அல்லது traefik போன்ற ஜாவா மற்றும் கோ பேலன்சர்களை விட மோசமான செயல்பாட்டைக் கொண்டுள்ளது.

haproxy/nginx/தூதர்களின் ஒப்பீட்டு அட்டவணை, இது முழுமையான உண்மை என்று கூறவில்லை, ஆனால் ஒரு பொதுவான படத்தை அளிக்கிறது.

Nginx
இல் haproxy
அனுப்பிய
traefik

கிதுப்பில் நட்சத்திரங்கள்
11.2k/கண்ணாடி
1.1k/கண்ணாடி
12.4k
27.6k

எழுதப்பட்டுள்ளது
C
C
சி ++
go

ஏபிஐ
எந்த
சாக்கெட் மட்டும்/தள்ளு
டேட்டாபிளேன்/இழுக்க
இழுக்க

செயலில் சுகாதார சோதனை
எந்த
ஆம்
ஆம்
ஆம்

திறந்த ட்ரேசிங்
வெளிப்புற சொருகி
எந்த
ஆம்
ஆம்

ஜே.டபிள்யூ.டி
வெளிப்புற சொருகி
எந்த
ஆம்
எந்த

நீட்டிப்பு
லுவா/சி
லுவா/சி
Lua/C++
எந்த

என்ன

இது ஒரு இளம் திட்டம், நிறைய விஷயங்கள் காணவில்லை, சில ஆரம்ப ஆல்பாவில் உள்ளன. ஆனாலும் அனுப்பிய, அதன் இளமை காரணமாக, வேகமாக வளர்ந்து வருகிறது மற்றும் ஏற்கனவே பல சுவாரஸ்யமான அம்சங்களைக் கொண்டுள்ளது: டைனமிக் உள்ளமைவு, பல ஆயத்த வடிப்பான்கள், உங்கள் சொந்த வடிப்பான்களை எழுதுவதற்கான எளிய இடைமுகம்.
பயன்பாட்டின் பகுதிகள் இதிலிருந்து பின்பற்றப்படுகின்றன, ஆனால் முதலில் 2 எதிர்ப்பு வடிவங்கள் உள்ளன:

  • நிலையான பின்னடைவு.

இந்த நேரத்தில் என்பதுதான் உண்மை அனுப்பிய கேச்சிங் ஆதரவு இல்லை. கூகுள் தோழர்கள் இதை முயற்சி செய்கிறார்கள் исправить. யோசனை ஒருமுறை செயல்படுத்தப்படும் அனுப்பிய RFC இணக்கத்தின் அனைத்து நுணுக்கங்களும் (மிருகக்காட்சிசாலை தலைப்புகள்), மற்றும் குறிப்பிட்ட செயலாக்கங்களுக்கு ஒரு இடைமுகத்தை உருவாக்குகிறது. ஆனால் இப்போது அது ஆல்பா கூட இல்லை, கட்டிடக்கலை விவாதத்தில் உள்ளது, PR திறந்த (நான் PR கட்டுரையை எழுதும் போது, ​​PR உறைந்தது, ஆனால் இந்த புள்ளி இன்னும் பொருத்தமானது).

இப்போதைக்கு, nginx ஐப் பயன்படுத்தவும்.

  • நிலையான கட்டமைப்பு.

நீங்கள் அதைப் பயன்படுத்தலாம், ஆனால் அனுப்பிய அதற்காக உருவாக்கப்பட்டதல்ல. நிலையான உள்ளமைவில் உள்ள அம்சங்கள் வெளிப்படாது. பல தருணங்கள் உள்ளன:

yaml இல் உள்ளமைவைத் திருத்தும்போது, ​​நீங்கள் தவறாகப் புரிந்துகொள்வீர்கள், டெவலப்பர்களை வார்த்தைகளால் திட்டுவீர்கள் மற்றும் nginx/haproxy configs, குறைவான கட்டமைக்கப்பட்டிருந்தாலும், மிகவும் சுருக்கமாக இருப்பதாக நினைக்கலாம். அதுதான் விஷயம். Nginx மற்றும் Haproxy இன் உள்ளமைவு கையால் திருத்துவதற்காக உருவாக்கப்பட்டது, மற்றும் அனுப்பிய குறியீட்டிலிருந்து தலைமுறைக்காக. முழு கட்டமைப்பு விவரிக்கப்பட்டுள்ளது protobuf, புரோட்டோ கோப்புகளிலிருந்து அதை உருவாக்குவது தவறு செய்வது மிகவும் கடினம்.

கேனரி, பி/ஜி வரிசைப்படுத்தல் காட்சிகள் மற்றும் பல பொதுவாக டைனமிக் உள்ளமைவில் மட்டுமே செயல்படுத்தப்படும். இதை நிலையான முறையில் செய்ய முடியாது என்று நான் கூறவில்லை, நாம் அனைவரும் செய்கிறோம். ஆனால் இதற்காக நீங்கள் ஊன்றுகோல்களை எந்த பேலன்ஸர்களிலும் வைக்க வேண்டும் அனுப்பிய உட்பட.

தூதர் இன்றியமையாத பணிகள்:

  • சிக்கலான மற்றும் மாறும் அமைப்புகளில் போக்குவரத்து சமநிலை. இதில் சர்வீஸ் மெஷ் அடங்கும், ஆனால் இது மட்டும் அவசியம் இல்லை.
  • விநியோகிக்கப்பட்ட டிரேசிங் செயல்பாடு, சிக்கலான அங்கீகாரம் அல்லது கிடைக்கக்கூடிய பிற செயல்பாடுகளின் தேவை அனுப்பிய பெட்டிக்கு வெளியே அல்லது வசதியாக செயல்படுத்தப்பட்டது, ஆனால் nginx/haproxy இல் நீங்கள் lua மற்றும் சந்தேகத்திற்குரிய செருகுநிரல்களால் சூழப்பட்டிருக்க வேண்டும்.

இரண்டும், தேவைப்பட்டால், உயர் செயல்திறனை வழங்கும்.

இது எப்படி வேலை செய்கிறது

தூதுவர் என்பது ஒரு டாக்கர் படமாக மட்டுமே பைனரிகளில் விநியோகிக்கப்படுகிறது. படத்தில் ஏற்கனவே நிலையான உள்ளமைவின் உதாரணம் உள்ளது. ஆனால் கட்டமைப்பைப் புரிந்துகொள்வதற்காக மட்டுமே நாங்கள் அதில் ஆர்வமாக உள்ளோம்.

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

டைனமிக் கட்டமைப்பு

என்ன பிரச்சனைக்கு தீர்வு தேடுகிறோம்? சுமையின் கீழ் நீங்கள் சுமை பேலன்சர் உள்ளமைவை மீண்டும் ஏற்ற முடியாது; "சிறிய" சிக்கல்கள் எழும்:

  • கட்டமைப்பு சரிபார்ப்பு.

கட்டமைப்பு பெரியதாக இருக்கலாம், அது மிகப் பெரியதாக இருக்கலாம், ஒரே நேரத்தில் அதை ஓவர்லோட் செய்தால், எங்காவது பிழை ஏற்படும் வாய்ப்புகள் அதிகரிக்கும்.

  • நீண்ட கால இணைப்புகள்.

புதிய கேட்பவரைத் தொடங்கும் போது, ​​பழைய இணைப்பில் இயங்கும் இணைப்புகளை நீங்கள் கவனித்துக் கொள்ள வேண்டும்; அடிக்கடி மாற்றங்கள் ஏற்பட்டால் மற்றும் நீண்ட கால இணைப்புகள் இருந்தால், நீங்கள் ஒரு சமரசத்தைத் தேட வேண்டும். வணக்கம், குபெர்னெட்ஸ் nginx இல் நுழைகிறார்.

  • செயலில் சுகாதார சோதனைகள்.

எங்களிடம் சுறுசுறுப்பான சுகாதாரச் சோதனைகள் இருந்தால், டிராஃபிக்கை அனுப்பும் முன், புதிய கட்டமைப்பில் அனைத்தையும் இருமுறை சரிபார்க்க வேண்டும். நிறைய அப்ஸ்ட்ரீம்கள் இருந்தால், இதற்கு நேரம் எடுக்கும். வணக்கம் ஹாப்ராக்ஸி.

இது எவ்வாறு தீர்க்கப்படுகிறது அனுப்பியகட்டமைப்பை மாறும் வகையில் ஏற்றுவதன் மூலம், பூல் மாதிரியின் படி, நீங்கள் அதை தனித்தனி பகுதிகளாகப் பிரிக்கலாம் மற்றும் மாறாத பகுதியை மீண்டும் தொடங்க முடியாது. எடுத்துக்காட்டாக, கேட்பவர், மீண்டும் தொடங்குவதற்கு அதிக செலவாகும் மற்றும் அரிதாகவே மாறுகிறது.

கட்டமைப்பு அனுப்பிய (மேலே உள்ள கோப்பிலிருந்து) பின்வரும் உட்பொருளைக் கொண்டுள்ளது:

  • கேட்பவர் — ஒரு குறிப்பிட்ட ip/port இல் தொங்கும் கேட்பவர்
  • மெய்நிகர் ஹோஸ்ட் - டொமைன் பெயர் மூலம் மெய்நிகர் ஹோஸ்ட்
  • பாதை - சமநிலை விதி
  • கொத்து — சமநிலை அளவுருக்கள் கொண்ட அப்ஸ்ட்ரீம்களின் குழு
  • இறுதிப்புள்ளி — அப்ஸ்ட்ரீம் நிகழ்வு முகவரி

இந்த உட்பொருட்கள் ஒவ்வொன்றும் மேலும் சிலவற்றையும் மாறும் வகையில் நிரப்பலாம்; இதற்காக, கட்டமைப்பு எங்கிருந்து பெறப்படும் சேவையின் முகவரியைக் குறிப்பிடுகிறது. சேவை REST அல்லது gRPC ஆக இருக்கலாம், gRPC விரும்பத்தக்கது.

சேவைகள் முறையே பெயரிடப்பட்டுள்ளன: LDS, VHDS, RDS, CDS மற்றும் EDS. நிலையான ஒன்றில் டைனமிக் வளத்தைக் குறிப்பிட முடியாது என்ற வரம்புடன், நிலையான மற்றும் மாறும் உள்ளமைவை நீங்கள் இணைக்கலாம்.

பெரும்பாலான பணிகளுக்கு, கடைசி மூன்று சேவைகளைச் செயல்படுத்தினால் போதும், அவை ADS (ஒருங்கிணைந்த கண்டுபிடிப்பு சேவை) என அழைக்கப்படுகின்றன. ஜாவா gRPC டேட்டாபிளேனின் ஆயத்த செயலாக்கம் உள்ளது, அதில் உங்கள் மூலத்திலிருந்து பொருட்களை நிரப்ப வேண்டும்.

கட்டமைப்பு பின்வரும் வடிவத்தை எடுக்கும்:

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

தொடக்கத்தில் அனுப்பிய இந்த கட்டமைப்புடன், இது கட்டுப்பாட்டு விமானத்துடன் இணைக்கப்பட்டு RDS, CDS மற்றும் EDS உள்ளமைவைக் கோர முயற்சிக்கும். தொடர்பு செயல்முறை எவ்வாறு நிகழ்கிறது என்பதை விவரிக்கிறது இங்கே.

சுருக்கமாக, அனுப்பிய கோரப்படும் வள வகை, முனையின் பதிப்பு மற்றும் அளவுருக்கள் ஆகியவற்றைக் குறிக்கும் கோரிக்கையை அனுப்புகிறது. பதிலுக்கு, இது ஒரு வளத்தையும் பதிப்பையும் பெறுகிறது; கட்டுப்பாட்டு விமானத்தில் பதிப்பு மாறவில்லை என்றால், அது பதிலளிக்காது.
4 தொடர்பு விருப்பங்கள் உள்ளன:

  • அனைத்து வகையான ஆதாரங்களுக்கும் ஒரு gRPC ஸ்ட்ரீம், வளத்தின் முழு நிலையும் அனுப்பப்படும்.
  • தனி நீரோடைகள், முழு நிலை.
  • ஒரு ஸ்ட்ரீம், அதிகரிக்கும் நிலை.
  • தனி நீரோடைகள், அதிகரிக்கும் நிலை.

கட்டுப்பாட்டு விமானம் மற்றும் இடையே போக்குவரத்தை குறைக்க அதிகரிக்கும் xDS உங்களை அனுமதிக்கிறது அனுப்பிய, இது பெரிய கட்டமைப்புகளுக்கு பொருத்தமானது. ஆனால் இது தொடர்புகளை சிக்கலாக்குகிறது; கோரிக்கையில் குழுவிலகுவதற்கும் குழுசேர்வதற்குமான ஆதாரங்களின் பட்டியல் உள்ளது.

எங்கள் உதாரணம் ADS ஐப் பயன்படுத்துகிறது - RDS, CDS, EDS மற்றும் அதிகரிக்கும் அல்லாத பயன்முறைக்கான ஒரு ஸ்ட்ரீம். அதிகரிக்கும் பயன்முறையை இயக்க, நீங்கள் குறிப்பிட வேண்டும் api_type: DELTA_GRPC

கோரிக்கையில் முனை அளவுருக்கள் இருப்பதால், வெவ்வேறு நிகழ்வுகளுக்கு வெவ்வேறு ஆதாரங்களை கட்டுப்பாட்டு விமானத்திற்கு அனுப்பலாம் அனுப்பிய, இது ஒரு சேவை கண்ணி உருவாக்க வசதியானது.

தயார் ஆகு

மீது அனுப்பிய தொடக்கத்தில் அல்லது கட்டுப்பாட்டு விமானத்திலிருந்து புதிய கட்டமைப்பைப் பெறும்போது, ​​வள வெப்பமயமாதல் செயல்முறை தொடங்கப்படுகிறது. இது கேட்போர் வார்ம்அப் மற்றும் கிளஸ்டர் வார்ம்அப் என பிரிக்கப்பட்டுள்ளது. RDS/LDS இல் மாற்றங்கள் ஏற்படும் போது முதலாவது தொடங்கப்பட்டது, இரண்டாவது CDS/EDS ஆக இருக்கும் போது. இதன் பொருள் அப்ஸ்ட்ரீம்கள் மட்டும் மாறினால், கேட்பவர் மீண்டும் உருவாக்கப்படுவதில்லை.

வார்ம்-அப் செயல்பாட்டின் போது, ​​காலக்கெடுவின் போது கட்டுப்பாட்டு விமானத்திலிருந்து சார்பு ஆதாரங்கள் எதிர்பார்க்கப்படுகின்றன. நேரம் முடிந்துவிட்டால், துவக்கம் வெற்றியடையாது மற்றும் புதிய கேட்பவர் போர்ட்டில் கேட்கத் தொடங்கமாட்டார்.
துவக்க வரிசை: EDS, CDS, செயலில் உள்ள சுகாதார சோதனை, RDS, LDS. செயலில் உள்ள சுகாதாரச் சோதனைகள் இயக்கப்பட்டிருந்தால், ஒரு வெற்றிகரமான சுகாதாரப் பரிசோதனைக்குப் பிறகுதான் போக்குவரத்து மேல்நோக்கிச் செல்லும்.

கேட்பவர் மீண்டும் உருவாக்கப்பட்டிருந்தால், பழையது DRAIN நிலைக்குச் சென்று அனைத்து இணைப்புகளும் மூடப்பட்ட பிறகு அல்லது காலாவதியான பிறகு நீக்கப்படும் --drain-time-s, இயல்புநிலை 10 நிமிடங்கள்.

தொடர வேண்டும்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்