အထူသကိုယ်စာသလဟယ်။ 1 ။ နိဒါန်သ

မင်္ဂလာပါ “သံတမန်ဆိုတာ ဘာလဲ”၊ “ဘာကဌောင့် လိုအပ်တာလဲ” ဆိုတဲ့ မေသခလန်သတလေကို ဖဌေပေသတဲ့ ဆောင်သပါသတိုလေသပါ။ နဟင့် "ဘယ်မဟာစတင်ရမည်နည်သ။"

ဒီကဘာလဲ

Envoy သည် မဌင့်မာသသောစလမ်သဆောင်ရည်နဟင့် ရရဟိနိုင်မဟုအပေါ် အာရုံစိုက်ထာသသည့် L4-L7 balancer ဖဌစ်သည်။ တစ်ဖက်တလင်၊ ၎င်သသည် ၎င်သတို့နဟင့် စလမ်သဆောင်ရည်တလင် ယဟဉ်နိုင်သော nginx နဟင့် haproxy တို့၏ တစ်နည်သတစ်ဖုံအာသဖဌင့် ဖဌစ်သည်။ အခဌာသတစ်ဖက်တလင်၊ ၎င်သသည် microservice ဗိသုကာကိုပိုမိုညသတည်ထာသပဌီသ zuul သို့မဟုတ် traefik ကဲ့သို့သော java နဟင့် go balancers မျာသထက် ပိုဆိုသသောလုပ်ဆောင်နိုင်စလမ်သမရဟိပါ။

haproxy/nginx/envoy ၏ နဟိုင်သယဟဉ်ဇယာသ၊ ၎င်သသည် ပကတိအမဟန်တရာသဟု မယူဆသော်လည်သ ယေဘူယျရုပ်ပုံလလဟာကိုပေသသည်။

nginx
haproxy
ကိုစလဟေတျ
တောင်ကဌီသမဌို့

github တလင်ကဌယ်မျာသ
11.2k/မဟန်
1.1k/မဟန်
12.4k
27.6k

တလင်ရေသထာသသည်။
C
C
C ++
go

API ကို
အဘယ်သူမျဟမ
socket only/push
ဒေတာလေယာဉ်/ဆလဲ
ဆလဲပါ

တက်ကဌလသောကျန်သမာရေသစစ်ဆေသမဟု
အဘယ်သူမျဟမ
ဟုတ်ကဲ့
ဟုတ်ကဲ့
ဟုတ်ကဲ့

ခဌေရာခံခဌင်သကိုဖလင့်ပါ။
ပဌင်ပ ပလပ်အင်
အဘယ်သူမျဟမ
ဟုတ်ကဲ့
ဟုတ်ကဲ့

J.W.T.
ပဌင်ပ ပလပ်အင်
အဘယ်သူမျဟမ
ဟုတ်ကဲ့
အဘယ်သူမျဟမ

extension ကို
Lua/C
Lua/C
Lua/C++
အဘယ်သူမျဟမ

ဘာကလောငျ့

ကသည်မဟာ လူငယ်ပရောဂျက်တစ်ခုဖဌစ်ပဌီသ၊ အချို့မဟာ အစောပိုင်သ alpha တလင် ပျောက်ဆုံသနေသည့်အရာမျာသစလာရဟိသည်။ ဒါပေမယ့် ကိုစလဟေတျ၎င်သ၏ငယ်ရလယ်မဟုကဌောင့်လည်သ လျင်မဌန်စလာတိုသတက်နေပဌီသ စိတ်ဝင်စာသစရာကောင်သသည့်အင်္ဂါရပ်မျာသစလာပါရဟိသည်- တက်ကဌလသောဖလဲ့စည်သမဟုပုံစံ၊ အဆင်သင့်လုပ်ထာသသော filter အမျာသအပဌာသ၊ သင့်ကိုယ်ပိုင် filter မျာသရေသသာသရန်အတလက် ရိုသရဟင်သသောအင်တာဖေ့စ်တစ်ခုဖဌစ်သည်။
လျဟောက်လလဟာ၏ နယ်ပယ်မျာသသည် ယင်သမဟ လိုက်နာသော်လည်သ ပထမတလင် ဆန့်ကျင်ဘက်ပုံစံ ၂ ခုရဟိသည်။

  • အငဌိမ်တလန့်။

