انفراسٹرڪچر ڪوڊ جي طور تي: پهرين واقفيت

اسان جي ڪمپني هڪ SRE ٽيم تي بورڊنگ جي عمل ۾ آهي. مان هن سڄي ڪهاڻي ۾ ترقي جي پاسي کان آيو آهيان. عمل ۾، مون خيالن ۽ بصيرت سان گڏ آيو آهيان جيڪي آئون ٻين ڊولپرز سان حصيداري ڪرڻ چاهيان ٿو. هن عڪس واري آرٽيڪل ۾ آئون ڳالهائي رهيو آهيان ته ڇا ٿي رهيو آهي، اهو ڪيئن ٿي رهيو آهي، ۽ ڪيئن هرڪو ان سان گڏ رهي سگهي ٿو.

انفراسٹرڪچر ڪوڊ جي طور تي: پهرين واقفيت

اسان جي اندروني تقريب ۾ تقريرن ​​جي بنياد تي لکيل مضمونن جو سلسلو جاري آهي DevForum:

1. شروڊنگر جي ٻلي بغير دٻي جي: ورهايل نظام ۾ اتفاق راءِ جو مسئلو.
2. انفراسٽرڪچر جيئن ڪوڊ. (توهان هتي آهيو)
3. C# ماڊل استعمال ڪندي ٽائپ اسڪرپٽ معاهدي جي پيداوار. (جاري آهي...)
4. رافٽ اتفاق الورورٿم جو تعارف. (جاري آهي...)
...

اسان هڪ SRE ٽيم ٺاهڻ جو فيصلو ڪيو، خيالن تي عمل ڪندي گوگل ايس آر. انهن پنهنجن ڊولپرز مان پروگرامرز کي ڀرتي ڪيو ۽ انهن کي ڪيترن ئي مهينن تائين تربيت ڏيڻ لاءِ موڪليو.

ٽيم ھيٺ ڏنل تربيتي ڪم ڪيو:

  • اسان جي انفراسٽرڪچر کي بيان ڪريو، جيڪو گهڻو ڪري Microsoft Azure ۾ ڪوڊ جي صورت ۾ آهي (Terraform ۽ چوڌاري سڀ ڪجهه).
  • ڊولپرز کي سيکاريو ته انفراسٽرڪچر سان ڪيئن ڪم ڪجي.
  • ڊولپرز کي ڊيوٽي لاءِ تيار ڪريو.

اسان انفراسٹرڪچر جي تصور کي ڪوڊ طور متعارف ڪرايو

دنيا جي معمولي نموني ۾ (ڪلاسيڪل انتظاميه)، بنيادي ڍانچي بابت ڄاڻ ٻن هنڌن تي واقع آهي:

  1. يا ماهرن جي سرن ۾ علم جي صورت ۾.انفراسٹرڪچر ڪوڊ جي طور تي: پهرين واقفيت
  2. يا اها معلومات ڪجهه ٽائيپ رائيٽر تي آهي، جن مان ڪجهه ماهرن کي معلوم آهن. پر اها حقيقت ناهي ته هڪ ٻاهران (جي صورت ۾ اسان جي پوري ٽيم اوچتو مري وڃي) اهو معلوم ڪرڻ جي قابل هوندو ته اهو ڪم ڇا آهي ۽ ڪيئن ڪم ڪري ٿو. مشين تي تمام گهڻي معلومات ٿي سگهي ٿي: لوازمات، ڪرونجبس، خوفزده (ڏسو. ڊسڪ لڳائڻ) ڊسڪ ۽ صرف هڪ لامحدود فهرست ڇا ٿي سگهي ٿو. اهو سمجهڻ ڏکيو آهي ته واقعي ڇا ٿي رهيو آهي.انفراسٹرڪچر ڪوڊ جي طور تي: پهرين واقفيت

