انوی. ۱. پېژندنه

سلامونه! دا یوه لنډه مقاله ده چې پوښتنې ځوابوي: "استازی څه شی دی؟"، "ولې ورته اړتیا ده؟" او "چیرې پیل کړو؟"

دا څه دي؟

Envoy یو L4-L7 بیلانسر دی چې په C++ کې لیکل شوی، په لوړ فعالیت او شتون تمرکز کوي. له یوې خوا، دا په یو ډول د نګینکس او هاپروکسي انالوګ دی، د دوی په فعالیت کې د پرتلې وړ دی. له بلې خوا، دا د مایکرو سرویس معمارۍ ته ډیر متوجه دی او د جاوا او ګو بیلانسرز څخه بد فعالیت نلري لکه زوول یا ټرافیک.

د haproxy/nginx/envoy د پرتله کولو جدول، دا د مطلق حقیقت ادعا نه کوي، مګر یو عمومي انځور وړاندې کوي.

نګینکس
هپروکسي
سفیر
صراف

ستوري په ګیتوب کې
11.2k/عکس
1.1k/عکس
12.4k
27.6k

لیکل شوی
C
C
C ++
go

API
نه
یوازې ساکټ/پش
ډیټاپلین/پیل
کشول

فعال روغتیا معاینه
نه
هو
هو
هو

خلاص تعقیب
بهرنی پلگ ان
نه
هو
هو

J.W.T.
بهرنی پلگ ان
نه
هو
نه

د ترویج
لوا/سي
لوا/سي
لوا/C++
نه

څه لپاره

دا یو ځوان پروژه ده، ډیری شیان ورک دي، ځینې یې په ابتدايي الفا کې دي. خو سفیر، د دې د ځوانۍ له امله هم په چټکۍ سره وده کوي او دمخه ډیری په زړه پوري ب featuresې لري: متحرک تشکیلات ، ډیری چمتو شوي فلټرونه ، ستاسو د خپل فلټر لیکلو لپاره ساده انٹرفیس.
د غوښتنلیک ساحې له دې څخه تعقیبوي، مګر لومړی دلته 2 ضد نمونې شتون لري:

  • جامد بیرته راګرځیدل.

حقیقت دا دی چې په اوس وخت کې سفیر د کیشینګ ملاتړ نشته. د ګوګل هلکان دا هڅه کوي د حل کولو لپاره. مفکوره به یوځل پلي شي سفیر د RFC موافقت ټول فرعي ټکي (د زو سرلیکونه)، او د ځانګړو پلي کولو لپاره یو انٹرفیس جوړوي. مګر د اوس لپاره دا حتی الفا نه دی، جوړښت تر بحث لاندې دی، PR خلاص (په داسې حال کې چې ما د PR مقاله لیکلې وه، PR منجمد شوی، مګر دا ټکی لاهم اړوند دی).

د اوس لپاره، د احصایې لپاره nginx وکاروئ.

  • جامد ترتیب.

تاسو کولی شئ دا وکاروئ، مګر سفیر دا هغه څه ندي چې دا د دې لپاره رامینځته شوي. په جامد ترتیب کې ځانګړتیاوې به افشا نشي. ډیری شیبې شتون لري:

کله چې په یامل کې تشکیلات ایډیټ کړئ ، تاسو به غلط شئ ، پراختیا کونکي د فعل لپاره وغورځوئ او فکر وکړئ چې د نګینکس / هاپروکسي تشکیلات ، که څه هم لږ جوړښت لري ، ډیر لنډ دي. همدا خبره ده. د Nginx او Haproxy ترتیب د لاس په واسطه د ترمیم لپاره رامینځته شوی و سفیر د کوډ څخه د نسل لپاره. ټول تشکیلات په کې تشریح شوي protobuf، د پروټو فایلونو څخه یې رامینځته کول د غلطۍ کولو لپاره خورا ستونزمن دي.

کانري، b/g ګمارنې سناریوګانې او نور ډیر څه په نورمال ډول یوازې په متحرک ترتیب کې پلي کیږي. زه دا نه وایم چې دا په ثابت ډول نشي ترسره کیدی، موږ ټول دا کوو. مګر د دې لپاره تاسو اړتیا لرئ چې په هرډول بیلنسر کې، بیساکې واچوئ سفیر په شمول.

هغه دندې چې سفیر یې اړین دی:

  • په پیچلي او متحرک سیسټمونو کې د ترافیک توازن. پدې کې د خدماتو میش شامل دی، مګر دا اړینه نه ده چې یوازینی وي.
  • د توزیع شوي تعقیب فعالیت ته اړتیا، پیچلي واک یا نور فعالیت چې شتون لري سفیر له بکس څخه بهر یا په اسانۍ سره پلي شوي، مګر په نګینکس/هاپروکسي کې تاسو اړتیا لرئ د لوا او مشکوک پلگ انونو لخوا محاصره شئ.

دواړه، که اړتیا وي، لوړ فعالیت چمتو کوي.

دا څنګه کار کوي؟

سفیر یوازې د ډاکر عکس په توګه په بائنریونو کې توزیع شوی. عکس لا دمخه د جامد ترتیب مثال لري. مګر موږ یوازې د جوړښت د پوهیدو لپاره لیوالتیا لرو.

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

متحرک ترتیب

موږ د کومې ستونزې د حل په لټه کې یو؟ تاسو نشئ کولی یوازې د بار لاندې د بار بیلانس ترتیب بیا پورته کړئ؛ "کوچنۍ" ستونزې به رامینځته شي:

  • د ترتیب تایید.

تشکیل لوی کیدی شي ، دا خورا لوی کیدی شي ، که موږ دا ټول په یوځل کې ډیر کړو ، نو د غلطۍ چانس په کوم ځای کې ډیریږي.

  • اوږدمهاله اړیکې.

کله چې د نوي اوریدونکي پیل کول، تاسو اړتیا لرئ د هغه اړیکو پاملرنه وکړئ چې په زاړه کې روان دي؛ که چیرې بدلونونه په مکرر ډول پیښ شي او اوږدمهاله اړیکې شتون ولري، تاسو باید د جوړجاړي په لټه کې شئ. سلام، کبرنیټس په نګینکس کې داخلیږي.

  • فعال روغتیایی معاینات.

که موږ فعال روغتیایی معاینات لرو، موږ باید د ټرافیک لیږلو دمخه دا ټول په نوي ترتیب کې دوه ځله وګورو. که چیرې ډیری پورته جریان شتون ولري، دا وخت نیسي. سلام هاپروکسي.

دا څنګه حل کیږي سفیرپه متحرک ډول د کنفګ پورته کولو سره ، د حوض ماډل سره سم ، تاسو کولی شئ دا په جلا برخو وویشئ او هغه برخه بیا پیل نه کړئ چې بدله شوې نه وي. د مثال په توګه، یو اوریدونکی، چې بیا پیل کول ګران دي او په ندرت سره بدلیږي.

شکل بندي سفیر (د پورته فایل څخه) لاندې ادارې لري:

  • اوریدونکی - اوریدونکی په ځانګړي IP/پورټ کې ځړول
  • مجازی کوربه - د ډومین نوم لخوا مجازی کوربه
  • لاره - د توازن قاعده
  • د کلستر د - د پورته جریانونو یوه ډله د توازن پیرامیټرو سره
  • د پای ټکی - د پورته کولو مثال پته

د دې ادارو هر یو او ځینې نور په متحرک ډول ډک کیدی شي؛ د دې لپاره ، ترتیب د خدمت پته مشخص کوي چیرې چې ترتیب به ترلاسه شي. خدمت کیدای شي 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

Add a comment