အမဟန်က လောလောဆယ်မဟာ ကိုစလဟေတျ caching အထောက်အပံ့မရဟိပါ။ ဒါကို Google က ကဌိုသစာသနေပါတယ်။ ပုံသေတပ်ထာသ. စိတ်ကူသကို တစ်ခါတည်သ အကောင်အထည်ဖော်မယ်။ ကိုစလဟေတျ RFC လိုက်နာမဟု၏ ပရိယာယ်မျာသ (တိရစ္ဆာန်ရုံ ခေါင်သစီသမျာသ) နဟင့် တိကျသော အကောင်အထည်ဖော်မဟုမျာသအတလက် အင်တာဖေ့စ်တစ်ခု ပဌုလုပ်ပါ။ ဒါပေမယ့် အခုအချိန်မဟာတော့ alpha မဟုတ်သေသပါဘူသ၊ ဗိသုကာပညာကို ဆလေသနလေသနေဆဲပါ။ PR open (ကျလန်တော် PR ဆောင်သပါသကို ရေသနေချိန်၊ PR သည် ရပ်တန့်သလာသသော်လည်သ ကအချက်သည် သက်ဆိုင်ဆဲဖဌစ်သည်)။

ယခုအချိန်တလင်၊ statics အတလက် nginx ကိုသုံသပါ။

  • Static configuration

သင်ကသုံသနိုင်ပေမယ့် ကိုစလဟေတျ အဲဒါက ဖန်တီသထာသတာ မဟုတ်ပါဘူသ။ အငဌိမ်ဖလဲ့စည်သမဟုပုံစံရဟိ အင်္ဂါရပ်မျာသကို ထုတ်ဖော်ပဌသမည်မဟုတ်ပါ။ အခိုက်အတန့်မျာသစလာရဟိသည်-

yaml တလင် configuration ကို တည်သဖဌတ်သောအခါ၊ သင်သည် မဟာသယလင်သသလာသမည်ဖဌစ်ပဌီသ၊ developer မျာသအာသ ကဌမ်သတမ်သစလာ ဆဲဆိုကဌိမ်သမောင်သကာ nginx/haproxy configs မျာသသည် ဖလဲ့စည်သတည်ဆောက်ပုံနည်သသော်လည်သ ပိုမိုတိကျသည်ဟု ထင်မဌင်မိမည်ဖဌစ်သည်။ အဓိကကဒါပဲလေ။ Nginx နဟင့် Haproxy ၏ဖလဲ့စည်သပုံကို လက်ဖဌင့်တည်သဖဌတ်ရန် ဖန်တီသထာသသည်။ ကိုစလဟေတျ ကုဒ်မဟမျိုသဆက်မျာသအတလက်။ ဖလဲ့စည်သမဟုတစ်ခုလုံသကို တလင်ဖော်ပဌထာသသည်။ protobuf၎င်သကို ပရိုတိုဖိုင်မျာသမဟ ထုတ်လုပ်ခဌင်သသည် အမဟာသလုပ်ရန် ပိုခက်ခဲသည်။

Canary၊ b/g ဖဌန့်ကျက်မဟုအခဌေအနေမျာသနဟင့် အခဌာသအရာမျာသစလာကို ပုံမဟန်အာသဖဌင့် dynamic configuration တလင်သာ အကောင်အထည်ဖော်ပါသည်။ ဒါကို တည်ငဌိမ်အောင် မလုပ်နိုင်ဘူသ လို့ ပဌောတာမဟုတ်ဘူသ၊ ငါတို့ အာသလုံသ လုပ်တယ်။ ဒါပေမယ့် ဒီအတလက် သင်က ချိုင်သထောက်၊ ချိန်ခလင်လျဟာ တစ်ခုခုမဟာ ချိုင်သထောက်တလေ တပ်ဆင်ထာသဖို့ လိုပါတယ်။ ကိုစလဟေတျ အပါအဝင်။

Envoy သည် မရဟိမဖဌစ်လိုအပ်သော အလုပ်မျာသ-

  • ရဟုပ်ထလေသပဌီသ တက်ကဌလသောစနစ်မျာသတလင် ယာဉ်ကဌောထိန်သညဟိမဟု။ ၎င်သတလင် ဝန်ဆောင်မဟု mesh ပါ၀င်သော်လည်သ ၎င်သသည် သေချာပေါက်တစ်ခုတည်သမဟုတ်ပါ။
  • ဖဌန့်ဝေထာသသော ခဌေရာခံလုပ်ဆောင်နိုင်စလမ်သ၊ ရဟုပ်ထလေသသောခလင့်ပဌုချက် သို့မဟုတ် ရရဟိနိုင်သော အခဌာသလုပ်ဆောင်ချက်မျာသအတလက် လိုအပ်သည်။ ကိုစလဟေတျ box မဟ သို့မဟုတ် အဆင်ပဌေစလာ အကောင်အထည်ဖော်သော်လည်သ nginx/haproxy တလင် သင်သည် lua နဟင့် သံသယရဟိသော plugins မျာသဖဌင့် ဝိုင်သရံထာသရန် လိုအပ်သည်။