ٻنهي صورتن ۾، اسان پاڻ کي انحصار ٿيڻ ۾ ڦاسي پيا:

  • يا ڪنهن ماڻهوءَ کان جيڪو فاني آهي، بيماريءَ جو شڪار آهي، پيار ۾ پئجي وڃڻ، مزاج ۾ ڦيرڦار ۽ صرف معمولي برطرفي؛
  • يا جسماني طور تي ڪم ڪندڙ مشين مان، جيڪا پڻ گر ٿي، چوري ٿي وڃي ٿي، ۽ تعجب ۽ تڪليف پيش ڪري ٿي.

اهو چوڻ کان سواءِ وڃي ٿو ته مثالي طور تي هر شي کي انساني پڙهڻ جي قابل، برقرار رکڻ واري، چڱي طرح لکيل ڪوڊ ۾ ترجمو ڪيو وڃي.

اهڙيءَ طرح، انفراسٽرڪچر ايز ڪوڊ (Incfastructure as Code - IaC) ڪوڊ جي صورت ۾ پوري موجوده انفراسٽرڪچر جو تفصيل آهي، ان سان گڏ ان سان ڪم ڪرڻ ۽ ان مان حقيقي بنيادي ڍانچي کي لاڳو ڪرڻ لاءِ لاڳاپيل اوزار.

هر شيءِ کي ڪوڊ ۾ ڇو ترجمو ڪيو؟ماڻهو مشين نه آهن. اهي سڀ ڪجهه ياد نٿا ڪري سگهن. هڪ شخص ۽ مشين جو رد عمل مختلف آهي. ڪا به شيءِ پاڻمرادو ممڪن طور تي انسان طرفان ڪيل ڪنهن به شيءِ کان تيز آهي. سڀ کان اهم شيء سچائي جو هڪ واحد ذريعو آهي.

نوان SRE انجنيئر ڪٿان اچن ٿا؟تنهن ڪري، اسان نوان SRE انجنيئرن کي ڀرتي ڪرڻ جو فيصلو ڪيو، پر انهن کي ڪٿان حاصل ڪجي؟ صحيح جوابن سان ڪتاب (گوگل SRE ڪتاب) اسان کي ٻڌائي ٿو: ڊولپرز کان. آخرڪار، اهي ڪوڊ سان ڪم ڪن ٿا، ۽ توهان حاصل ڪريو مثالي رياست.

اسان پنهنجي ڪمپني کان ٻاهر پرسنل مارڪيٽ تي انهن لاءِ گهڻي وقت کان گهڻو ڳولهيو. پر اسان کي اهو تسليم ڪرڻو پوندو ته اسان کي ڪو به اهڙو نه مليو جيڪو اسان جي درخواستن کي پورو ڪري. مون کي پنهنجن ماڻهن ۾ ڳولڻو پيو.

ڪوڊ جي طور تي انفراسٽرڪچر مسئلا

هاڻي اچو ته مثالن تي نظر وجهون ته بنيادي ڍانچي کي ڪوڊ ۾ هارڊ ڪوڊ ڪيئن ڪري سگهجي ٿو. ڪوڊ سٺو لکيو ويو آهي، اعلي معيار، تبصرن ۽ اشارن سان.

Terraforma کان ڪوڊ جو مثال.

انفراسٹرڪچر ڪوڊ جي طور تي: پهرين واقفيت

جوابي ڪوڊ جو مثال.

انفراسٹرڪچر ڪوڊ جي طور تي: پهرين واقفيت

حضرات، جيڪڏهن رڳو ايترو سادو هجي ها! اسان حقيقي دنيا ۾ آهيون، ۽ اهو هميشه توهان کي حيران ڪرڻ لاء تيار آهي، توهان کي تعجب ۽ مسئلن سان پيش ڪيو. ان کان سواءِ هتي به نٿو ڪري سگهجي.

1. پهريون مسئلو اهو آهي ته اڪثر ڪيسن ۾ IaC ڪجهه قسم جي ڊي ايس ايل آهي.

