نوٽ. ترجمو: پهريون حصو هي سلسلو Istio صلاحيتن کي متعارف ڪرائڻ ۽ انهن کي عمل ۾ ڏيکارڻ لاء وقف ڪيو ويو. هاڻي اسان هن سروس ميش جي ترتيب ۽ استعمال جي وڌيڪ پيچيده حصن بابت ڳالهائينداسين، ۽ خاص طور تي، مڪمل طور تي ٺهيل رستن ۽ نيٽورڪ ٽرئفڪ جي انتظام بابت.
اسان توهان کي اهو پڻ ياد ڏياريندا آهيون ته آرٽيڪل مخزن مان ترتيبن کي استعمال ڪري ٿو (Kubernetes ۽ Istio لاءِ ظاهر ٿئي ٿو) استقامت.
زوال کان پوء بحالي: وقت ختم، ٻيهر ڪوششون، سرڪٽ برڪرز؛
عيب داخل ڪرڻ: دير، درخواستون ختم، وغيره.
جيئن ته مضمون جاري آهي، اهي صلاحيتون چونڊيل ايپليڪيشن استعمال ڪندي مثال طور بيان ڪيا ويندا ۽ نوان تصورات متعارف ڪرايا ويندا. پهريون اهڙو تصور هوندو DestinationRules(يعني ٽريفڪ/درخواستن جي وصول ڪندڙ بابت ضابطا - تقريباً ترجمو.)، جنهن جي مدد سان اسان A/B جاچ چالو ڪندا آهيون.
A/B جاچ: منزل جا اصول عملي طور
A/B ٽيسٽنگ انهن ڪيسن ۾ استعمال ٿيندي آهي جتي ڪنهن ايپليڪيشن جا ٻه ورجن هوندا آهن (عام طور تي اهي بصري طور تي مختلف هوندا آهن) ۽ اسان کي 100٪ پڪ ناهي ته صارف تجربو کي بهتر بڻائيندو. تنهن ڪري، اسان ٻنهي نسخن کي هڪ ئي وقت هلائيندا آهيون ۽ ميٽرڪ گڏ ڪندا آهيون.
فرنٽ اينڊ جي ٻئي ورزن کي ترتيب ڏيڻ لاءِ، A/B ٽيسٽنگ جو مظاهرو ڪرڻ جي ضرورت آهي، هيٺ ڏنل حڪم هلايو:
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created
سائي ورزن لاءِ ڊيپلائيمينٽ پڌرو ٻن هنڌن تي مختلف آهي:
اِن جو مطلب آهي index.html, جامد فائلن جي ھڪڙي ورزن جي درخواست ڪندي، لوڊ بيلنسر طرفان پوڊ ڏانھن موڪلي سگھجي ٿو جيڪي مختلف ورزن آھن، جتي، واضح سببن لاء، اھڙيون فائلون موجود نه آھن. تنهن ڪري، ايپليڪيشن کي ڪم ڪرڻ لاء، اسان کي هڪ پابندي قائم ڪرڻ جي ضرورت آهي: "ايپليڪيشن جو ساڳيو نسخو جيڪو خدمت ڪيو ويو آهي index.html ايندڙ درخواستن کي پورو ڪرڻ گهرجي».
اسان اتي حاصل ڪنداسين مسلسل هيش تي ٻڌل لوڊ بيلنس سان (مسلسل هاش لوڊ بيلنسنگ)... انهي حالت ۾ ساڳئي ڪلائنٽ کان درخواستون ساڳئي پس منظر واري مثال ڏانهن موڪليا ويا آهن، جنهن لاءِ اڳواٽ بيان ڪيل ملڪيت استعمال ٿئي ٿي - مثال طور، هڪ HTTP هيڊر. DestinationRules استعمال ڪندي لاڳو ڪيو ويو.
منزل جا ضابطا
کان پوءِ ورچوئل سروس گهربل خدمت ڏانهن هڪ درخواست موڪلي، DestinationRules استعمال ڪندي اسان پاليسين جي وضاحت ڪري سگهون ٿا جيڪي هن خدمت جي مثالن لاءِ مقرر ڪيل ٽرئفڪ تي لاڳو ٿينديون:
Istio وسيلن سان ٽرئفڪ جو انتظام
ويچاري: نيٽ ورڪ ٽرئفڪ تي Istio وسيلن جو اثر هتي پيش ڪيو ويو آهي انهي طريقي سان جيڪو سمجهڻ آسان آهي. درست هجڻ لاءِ، اهو فيصلو جنهن مثال تي درخواست موڪلڻ لاءِ سي آر ڊي ۾ ترتيب ڏنل Ingress Gateway ۾ سفير طرفان ڪيو ويندو آهي.
منزلن جي ضابطن سان، اسان لاڳيتو هيش استعمال ڪرڻ لاءِ لوڊ بيلنس کي ترتيب ڏئي سگھون ٿا ۽ يقيني بڻائي سگھون ٿا ته ساڳئي خدمت جو مثال ساڳئي صارف کي جواب ڏئي ٿو. هيٺ ڏنل ترتيب توهان کي حاصل ڪرڻ جي اجازت ڏئي ٿي (destinationrule-sa-frontend.yaml):
پر ديدڻ ("بچاءُ") يا آئينو ("عڪس") ڪيسن ۾ استعمال ڪيو ويو جتي اسان صارف کي متاثر ڪرڻ کان سواء پيداوار ۾ تبديلي جي جانچ ڪرڻ چاهيون ٿا: اهو ڪرڻ لاء، اسان ("عڪس") درخواستن کي ٻي صورت ۾ نقل ڪريون ٿا جتي گهربل تبديليون ڪيون ويون آهن، ۽ نتيجن کي ڏسو. سادي لفظ ۾، اهو تڏهن آهي جڏهن توهان جو ساٿي سڀ کان وڌيڪ نازڪ مسئلو چونڊيندو آهي ۽ گندگي جي اهڙي وڏي ڍير جي صورت ۾ هڪ ڇڪڻ جي درخواست ڪري ٿو ته ڪو به اصل ۾ ان جو جائزو نٿو وٺي سگهي.
ھن منظر کي عمل ۾ جانچڻ لاءِ، اچو ته SA-Logic جو ٻيو مثال ٺاھيون بگز سان (buggy) هيٺ ڏنل حڪم هلائڻ سان:
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created
۽ ھاڻي اچو ته ڪمانڊ کي ھلائي سگھون ان کي يقيني بڻائڻ لاءِ ته سڀني مثالن سان app=sa-logic انهن وٽ پڻ لاڳاپيل نسخن سان ليبل آهن:
Canary Deployment هڪ ننڍڙي تعداد ۾ استعمال ڪندڙن لاءِ ايپليڪيشن جي نئين ورجن کي رول آئوٽ ڪرڻ جو عمل آهي. اهو پڪ ڪرڻ لاءِ استعمال ڪيو ويو آهي ته رليز ۾ ڪو به مسئلو ناهي ۽ صرف ان کان پوءِ ، اڳ ۾ ئي ان جي (رليز جي) معيار تي يقين رکندي ، ان کي ٻين استعمال ڪندڙن ۾ ورهايو.оوڌيڪ سامعين.
ڪينري رول آئوٽ کي ظاهر ڪرڻ لاءِ، اسان هڪ ذيلي سيٽ سان ڪم جاري رکنداسين buggy у sa-logic.
اچو ته وقت ضايع نه ڪريون ۽ 20٪ صارفين کي فوري طور تي ورجن ڏانهن موڪليون بگز سان (اهو اسان جي ڪينري رول آئوٽ جي نمائندگي ڪندو) ۽ باقي 80٪ عام خدمت ڏانهن. ائين ڪرڻ لاءِ، ھيٺ ڏنل VirtualService استعمال ڪريو (sa-logic-subset-canary-vs.yaml):
... ۽ اسان فوري طور تي ڏسندا سين ته ڪجهه درخواستون ناڪامي ٿي وڃن ٿيون:
$ while true; do
curl -i http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}'
--silent -w "Time: %{time_total}s t Status: %{http_code}n"
-o /dev/null; sleep .1; done
Time: 0.153075s Status: 200
Time: 0.137581s Status: 200
Time: 0.139345s Status: 200
Time: 30.291806s Status: 500
VirtualServices ڪينري رول آئوٽ کي فعال ڪن ٿا: هن صورت ۾، اسان مسئلن جي امڪاني اثر کي محدود ڪيو آهي 20٪ صارف جي بنياد تي. عجيب! هاڻي، هر صورت ۾ جڏهن اسان کي اسان جي ڪوڊ جي پڪ نه آهي (ٻين لفظن ۾ - هميشه ...)، اسان استعمال ڪري سگهون ٿا mirroring ۽ canary rollouts.
وقت ختم ٿيڻ ۽ ٻيهر ڪوششون
پر ڪيڙا هميشه ڪوڊ ۾ ختم نه ٿيندا آهن. لسٽ ۾ "تقسيم ٿيل ڪمپيوٽنگ بابت 8 غلط فڪر"پهرين جڳهه تي غلط يقين آهي ته" نيٽ ورڪ قابل اعتماد آهي. حقيقت ۾ نيٽ ورڪ نه قابل اعتماد، ۽ انهي سبب لاء اسان کي وقت جي ضرورت آهي (وقت ختم ٿيڻ) ۽ ٻيهر ڪوشش ڪري ٿو (ٻيهر ڪوشش).
مظاهري لاءِ اسان ساڳيو مسئلو ورزن استعمال ڪندا رهنداسين sa-logic (buggy)، ۽ اسان بي ترتيب ناڪامين سان نيٽ ورڪ جي ناقابل اعتبار کي نقل ڪنداسين.
اچو ته اسان جي خدمت کي بگ سان گڏ جواب ڏيڻ ۾ تمام گهڻو وقت وٺڻ جو 1/3 موقعو، اندروني سرور جي غلطي سان ختم ٿيڻ جو 1/3 موقعو، ۽ صفحي کي ڪاميابيءَ سان واپس ڪرڻ جو 1/3 موقعو.
اهڙن مسئلن جي اثر کي گهٽائڻ ۽ صارفين لاءِ زندگي بهتر بڻائڻ لاءِ، اسان ڪري سگهون ٿا:
هڪ ٽائم آئوٽ شامل ڪريو جيڪڏهن خدمت جواب ڏيڻ ۾ 8 سيڪنڊن کان وڌيڪ وقت وٺي،
۽ هر ڪوشش کي ناڪام سمجهيو ويندو آهي جيڪڏهن جواب جو وقت 3 سيڪنڊن کان وڌيڪ آهي.
هي هڪ اصلاح آهي ڇو ته صارف کي 8 سيڪنڊن کان وڌيڪ انتظار نه ڪرڻو پوندو ۽ اسان ناڪامي جي صورت ۾ جواب حاصل ڪرڻ لاءِ ٽي نيون ڪوششون ڪنداسين، ڪامياب جواب جو موقعو وڌائيندو.
اسان microservice فن تعمير ۾ ٻه اهم نمونن بابت ڳالهائي رهيا آهيون جيڪي توهان کي خود بخود حاصل ڪرڻ جي اجازت ڏين ٿا (خود علاج) خدمتون.
سرڪٽ برنر("سرڪٽ برڪر") خدمت جي مثال تي اچڻ واري درخواستن کي ختم ڪرڻ لاءِ استعمال ڪيو وڃي ٿو جيڪو غير صحتمند سمجهي وڃي ٿو ۽ ان کي بحال ڪيو وڃي ٿو جڏهن ته ڪلائنٽ جي درخواستن کي ان خدمت جي صحتمند مثالن ڏانهن منتقل ڪيو وڃي ٿو (جيڪو ڪامياب جوابن جو سيڪڙو وڌائي ٿو). (نوٽ: نموني جي وڌيڪ تفصيلي وضاحت ملي سگهي ٿي، مثال طور، هتي.)
بدمعاشي("پارشن") سڄي سسٽم کي متاثر ڪرڻ کان سروس جي ناڪامي کي الڳ ڪري ٿو. مثال طور، سروس B ڀڄي وئي آهي ۽ ٻي خدمت (سروس B جو ڪلائنٽ) سروس B ڏانهن هڪ درخواست ڪري ٿي، جنهن جي ڪري اهو ان جي ٿريڊ پول کي ختم ڪري ٿو ۽ ٻين درخواستن جي خدمت ڪرڻ جي قابل ناهي (جيتوڻيڪ اهي سروس B کان نه آهن). (نوٽ: نموني جي وڌيڪ تفصيلي وضاحت ملي سگهي ٿي، مثال طور، هتي.)
مان انهن نمونن جي عمل درآمد جي تفصيل کي ختم ڪندس ڇو ته اهي ڳولڻ آسان آهن سرڪاري دستاويز، ۽ مان پڻ واقعي جي تصديق ۽ اختيار ڏيکارڻ چاهيان ٿو، جيڪو مضمون جي ايندڙ حصي ۾ بحث ڪيو ويندو.