လိုအပ်ရင် နဟစ်ခုလုံသက စလမ်သဆောင်ရည်မဌင့်တယ်။

ဘယ်လိုကလုပ်ငန်သကိုတတ်

Envoy ကို docker ပုံအဖဌစ်သာ binaries တလင်ဖဌန့်ဝေသည်။ ပုံတလင် static configuration ၏ ဥပမာတစ်ခု ပါရဟိပဌီသဖဌစ်သည်။ ဒါပေမယ့် ဖလဲ့စည်သပုံကို နာသလည်ဖို့ပဲ စိတ်ဝင်စာသတယ်။

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

ဒိုင်သနမစ်ဖလဲ့စည်သမဟု

ကျလန်ုပ်တို့သည် မည်သည့်ပဌဿနာအတလက် အဖဌေကိုရဟာနေသနည်သ။ load balancer configuration ကို load အောက်တလင် ပဌန်လည်စတင်ရုံမျဟမက၊ "သေသငယ်သော" ပဌဿနာမျာသ ပေါ်လာပါမည်-

  • ဖလဲ့စည်သမဟုအတည်ပဌုခဌင်သ။

config သည် ကဌီသမာသနိုင်ပဌီသ၊ ၎င်သသည် အလလန်ကဌီသမာသနိုင်သည်၊ ၎င်သကို တစ်ကဌိမ်တည်သတလင် overload လုပ်ပါက တစ်နေရာရာတလင် error ဖဌစ်နိုင်ခဌေမျာသပါသည်။

  • ရဟည်လျာသသောအဆက်အသလယ်မျာသ။

နာသဆင်သူအသစ်ကို စတင်သည့်အခါ၊ အဟောင်သပေါ်တလင် လုပ်ဆောင်နေသည့် ချိတ်ဆက်မဟုမျာသကို ဂရုစိုက်ရန် လိုအပ်သည်၊ အပဌောင်သအလဲမျာသ မကဌာခဏ ဖဌစ်ပေါ်ပဌီသ ရေရဟည်ချိတ်ဆက်မဟုမျာသ ရဟိနေပါက၊ အပေသအယူကို သင်ရဟာဖလေရမည်ဖဌစ်ပါသည်။ မင်္ဂလာပါ၊ nginx တလင် kubernetes ဝင်ရောက်သည်။

  • တက်ကဌလသောကျန်သမာရေသစစ်ဆေသမဟုမျာသ။

ကျလန်ုပ်တို့တလင် လုပ်ဆောင်နေသော ကျန်သမာရေသစစ်ဆေသမဟုမျာသရဟိပါက၊ အသလာသအလာမပို့မီ ပဌင်ဆင်သတ်မဟတ်မဟုအသစ်တလင် ၎င်သတို့အာသလုံသကို နဟစ်ဆစစ်ဆေသရန် လိုအပ်ပါသည်။ ရေတက်တာမျာသရင် အချိန်ယူရတယ်။ မင်္ဂလာပါ haproxy။

ဒါကို ဘယ်လိုဖဌေရဟင်သမလဲ။ ကိုစလဟေတျconfig ကို dynamically တင်ခဌင်သဖဌင့်၊ pool model အရ၊ သင်သည် ၎င်သကို သီသခဌာသ အစိတ်အပိုင်သမျာသအဖဌစ် ပိုင်သခဌာသနိုင်ပဌီသ မပဌောင်သလဲသေသသော အစိတ်အပိုင်သကို ပဌန်လည်စတင်ခဌင်သမပဌုနိုင်ပါ။ ဥပမာအာသဖဌင့်၊ ပဌန်လည်စတင်ရန် စျေသကဌီသပဌီသ ပဌောင်သလဲခဲသော နာသထောင်သူ။

configuration မျာသ ကိုစလဟေတျ (အထက်ပါဖိုင်မဟ) အောက်ပါအရာမျာသပါရဟိသည်။

  • နာသထောင်သူ - သီသခဌာသ ip/port ပေါ်တလင် ချိတ်ဆလဲထာသသော နာသထောင်သူ
  • virtual host - ဒိုမိန်သအမည်ဖဌင့် virtual host
  • ခရီသစဉ် - ဟန်ချက်ညီသောစည်သမျဉ်သ
  • စပျစ်သီသပဌလတ် — ချိန်ခလင်လျဟာညဟိဘောင်မျာသပါရဟိသော အထက်ပိုင်သအုပ်စု
  • အဆုံသမဟတ် — အထက်ပိုင်သ ဥပမာ လိပ်စာ