۽ ڊي ايس ايل، موڙ ۾، ساخت جي وضاحت آهي. وڌيڪ واضح طور تي، توهان کي ڇا هجڻ گهرجي: Json، Yaml، ڪجهه وڏين ڪمپنين مان تبديليون جيڪي پنهنجون ڊي ايس ايل سان گڏ آيا آهن (HCL ٽرافارم ۾ استعمال ٿيندو آهي).

مصيبت اها آهي ته ان ۾ آساني سان اهڙيون واقف شيون شامل نه هجن جيئن:

  • متغير
  • حالتون؛
  • ڪٿي ڪو به رايا نه آهن، مثال طور، Json ۾، ڊفالٽ طور اهي مهيا نه ڪيا ويا آهن؛
  • افعال؛
  • ۽ مان اهڙين اعليٰ سطحي شين جي باري ۾ به نه ڳالهائي رهيو آهيان جيئن ڪلاس، وراثت ۽ اهو سڀ ڪجهه.

2. اهڙي ڪوڊ سان ٻيو مسئلو اهو آهي ته گهڻو ڪري اهو هڪ متضاد ماحول آهي. عام طور تي توهان ويهندا آهيو ۽ C# سان ڪم ڪندا آهيو، يعني. هڪ ٻولي، هڪ اسٽيڪ، هڪ ماحولياتي نظام سان. ۽ هتي توهان وٽ ٽيڪنالاجي جو هڪ وڏو قسم آهي.

اها هڪ تمام حقيقي صورتحال آهي جڏهن بش سان پٿون ڪجهه عمل شروع ڪري ٿو جنهن ۾ Json داخل ڪيو ويو آهي. توھان ان جو تجزيو ڪيو، پوء ڪجھ ٻيو جنريٽر ٻيون 30 فائلون ٺاھي ٿو. ان سڀني لاءِ، ان پٽ متغير Azure Key Vault کان وصول ڪيا ويا آهن، جيڪي هڪ پلگ ان ذريعي گڏ ڪيا ويا آهن drone.io لاءِ Go ۾ لکيل آهي، ۽ اهي متغير yaml ذريعي گذريا آهن، جيڪو jsonnet ٽيمپليٽ انجڻ جي نسل جي نتيجي ۾ پيدا ٿيو هو. اهو تمام ڏکيو آهي سختي سان بيان ڪيل ڪوڊ آهي جڏهن توهان وٽ اهڙو متنوع ماحول آهي.

ھڪڙي ڪم جي فريم ورڪ ۾ روايتي ترقي ھڪڙي ٻولي سان اچي ٿي. هتي اسان ڪيترن ئي ٻولين سان ڪم ڪريون ٿا.

3. ٽيون مسئلو ٽيوننگ آهي. اسان ايڊيٽرن کي کولڻ لاءِ استعمال ڪيو ويو آهي (Ms Visual Studio، Jetbrains Rider) جيڪي اسان لاءِ سڀ ڪجهه ڪندا آهن. ۽ جيتوڻيڪ اسين بيوقوف آهيون، اهي چوندا ته اسان غلط آهيون. اهو عام ۽ قدرتي لڳي ٿو.

پر ويجھي ويجھو ڪٿي آھي VSCode، جنھن ۾ ڪجھ پلگ ان آھن جيڪي ڪنھن نه ڪنھن طرح انسٽال ٿيل آھن، سپورٽ ٿيل يا ناھن. نوان ورجن نڪرندا ۽ سپورٽ نه ٿيا. هڪ فنڪشن کي لاڳو ڪرڻ لاء هڪ عام منتقلي (جيتوڻيڪ اهو موجود آهي) هڪ پيچيده ۽ غير معمولي مسئلو بڻجي ويندو آهي. هڪ متغير جو هڪ سادو نالو هڪ درجن فائلن جي پروجيڪٽ ۾ ريپلي آهي. توھان خوش قسمت ھوندؤ جيڪڏھن اھو رکي ٿو جيڪو توھان جي ضرورت آھي. يقينن، هتي ۽ اتي پٺڀرائي آهي، اتي خودڪار مڪمل آهي، ڪٿي ڪٿي فارميٽنگ آهي (جيتوڻيڪ اهو ونڊوز تي ٽيرافارم ۾ مون لاء ڪم نه ڪيو).

