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

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

دا څه دي؟

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

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

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

په GitHub کې ستوري
۱.۱k/هېنداره
۱.۱k/هېنداره
12.4k
27.6k

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

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

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

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

J.W.T.
بهرنۍ پلګ ان
نه
هو
نه

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

څه لپاره

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

  • جامد شاتګ.

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

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

  • جامد ترتیب.

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

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

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

هغه دندې چې استازي پکې اړین دي:

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

دواړه د اړتیا په وخت کې د لوړ فعالیت چمتو کولو لپاره شتون لري.

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

Envoy یوازې د بائنری ډاکر انځور په توګه ویشل شوی. انځور دمخه د جامد ترتیب یوه نمونه لري، مګر موږ یوازې د جوړښت پوهیدو لپاره لیوالتیا لرو.

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/پورټ کې ځړیدلی وي
  • مجازی کوربه — د ډومین نوم له مخې مجازی کوربه
  • لاره — د توازن قاعده
  • د کلستر د - د توازن پیرامیټرو سره د پورته جریانونو یوه ډله
  • د پای ټکی - د اپ سټریم مثال پته

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

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

  • د ټولو سرچینو ډولونو لپاره یو 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

د DDoS محافظت ، VPS VDS سرورونو سره د سایټونو لپاره معتبر کوربه توب واخلئ 🔥 د DDoS محافظت، VPS VDS سرورونو سره د باور وړ ویب پاڼې کوربه توب واخلئ | ProHoster