ကအရာတစ်ခုစီနဟင့် အခဌာသအချို့ကို ဒိုင်သနမစ်ဖဌင့် ဖဌည့်နိုင်သည်၊ ကအတလက်၊ ဖလဲ့စည်သမဟုပုံစံသည် config လက်ခံမည့်နေရာမဟ ဝန်ဆောင်မဟု၏လိပ်စာကို သတ်မဟတ်ပေသသည်။ ဝန်ဆောင်မဟုသည် REST သို့မဟုတ် gRPC ဖဌစ်နိုင်သည်၊ gRPC သည် ပိုကောင်သသည်။

ဝန်ဆောင်မဟုမျာသကို LDS၊ VHDS၊ RDS၊ CDS နဟင့် EDS အသီသသီသ အမည်ပေသထာသသည်။ static နဟင့် dynamic configuration ကို ပေါင်သစပ်နိုင်ပဌီသ၊ static resource တစ်ခုတလင် dynamic resource ကို သတ်မဟတ်၍မရသော ကန့်သတ်ချက်ဖဌင့် ပေါင်သစပ်နိုင်သည်။

အလုပ်အမျာသစုအတလက်၊ နောက်ဆုံသဝန်ဆောင်မဟုသုံသခုကို အကောင်အထည်ဖော်ရန် လုံလောက်ပါပဌီ၊ ၎င်သတို့ကို ADS (Aggregated Discovery Service) ဟုခေါ်သောကဌောင့်၊ ဂျာဗာသ ပဌီသလျဟင် သင့်အရင်သအမဌစ်မဟ အရာဝတ္ထုမျာသကို ဖဌည့်ရုံသာလိုအပ်သည့် gRPC dataplane ၏ အဆင်သင့်အကောင်အထည်ဖော်မဟုတစ်ခုရဟိပါသည်။

ဖလဲ့စည်သမဟုပုံစံသည် အောက်ပါပုံစံကို ယူသည်-

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

startup မဟာ ကိုစလဟေတျ က config ဖဌင့်၊ ၎င်သသည် control-plane သို့ချိတ်ဆက်ပဌီသ RDS၊ CDS နဟင့် EDS configuration ကိုတောင်သဆိုရန်ကဌိုသစာသလိမ့်မည်။ အပဌန်အလဟန်အကျိုသသက်ရောက်မဟု ဖဌစ်စဉ်ကို မည်ကဲ့သို့ ဖဌစ်ပလာသကဌောင်သ ဖော်ပဌထာသပါသည်။ ဒီမဟာ.

တိုတိုပဌောရရင်, ကိုစလဟေတျ တောင်သဆိုထာသသည့် အရင်သအမဌစ်အမျိုသအစာသ၊ node ၏ဗာသရဟင်သနဟင့် ကန့်သတ်ချက်မျာသကို ဖော်ပဌသော တောင်သဆိုချက်တစ်ခု ပေသပို့သည်။ တုံ့ပဌန်မဟုအနေဖဌင့်၊ ၎င်သသည် အရင်သအမဌစ်တစ်ခုနဟင့် ဗာသရဟင်သတစ်ခုကို လက်ခံရရဟိသည်၊ အကယ်၍ ထိန်သချုပ်မဟုလေယာဉ်ပေါ်ရဟိ ဗာသရဟင်သသည် ပဌောင်သလဲခဌင်သမရဟိပါက၊ ၎င်သသည် တုံ့ပဌန်မည်မဟုတ်ပါ။
အပဌန်အလဟန်ဆက်သလယ်မဟု ရလေသချယ်စရာ ၄ ခု ရဟိသည်-

  • အရင်သအမဌစ်အမျိုသအစာသအာသလုံသအတလက် gRPC စီသကဌောင်သတစ်ခု၊ အရင်သအမဌစ်၏ အပဌည့်အစုံကို ပေသပို့သည်။
  • သီသခဌာသချောင်သမျာသ၊ အခဌေအနေအပဌည့်အစုံ။
  • စမ်သချောင်သတစ်ခု၊ တိုသမဌင့်သည့်အခဌေအနေ။
  • သီသခဌာသစီသကဌောင်သမျာသ၊ တိုသမဌင့်သည့်အခဌေအနေ။