هن لکڻ جي وقت تي vscode-terraform پلگ ان نسخو 0.12 کي سپورٽ ڪرڻ لاءِ اڃا تائين جاري نه ڪيو ويو آهي، جيتوڻيڪ اهو 3 مهينن لاءِ جاري ڪيو ويو آهي.

اهو وقت جي باري ۾ وسارڻ جو وقت آهي ...

  1. ڊيبگ ڪرڻ.
  2. Refactoring اوزار.
  3. خودڪار مڪمل ٿيڻ.
  4. تاليف دوران غلطين کي ڳولڻ.

اهو مذاق آهي، پر اهو پڻ ترقي جو وقت وڌائي ٿو ۽ غلطين جو تعداد وڌائي ٿو جيڪو ناگزير طور تي ٿئي ٿو.

سڀ کان خراب ڳالهه اها آهي ته اسان کي اهو سوچڻ تي مجبور نه ڪيو ويو ته ڪيئن ٺاهيون، فائلن کي فولڊرن ۾ ترتيب ڏيڻ، ڊمپوز ڪرڻ، ڪوڊ کي سنڀالڻ لائق، پڙهڻ لائق وغيره، پر ان بابت سوچڻ تي مجبور آهيون ته مان هن حڪم کي ڪيئن لکي سگهان ٿو، ڇاڪاڻ ته مون ان کي غلط لکيو آهي. .

شروعاتي طور تي، توھان ڪوشش ڪري رھيا آھيو ٽرافيون سکڻ جي، ۽ IDE توھان جي مدد نه ڪري رھي آھي. جڏهن دستاويز موجود آهي، اندر وڃو ۽ ڏسو. پر جيڪڏهن توهان هڪ نئين پروگرامنگ ٻولي داخل ڪري رهيا آهيو، IDE توهان کي ٻڌائي ها ته اهڙي قسم آهي، پر اهڙي ڪا به شيء ناهي. گھٽ ۾ گھٽ int يا string جي سطح تي. هي اڪثر مفيد آهي.

ٽيسٽن بابت ڇا؟

توهان پڇو: "ٽيسٽن بابت ڇا، حضرات پروگرامر؟" سنجيده ماڻهو پيداوار تي هر شي کي جانچيندا آهن، ۽ اهو سخت آهي. هتي ويب سائيٽ تان ٽرافارم ماڊل لاءِ يونٽ ٽيسٽ جو هڪ مثال آهي Microsoft جي.

انفراسٹرڪچر ڪوڊ جي طور تي: پهرين واقفيت

انهن وٽ سٺو دستاويز آهي. مون هميشه Microsoft کي پسند ڪيو آهي ان جي دستاويزن ۽ تربيت جي حوالي سان. پر توھان کي چاچا باب ٿيڻ جي ضرورت نه آھي اھو سمجھڻ لاءِ ته اھو پورو ڪوڊ نه آھي. ساڄي پاسي جي تصديق کي نوٽ ڪريو.

يونٽ ٽيسٽ سان مسئلو اهو آهي ته توهان ۽ مان Json آئوٽ جي درستگي کي جانچي سگھون ٿا. مون کي 5 پيٽرولن ۾ اڇلايو ويو ۽ 2000 لائينن سان گڏ جيسن فوٽ ڪپڙو ڏنو ويو. مان تجزيو ڪري سگهان ٿو ته هتي ڇا ٿي رهيو آهي، تصديق ڪريو ٽيسٽ جا نتيجا...

گو ۾ Json کي پارس ڪرڻ ڏکيو آهي. ۽ توهان کي گو ۾ لکڻ جي ضرورت آهي، ڇاڪاڻ ته گو ۾ ٽيرافارم هڪ سٺي مشق آهي ٽيسٽ لاءِ جنهن ٻولي ۾ توهان لکندا آهيو. ڪوڊ جي جوڙجڪ پاڻ کي تمام ڪمزور آهي. ساڳئي وقت، هي ٽيسٽ لاء بهترين لائبريري آهي.

