سلام! هي هڪ مختصر مضمون آهي جيڪو سوالن جو جواب ڏئي ٿو: "ايلچي ڇا آهي؟"، "ڇو ضرورت آهي؟" ۽ "ڪٿي شروع ڪجي؟"
هي ڇا آهي
Envoy هڪ L4-L7 بيلنس آهي جيڪو C++ ۾ لکيل آهي، اعليٰ ڪارڪردگي ۽ دستيابي تي مرکوز آهي. هڪ پاسي، هي ڪجهه طريقي سان نينڪس ۽ هپروڪسي جو هڪ اينالاگ آهي، انهن جي ڪارڪردگي جي مقابلي ۾. ٻئي طرف، اهو مائڪرو سروس آرڪيٽيڪچر ڏانهن وڌيڪ مبني آهي ۽ ڪارڪردگي جاوا ۽ گو بيلنسرز کان وڌيڪ خراب ناهي، جهڙوڪ زوول يا ٽرافيڪ.
haproxy/nginx/envoy جي مقابلي واري جدول، اهو مطلق سچ هجڻ جي دعوي نٿو ڪري، پر هڪ عام تصوير ڏئي ٿو.
نگنڪس
هاپروڪس
موڪليو
پيچرو
github تي تارا
11.2k / آئينو
1.1k / آئينو
12.4k
27.6k
۾ لکيل آهي
C
C
C ++
go
API
في
صرف ساکٽ / ڌڪ
ڊيٽا جهاز / ڇڪڻ
ڇڪيو
فعال صحت جي چڪاس
في
ها
ها
ها
اوپن ٽريڪنگ
خارجي پلگ ان
في
ها
ها
جي وي ٽي
خارجي پلگ ان
في
ها
في
واڌ
لوا/سي
لوا/سي
لوا/سي++
في
ڇو
هي هڪ نوجوان منصوبو آهي، اتي ڪيتريون ئي شيون غائب آهن، ڪجهه شروعاتي الفا ۾. پر موڪليوپڻ، ان جي نوجوانن جي ڪري، تيزيء سان ترقي ڪري رهيو آهي ۽ اڳ ۾ ئي ڪيترائي دلچسپ خاصيتون آهن: متحرڪ ترتيب، ڪيترائي تيار ڪيل فلٽر، توهان جي پنهنجي فلٽر لکڻ لاء هڪ سادي انٽرفيس.
ايپليڪيشن جا علائقا هن جي پيروي ڪندا آهن، پر پهريان 2 مخالف نمونا آهن:
- جامد موٽڻ.
حقيقت اها آهي ته هن وقت ۾ موڪليو ڪابه ڪيشنگ سپورٽ. گوگل وارا هي ڪوشش ڪري رهيا آهن
ھاڻي، استعمال ڪريو nginx لاءِ statics.
- جامد ترتيب.
توهان ان کي استعمال ڪري سگهو ٿا، پر موڪليو اهو نه آهي جنهن لاء اهو ٺاهيو ويو آهي. جامد تشڪيل ۾ خاصيتون بي نقاب نه ٿينديون. اتي ڪيترائي لمحا آھن:
جڏهن yaml ۾ ترتيب ترتيب ۾ ترميم ڪندي، توهان کي غلطي ٿيندي، ڊولپرز کي فعل لاء ڊاهي ۽ سوچيو ته nginx/haproxy ترتيبون، جيتوڻيڪ گهٽ ٺهيل آهن، وڌيڪ جامع آهن. اها ڳالهه آهي. Nginx ۽ Haproxy جي ترتيب هٿ سان ايڊٽ ڪرڻ لاء ٺاهي وئي، ۽ موڪليو ڪوڊ مان نسل لاء. سڄي تشڪيل ۾ بيان ڪيو ويو آهي
ڪينري، b/g جي ترتيب واري منظرنامي ۽ گهڻو ڪجهه عام طور تي صرف هڪ متحرڪ ترتيب ۾ لاڳو ڪيو ويندو آهي. مان اهو نه چئي رهيو آهيان ته اهو جامد طور تي نٿو ٿي سگهي، اسان سڀ اهو ڪندا آهيون. پر ان لاءِ توهان کي ڪچري تي رکڻ جي ضرورت آهي، ڪنهن به بيلنس ۾، اندر موڪليو سميت.
اهي ڪم جن لاءِ سفير لازمي آهي:
- پيچيده ۽ متحرڪ سسٽم ۾ ٽرئفڪ جي توازن. ھن ۾ سروس ميش شامل آھي، پر اھو لازمي طور تي ھڪڙو ئي نه آھي.
- تقسيم ٿيل ٽريڪنگ ڪارڪردگي جي ضرورت، پيچيده اختيار يا ٻي ڪارڪردگي جيڪا موجود آهي موڪليو دٻي کان ٻاهر يا آساني سان لاڳو ڪيو ويو آهي، پر nginx/haproxy ۾ توهان کي لوا ۽ مشڪوڪ پلگ ان سان گهيرو ڪرڻ جي ضرورت آهي.
ٻئي، جيڪڏهن ضروري هجي ته، اعلي ڪارڪردگي مهيا ڪن.
ڪيئن هن ڪم ڪندو
سفير صرف هڪ ڊاکر تصوير جي طور تي بائنري ۾ ورهايو ويو آهي. تصوير اڳ ۾ ئي هڪ جامد تشڪيل جو هڪ مثال تي مشتمل آهي. پر اسان ان ۾ دلچسپي رکون ٿا صرف ساخت کي سمجهڻ لاءِ.
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 (مجموعي دريافت سروس) چئبو آھي، لاءِ.
ٺاھ جوڙ ھيٺ ڏنل شڪل وٺي ٿو:
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
جيئن ته درخواست ۾ نوڊ پيٽرولر شامل آهن، اسان مختلف وسيلن کي ڪنٽرول جهاز ڏانهن موڪلي سگهون ٿا مختلف مثالن لاء موڪليو, هي هڪ خدمت mesh تعمير ڪرڻ لاء آسان آهي.
گرم ٿيو
تي موڪليو شروع ٿيڻ تي يا جڏهن ڪنٽرول جهاز مان هڪ نئين ترتيب حاصل ڪري، وسيلن کي گرم ڪرڻ وارو عمل شروع ڪيو ويو آهي. اهو ٻڌندڙ وارم اپ ۽ ڪلسٽر وارم اپ ۾ ورهايل آهي. پهريون شروع ڪيو ويو آهي جڏهن اتي RDS/LDS ۾ تبديليون آهن، ٻيو جڏهن CDS/EDS. هن جو مطلب آهي ته جيڪڏهن صرف اپ اسٽريم تبديل ٿئي ٿي، ٻڌندڙ کي ٻيهر نه بڻايو ويندو آهي.
گرم اپ جي عمل دوران، انحصار وسيلن جي توقع ڪئي ويندي آهي ڪنٽرول جهاز کان وقت ختم ٿيڻ دوران. جيڪڏهن وقت ختم ٿئي ٿي، شروعات ڪامياب نه ٿيندي ۽ نئون ٻڌندڙ بندرگاهه تي ٻڌڻ شروع نه ڪندو.
شروعاتي آرڊر: EDS، CDS، فعال صحت جي چڪاس، RDS، LDS. فعال صحت جي چڪاس سان گڏ، ٽرئفڪ صرف هڪ ڪامياب صحت جي چڪاس کان پوء مٿي ٿيندي.
جيڪڏهن ٻڌندڙ کي ٻيهر ٺاهيو ويو، پراڻو هڪ DRAIN رياست ۾ وڃي ٿو ۽ سڀني ڪنيڪشن بند ٿيڻ يا وقت ختم ٿيڻ کان پوء ختم ٿي ويندو. --drain-time-s
، ڊفالٽ 10 منٽ.
جاري رکڻ لاء
جو ذريعو: www.habr.com