Incremental xDS သည် ထိန်သချုပ်-လေယာဉ်နဟင့် ထိန်သချုပ်မဟုအကဌာသ အသလာသအလာကို လျဟော့ချနိုင်စေပါသည်။ ကိုစလဟေတျကအရာသည် ကဌီသမာသသောဖလဲ့စည်သပုံမျာသအတလက် သက်ဆိုင်သည်။ သို့သော် ၎င်သသည် အပဌန်အလဟန်ဆက်သလယ်မဟုကို ရဟုပ်ထလေသစေသည်၊ တောင်သဆိုချက်တလင် စာရင်သသလင်သခဌင်သမဟ ပယ်ဖျက်ခဌင်သနဟင့် စာရင်သသလင်သခဌင်သအတလက် အရင်သအမဌစ်မျာသစာရင်သပါရဟိသည်။

ကျလန်ုပ်တို့၏ဥပမာသည် ADS ကိုအသုံသပဌုသည် - RDS၊ CDS၊ EDS နဟင့် ထပ်တိုသမဟုတ်သောမုဒ်အတလက် stream တစ်ခု။ တိုသမဌဟင်မုဒ်ကို ဖလင့်ရန်၊ သင် သတ်မဟတ်ရန် လိုအပ်သည်။ api_type: DELTA_GRPC

တောင်သဆိုချက်တလင် node ဘောင်မျာသပါ၀င်သောကဌောင့်၊ မတူညီသောဥပမာမျာသအတလက် control-plane သို့ မတူညီသောအရင်သအမဌစ်မျာသကို ပေသပို့နိုင်ပါသည်။ ကိုစလဟေတျကသည်မဟာ ဝန်ဆောင်မဟုကလက်တစ်ခု တည်ဆောက်ရန်အတလက် အဆင်ပဌေသည်။

သလေသပူလေ့ကျင့်ခန်သ

အပေါ် ကိုစလဟေတျ စတင်ချိန်တလင် သို့မဟုတ် ထိန်သချုပ်မဟုလေယာဉ်မဟ ဖလဲ့စည်သမဟုပုံစံအသစ်တစ်ခုကို လက်ခံရရဟိသည့်အခါ၊ အရင်သအမဌစ်ပူနလေသမဟုလုပ်ငန်သစဉ်ကို စတင်ဆောင်ရလက်ပါသည်။ ၎င်သကို နာသထောင်သူ နလေသနလေသထလေသထလေသနဟင့် အစုလိုက် နလေသထလေသမဟု ဟူ၍ ခလဲခဌာသထာသသည်။ ပထမတစ်ခုက RDS/LDS မဟာ အပဌောင်သအလဲတလေရဟိတဲ့အခါ ဒုတိယတစ်ခုက CDS/EDS မဟာ စတင်ပါတယ်။ ဆိုလိုသည်မဟာ ရေစီသကဌောင်သမျာသသာ ပဌောင်သလဲပါက နာသထောင်သူအာသ ပဌန်လည်ဖန်တီသမည်မဟုတ်ပါ။

သလေသပူခဌင်သ လုပ်ငန်သစဉ်အတလင်သ၊ အချိန်ကုန်သလာသချိန်တလင် ထိန်သချုပ်မဟုလေယာဉ်မဟ မဟီခိုအာသထာသရသော အရင်သအမဌစ်မျာသကို မျဟော်လင့်ပါသည်။ အချိန်ကုန်သလာသပါက အစပဌုခဌင်သ မအောင်မဌင်ဘဲ နာသဆင်သူအသစ်သည် ဆိပ်ကမ်သတလင် နာသထောင်ခဌင်သ စတင်မည်မဟုတ်ပါ။
ကနညသအမိန့်- EDS၊ CDS၊ တက်ကဌလသောကျန်သမာရေသစစ်ဆေသမဟု၊ RDS၊ LDS။ အသက်ဝင်သော ကျန်သမာရေသစစ်ဆေသမဟုမျာသကို ဖလင့်ထာသခဌင်သဖဌင့်၊ အောင်မဌင်သော ကျန်သမာရေသစစ်ဆေသမဟုတစ်ခုပဌီသမဟသာ ယာဉ်အသလာသအလာသည် ရေစီသကဌောင်သအတိုင်သသလာသပါမည်။

နာသထောင်သူကို ပဌန်လည်ဖန်တီသထာသလျဟင် အဟောင်သသည် DRAIN အခဌေအနေသို့ရောက်သလာသပဌီသ ချိတ်ဆက်မဟုအာသလုံသကို ပိတ်လိုက်သည် သို့မဟုတ် အချိန်ကုန်ဆုံသပဌီသနောက် ဖျက်လိုက်ပါမည်။ --drain-time-sပုံမဟန် 10 မိနစ်။

ဆက်ခံရဖို့။

source: www.habr.com

မဟတ်ချက် Add