Microsoft پاڻ ان جا ماڊل لکندو آهي، انهن کي هن طريقي سان جانچيندو آهي. يقينن اهو اوپن سورس آهي. سڀڪنھن شيء جي باري ۾ ڳالهائي رهيو آهيان توهان کي اچي ۽ ٺيڪ ڪري سگهو ٿا. مان ويھي سگھان ٿو ۽ ھڪڙي ھفتي ۾ سڀ ڪجھ ٺيڪ ڪري سگھان ٿو، اوپن سورس وي ايس ڪوڊ پلگ ان، ٽيرافارم، ٺاھيو پلگ ان لاءِ سوار. ٿي سگهي ٿو هڪ ٻه تجزيه نگار لکو، لينٽر شامل ڪريو، ٽيسٽ لاءِ لائبريري ۾ حصو ڏيو. مان سڀ ڪجهه ڪري سگهان ٿو. پر اهو نه آهي جيڪو مون کي ڪرڻ گهرجي.

بهترين طريقا انفراسٽرڪچر جيئن ڪوڊ

اچو ته اڳتي وڌون. جيڪڏهن IaC ۾ ڪي به ٽيسٽ نه آهن، IDE ۽ ٽيوننگ خراب آهن، پوء گهٽ ۾ گهٽ بهترين طريقا هجڻ گهرجي. مان صرف Google Analytics ڏانهن ويو آهيان ۽ ٻن ڳولا سوالن جو مقابلو ڪيو: Terraform بهترين طريقا ۽ c# بهترين طريقا.

انفراسٹرڪچر ڪوڊ جي طور تي: پهرين واقفيت

اسان ڇا ٿا ڏسو؟ بي رحم انگ اکر اسان جي حق ۾ نه آهن. مواد جو مقدار ساڳيو آهي. سي # ڊولپمينٽ ۾، اسان صرف مواد ۾ بيشمار آهيون، اسان وٽ بهترين بهترين طريقا آهن، ماهرن جا لکيل ڪتاب آهن، ۽ ٻين ماهرن جي ڪتابن تي لکيل ڪتاب پڻ آهن جيڪي انهن ڪتابن تي تنقيد ڪن ٿا. سرڪاري دستاويزن جو هڪ سمنڊ، آرٽيڪل، تربيتي ڪورس، ۽ هاڻي پڻ کليل ذريعو ترقي.

جيئن ته IaC جي درخواست لاءِ: هتي توهان ڪوشش ڪري رهيا آهيو معلومات گڏ ڪرڻ جي ٿوري دير سان هاءِ لوڊ يا HashiConf رپورٽن کان ، سرڪاري دستاويزن ۽ Github تي ڪيترن ئي مسئلن کان. انهن ماڊلز کي عام طور تي ڪيئن ورهايو وڃي، انهن سان ڇا ڪجي؟ اهو لڳي ٿو ته اهو هڪ حقيقي مسئلو آهي ... اتي هڪ ڪميونٽي آهي، حضرات، جتي ڪنهن به سوال لاء توهان کي 10 تبصرا ڏنا ويندا Github. پر اهو بلڪل نه آهي.

بدقسمتي سان، هن وقت ۾، ماهر صرف شروع ٿي رهيا آهن. هن وقت تائين انهن مان تمام ٿورا آهن. ۽ ڪميونٽي پاڻ کي ابتدائي سطح تي پھانسي رهي آهي.

هي سڀ ڪيڏانهن پيو وڃي ۽ ڇا ڪجي

توھان ھر شيء کي ڇڏي سگھو ٿا ۽ واپس C# ڏانھن وڃو، سوار جي دنيا ڏانھن. پر نه. جيڪڏهن توهان کي ڪو حل نه ملي سگهي ته توهان اهو ڪرڻ جي تڪليف ڇو ڪندا. هيٺ مان پيش ڪريان ٿو منهنجا موضوعي نتيجا. توهان تبصرن ۾ مون سان بحث ڪري سگهو ٿا، اهو دلچسپ ٿيندو.

