سلامونه! دا لنډه مقاله د دې پوښتنو ځوابونه ورکوي: "استازي څه شی دی؟"، "زه ولې ورته اړتیا لرم؟"، او "زه له کوم ځای څخه پیل وکړم؟"
دا څه دي؟
اینوای یو L4-L7 بار بیلانسر دی چې په C++ کې لیکل شوی، په لوړ فعالیت او شتون تمرکز کوي. له یوې خوا، دا یو څه د nginx او haproxy سره ورته دی، په فعالیت کې د پرتلې وړ. له بلې خوا، دا د مایکرو خدماتو معمارۍ ته ډیر چمتو دی او د جاوا او ګو بار بیلانسرونو سره پرتله کیدونکی فعالیت وړاندې کوي، لکه زول یا ټرافیک.
د هاپروکسی/نګینکس/قاصد د پرتله کولو جدول د مطلق حقیقت ادعا نه کوي، مګر دا یو عمومي انځور وړاندې کوي.
نګینکس
هپروکسي
سفیر
صراف
په GitHub کې ستوري
۱.۱k/هېنداره
۱.۱k/هېنداره
12.4k
27.6k
لیکل شوی په
C
C
C ++
go
API
نه
یوازې ساکټ/پش
ډیټا پلین/کشول
کشول
فعال روغتیا معاینه
نه
هو
هو
هو
خلاص تعقیب
بهرنۍ پلګ ان
نه
هو
هو
J.W.T.
بهرنۍ پلګ ان
نه
هو
نه
د ترویج
لوا/سي
لوا/سي
لوا/سي++
نه
څه لپاره
دا یوه ځوانه پروژه ده، ډېر شیان ورک دي، ځینې یې په لومړني الفا کې دي. خو سفیر، تر یوې اندازې د خپل ځوانۍ له امله، په چټکۍ سره وده کوي او دمخه ډیری په زړه پورې ځانګړتیاوې لري: متحرک ترتیب، ډیری چمتو شوي فلټرونه، ستاسو د خپلو فلټرونو لیکلو لپاره یو ساده انٹرفیس.
د تطبیق ساحې له دې څخه تعقیب کیږي، مګر لومړی، دوه ضد نمونې:
- جامد شاتګ.
خبره دا ده چې دا مهال په سفیر د کیش کولو ملاتړ نشته. په ګوګل کې خلک هڅه کوي چې دا سم کړي. نظر دا دی چې دا کله ناکله پلي شي سفیر د RFC اطاعت ټولې لنډیزونه (د سرلیکونو یو ژوبڼ)، او د ځانګړو پلي کولو لپاره یو انٹرفیس رامینځته کړئ. مګر دا لاهم الفا نه دی؛ جوړښت لاهم تر بحث لاندې دی. خلاص (کله چې زه مقاله لیکم، عامه اړیکه یوځای شوه، مګر دا ټکی لاهم اړونده دی).
په عین حال کې، د سټیټیکس لپاره nginx وکاروئ.
- جامد ترتیب.
تاسو یې کارولی شئ، مګر سفیر دا د دې هدف لپاره نه دی جوړ شوی. د جامد ترتیب وړتیاوې به په بشپړ ډول نه وي درک شوي. ډیری ټکي شتون لري:
کله چې د YAML ترتیب ایډیټ کوئ، تاسو به غلطۍ وکړئ، پراختیا کونکو ته به د ډیر لفظي کیدو لعنت ووایاست، او فکر وکړئ چې د nginx/haproxy تشکیلات، پداسې حال کې چې لږ جوړښت لري، ډیر لنډ دي. دا ټکی دی. د nginx او Haproxy تشکیلات د لاسي ایډیټ کولو لپاره رامینځته شوي، پداسې حال کې چې سفیر د کوډ څخه د نسل لپاره. ټول ترتیب په کې تشریح شوی ، د پروټو فایلونو څخه یې رامینځته کول د غلطۍ کول خورا ستونزمن کوي.
د کانري سناریوګانې، د 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