ذاتي طور تي، مان ڪجھ شين تي شرط لڳائي رهيو آهيان:

  1. هن علائقي ۾ ترقي تمام تيز ٿي رهي آهي. هتي DevOps لاءِ درخواستن جو هڪ شيڊول آهي.

    انفراسٹرڪچر ڪوڊ جي طور تي: پهرين واقفيت

    موضوع ٿي سگهي ٿو hype، پر حقيقت اها آهي ته دائرو وڌي رهيو آهي ڪجهه اميد ڏئي ٿو.

    جيڪڏهن ڪا شيءِ ايتري تيزيءَ سان وڌي وڃي ته پوءِ هوشيار ماڻهو ضرور ظاهر ٿيندا جيڪي توهان کي ٻڌائيندا ته ڇا ڪرڻ گهرجي ۽ ڇا نه ڪرڻ گهرجي. مقبوليت ۾ اضافو ان حقيقت ڏانهن وڌي ٿو ته ٿي سگهي ٿو ڪنهن وٽ وقت هوندو ته آخرڪار هڪ پلگ ان شامل ڪري jsonnet for vscode، جيڪو توهان کي ctrl+shift+f ذريعي ڳولڻ جي بجاءِ ان فنڪشن کي لاڳو ڪرڻ لاءِ اڳتي وڌڻ جي اجازت ڏيندو. جيئن شيون ترقي ڪن ٿيون، وڌيڪ مواد ظاهر ٿيندا آهن. SRE بابت گوگل کان هڪ ڪتاب جو رليز ان جو هڪ بهترين مثال آهي.

  2. روايتي ترقي ۾ ترقي يافته ٽيڪنالاجي ۽ طريقا موجود آهن جيڪي اسان هتي ڪاميابي سان لاڳو ڪري سگهون ٿا. ها، جانچ ۽ هڪ مختلف ماحول سان گڏ nuances آهن، نا مناسب اوزار، پر عملن جو هڪ وڏو تعداد گڏ ڪيو ويو آهي ته مفيد ۽ مددگار ثابت ٿي سگهي ٿو.

    ھڪڙو ننڍڙو مثال: جوڙي پروگرامنگ ذريعي تعاون. اهو سمجهڻ ۾ تمام گهڻو مدد ڪري ٿو. جڏهن توهان جي ڀرسان ڪو پاڙيسري آهي جيڪو پڻ ڪجهه سمجهڻ جي ڪوشش ڪري رهيو آهي، گڏو گڏ توهان بهتر سمجهي سگهندا.

    سمجھڻ ته ڪيئن ريفيڪٽرنگ ڪيو ويندو آھي ان کي کڻڻ ۾ مدد ڪري ٿي جيتوڻيڪ اھڙي صورتحال ۾. اهو آهي، توهان هڪ ڀيرو هر شيء کي تبديل نه ٿا ڪري سگهو، پر نالو تبديل ڪريو، پوء جڳهه کي تبديل ڪريو، پوء توهان ڪجهه حصو نمايان ڪري سگهو ٿا، او، پر هتي ڪافي رايا نه آهن.

ٿڪل

ان حقيقت جي باوجود ته منهنجو استدلال مايوسي وارو لڳي سگهي ٿو، مان اميد سان مستقبل ڏانهن ڏسان ٿو ۽ خلوص دل سان اميد ڪريان ٿو ته سڀ ڪجهه اسان لاءِ ڪم ڪندو (۽ توهان).

مضمون جو ٻيو حصو اڳتي تيار ڪيو پيو وڃي. ان ۾، مان ان بابت ڳالهائيندس ته ڪيئن اسان پنهنجي سکيا واري عمل کي بهتر بڻائڻ ۽ انفراسٽرڪچر سان ڪم ڪرڻ لاءِ چست ترقي جي طريقن کي استعمال ڪرڻ جي ڪوشش ڪئي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو