Microservices: سائيز جو معاملو، جيتوڻيڪ توھان وٽ ڪبرنيٽس آھي
19 سيپٽمبر ماسڪو ۾ جڳه ورتي پهرين موضوعي گڏجاڻي HUG (Highload++ User Group)، جيڪا microservices لاءِ وقف هئي. اتي هڪ پريزنٽيشن هئي “Operating Microservices: Size Matters, even if You have Kubernetes”، جنهن ۾ اسان مائيڪرو سروسز آرڪيٽيڪچر سان آپريٽنگ منصوبن ۾ فلانٽ جي وسيع تجربي کي شيئر ڪيو. سڀ کان پهريان، اهو سڀني ڊولپرز لاء مفيد ٿيندو جيڪي هن طريقي کي استعمال ڪرڻ بابت سوچڻ وارا آهن انهن جي موجوده يا مستقبل جي منصوبي ۾.
تعارف ڪرائڻ رپورٽ جي وڊيو (50 منٽ، مضمون کان گهڻو وڌيڪ معلوماتي)، انهي سان گڏ ان مان مکيه اقتباس متن جي شڪل ۾.
نوٽ: وڊيو ۽ پيشڪش پڻ هن پوسٽ جي آخر ۾ موجود آهن.
تعارف
عام طور تي هڪ سٺي ڪهاڻي جي شروعات، هڪ بنيادي پلاٽ ۽ هڪ قرارداد آهي. اها رپورٽ هڪ اڳڀرائي وانگر آهي، ۽ ان تي هڪ افسوسناڪ آهي. اهو پڻ نوٽ ڪرڻ ضروري آهي ته اهو مائڪرو سروسز جي ٻاهرئين نظر کي فراهم ڪري ٿو. استحصال.
مان هن گراف سان شروع ڪندس، جنهن جو ليکڪ (2015 ۾) ٿيو مارٽن فولر:
اهو ڏيکاري ٿو ته ڪيئن، هڪ monolithic ايپليڪيشن جي صورت ۾ جيڪو هڪ خاص قدر تائين پهچي ٿو، پيداوار کي رد ڪرڻ شروع ٿئي ٿو. Microservices ان لحاظ کان مختلف هونديون آهن ته انهن سان ابتدائي پيداواري صلاحيت گهٽ هوندي آهي، پر جيئن جيئن پيچيدگي وڌي ويندي آهي، تيئن تيئن ڪارڪردگيءَ ۾ گهٽتائي انهن لاءِ قابل ذڪر نه هوندي آهي.
مان ڪبرنيٽس استعمال ڪرڻ جي صورت ۾ هن گراف ۾ شامل ڪندس:
مائڪرو سروسز سان هڪ ايپليڪيشن ڇو بهتر آهي؟ ڇو ته اهڙي فن تعمير کي فن تعمير لاء سنگين گهرجون پيش ڪري ٿو، جنهن جي نتيجي ۾ مڪمل طور تي ڪبرنيٽس جي صلاحيتن سان ڍڪيل آهن. ٻئي طرف، هن ڪارڪردگيءَ مان ڪجهه هڪ monolith لاءِ ڪارآمد ثابت ٿيندي، خاص طور تي ڇاڪاڻ ته اڄ جو عام monolith بلڪل هڪ monolith نه آهي (تفصيل بعد ۾ رپورٽ ۾ ڪيو ويندو).
ڇا آھي عام microservice فن تعمير؟ اهو توهان کي حقيقي فائدا آڻڻ گهرجي، توهان جي ڪم جي ڪارڪردگي کي وڌائڻ. جيڪڏهن اسان گراف ڏانهن واپس وڃون ٿا، اهو هتي آهي:
جيڪڏهن توهان هن کي سڏيو مفيد، پوءِ گراف جي ٻئي پاسي هوندو نقصانڪار microservices (ڪم ۾ مداخلت):
"مکيه خيال" ڏانهن موٽڻ: ڇا مون کي پنهنجي تجربي تي يقين رکڻ گهرجي؟ هن سال جي شروعات کان وٺي مون ڏٺو آهي 85 منصوبا. اهي سڀئي نه هئا microservices (انهن مان هڪ ٽيون اڌ جي باري ۾ هڪ اهڙي فن تعمير هئي)، پر اهو اڃا تائين هڪ وڏو تعداد آهي. اسان (فلانٽ ڪمپني) آئوٽ سورسرز جي طور تي مختلف قسم جي ايپليڪيشنن کي ڏسڻ جو انتظام ڪندا آهيون جيڪي ٻنهي ننڍين ڪمپنين ۾ (5 ڊولپرز سان) ۽ وڏين (~ 500 ڊولپرز) ۾ ترقي يافته آهن. هڪ اضافو فائدو اهو آهي ته اسان ڏسون ٿا اهي ايپليڪيشنون زندهه ۽ ترقي يافته سالن کان.
ڇو microservices؟
microservices جي فائدن جي باري ۾ سوال اتي آهي تمام خاص جواب اڳ ۾ ئي ذڪر ڪيل مارٽن فولر کان:
modularity جي واضح حدون؛
آزاد تعیناتي؛
ٽيڪنالاجي چونڊڻ جي آزادي.
مون سافٽ ويئر آرڪيٽيڪٽس ۽ ڊولپرز سان تمام گهڻو ڳالهايو آهي ۽ پڇيو آهي ته انهن کي مائڪرو سروسز جي ضرورت ڇو آهي. ۽ مون انهن جي اميدن جي لسٽ ٺاهي. هتي ڇا ٿيو آهي:
ماڊلز جون واضح حدون: هتي اسان وٽ هڪ خوفناڪ مونولٿ آهي، ۽ هاڻي هر شي کي صاف طور تي Git ريپوزٽريز ۾ ترتيب ڏني ويندي، جنهن ۾ هر شيءِ ”شيلفز تي“ آهي، گرم ۽ نرم نه ملايا ويا آهن.
مقرري جي آزادي: اسان آزاديءَ سان خدمتون سرانجام ڏيڻ جي قابل ٿي وينداسين ته جيئن ترقي تيز ٿئي (متوازي طور تي نوان خاصيتون شايع ڪريو)؛
ترقي جي آزادي: اسان هي مائڪرو سروس ڏئي سگهون ٿا هڪ ٽيم/ڊولپر کي، ۽ اهو هڪ ٻئي کي، جنهن جي مهرباني اسان تيزيءَ سان ترقي ڪري سگهون ٿا؛
боوڌيڪ قابل اعتماد: جيڪڏهن جزوي تباهي ٿئي ٿي (20 مان هڪ مائڪرو سروس اچي ٿي)، پوء صرف هڪ بٽڻ ڪم ڪرڻ بند ڪري ڇڏيندو، ۽ سسٽم مڪمل طور تي ڪم ڪرڻ جاري رکندو.
عام (نقصانڪار) مائڪرو سروس فن تعمير
وضاحت ڪرڻ لاءِ ڇو حقيقت اها ناهي جيڪا اسان جي اميد آهي، مان پيش ڪندس اجتماعي ڪيترن ئي مختلف منصوبن جي تجربي جي بنياد تي هڪ microservice فن تعمير جي تصوير.
ھڪڙو مثال ھڪڙو خلاصو آن لائن اسٽور آھي جيڪو Amazon يا گھٽ ۾ گھٽ OZON سان مقابلو ڪرڻ وارو آھي. هن جي microservice فن تعمير هن طرح نظر اچي ٿو:
سببن جي ميلاپ لاء، اهي microservices مختلف پليٽ فارمن تي لکيل آهن:
جيئن ته هر مائڪرو سروس کي خودمختياري هجڻ گهرجي، انهن مان گهڻن کي پنهنجي ڊيٽابيس ۽ ڪيش جي ضرورت آهي. آخري فن تعمير هيٺ ڏنل آهي:
پر اسان کي ڪيترين ئي مائڪرو سروسز کي درست ڪرڻ جي ضرورت آهي؟تبديلي آڻڻ لاء؟ ڇا اسان اهو به اندازو لڳائي سگهون ٿا ته هر شي ورهايل ٽريڪر کان سواءِ ڪيئن ڪم ڪري ٿي (آخر ۾، ڪنهن به درخواست تي عمل ڪيو ويندو آهي اڌ مائڪرو سروسز)؟
ھڪڙو نمونو آھي "گندگي جو وڏو ٿلهو“، ۽ هتي اها ورهايل گندگي جو ڍير بڻجي وئي. ھن جي تصديق ڪرڻ لاءِ، ھتي ھڪڙي اندازي مطابق بيان آھي ته درخواستون ڪيئن ٿيون وڃن:
تعیناتي جي آزادي ...
ٽيڪنيڪل طور تي، اهو حاصل ڪيو ويو آهي: اسان هر مائڪرو سروس کي الڳ الڳ ڪري سگهون ٿا. پر عملي طور تي توهان کي اڪائونٽ ۾ وٺڻ جي ضرورت آهي ته اهو هميشه ڦرندو آهي ڪيتريون ئي microservices، ۽ اسان کي حساب ۾ وٺڻ جي ضرورت آهي انهن جي رولنگ جو حڪم. سٺي طريقي سان، اسان کي عام طور تي هڪ الڳ سرڪٽ ۾ جانچڻ جي ضرورت آهي ته ڇا اسان صحيح ترتيب ۾ ڇڏڻ کي رول ڪري رهيا آهيون.
ٽيڪنالاجي چونڊڻ جي آزادي ...
اها آهي. بس ياد رکو ته آزادي اڪثر ڪري لاقانونيت تي سرحدون آهن. اهو هتي تمام ضروري آهي ته ٽيڪنالاجيون نه چونڊيو صرف انهن سان "راند" ڪرڻ لاء.
ترقي جي آزادي...
پوري ايپليڪيشن لاءِ ٽيسٽ لوپ ڪيئن ٺاهيو (ڪيترن ئي حصن سان)؟ پر توهان اڃا تائين ان کي تازه ڪاري ڪرڻ جي ضرورت آهي. اهو سڀ ڪجهه حقيقت ڏانهن وٺي ٿو ٽيسٽ سرڪٽ جو حقيقي تعدادجنهن کي اسان اصولي طور تي شامل ڪري سگهون ٿا، گهٽ ۾ گهٽ ظاهر ٿئي ٿو.
اهو سڀ ڪجهه مقامي طور تي ترتيب ڏيڻ بابت ڪيئن؟... اهو ظاهر ٿئي ٿو ته اڪثر ڊولپر پنهنجو ڪم آزاديءَ سان ڪندو آهي، پر ”بي ترتيب“، ڇاڪاڻ ته هو ان وقت تائين انتظار ڪرڻ تي مجبور هوندو آهي جيستائين سرڪٽ جاچ لاءِ آزاد نه ٿئي.
جدا جدا ماپ...
ها، پر اهو استعمال ٿيل DBMS جي علائقي ۾ محدود آهي. ڏنل فن تعمير جي مثال ۾، Cassandra کي مسئلا نه هوندا، پر MySQL ۽ PostgreSQL ڪندو.
Боوڌيڪ اعتبار...
نه رڳو حقيقت ۾ هڪ مائڪرو سروس جي ناڪامي اڪثر ڪري سڄي سسٽم جي صحيح ڪارڪردگي کي ٽوڙي ٿو، پر هڪ نئون مسئلو پڻ آهي: ھر مائيڪرو سروس جي غلطي کي برداشت ڪرڻ تمام ڏکيو آھي. ڇاڪاڻ ته مائڪرو سروسز مختلف ٽيڪنالاجيون استعمال ڪنديون آهن (memcache، Redis، وغيره)، هر هڪ لاء توهان کي هر شيء تي سوچڻ ۽ ان تي عمل ڪرڻ جي ضرورت آهي، جيڪو، يقينا، ممڪن آهي، پر وڏي وسيلن جي ضرورت آهي.
لوڊ جي ماپ...
هي واقعي سٺو آهي.
مائڪرو سروسز جي ”روشني“...
اسان وٽ نه رڳو وڏو آهي نيٽ ورڪ مٿي (ڊي اين ايس لاءِ درخواستون وڌي رهيون آهن، وغيره)، پر ان سان گڏوگڏ ڪيترن ئي ذيلي سوالن جي ڪري اسان شروع ڪيو نقل ڊيٽا (اسٽور ڪيش)، جنهن جي نتيجي ۾ هڪ اهم مقدار ۾ اسٽوريج.
۽ هتي اسان جي اميدن سان ملڻ جو نتيجو آهي:
پر اهو سڀ ڪجهه ناهي!
ڇاڪاڻ ته:
گهڻو ڪري اسان کي هڪ پيغام بس جي ضرورت پوندي.
وقت ۾ صحيح وقت تي مسلسل بيڪ اپ ڪيئن ٺاهيو؟ اڪيلو حقيقي ھن لاءِ ٽريفڪ بند ڪرڻ جو اختيار آھي. پر پيداوار ۾ اهو ڪيئن ڪجي؟
جيڪڏهن اسان ڪيترن ئي علائقن جي حمايت جي باري ۾ ڳالهائي رهيا آهيون، پوء انهن مان هر هڪ ۾ استحڪام کي منظم ڪرڻ هڪ تمام محنت وارو ڪم آهي.
مرڪزي تبديليون ڪرڻ جو مسئلو پيدا ٿئي ٿو. مثال طور، جيڪڏهن اسان کي PHP ورزن کي اپڊيٽ ڪرڻ جي ضرورت آهي، اسان کي هر مخزن کي انجام ڏيڻ جي ضرورت پوندي (۽ انهن مان ڪيترائي آهن).
آپريشنل پيچيدگي ۾ واڌ، غير معمولي، تيز آهي.
ان سڀ سان ڇا ڪجي؟
هڪ monolithic ايپليڪيشن سان شروع ڪريو. فولر جو تجربو چوي ٿو ته لڳ ڀڳ سڀ ڪامياب microservice ايپليڪيشنون هڪ monolith جي طور تي شروع ڪيو ته تمام وڏو ٿي ويو ۽ پوء ٽوڙيو ويو. ساڳئي وقت، تقريبن سڀني سسٽم مائڪرو سروسز جي طور تي ٺاهيل شروع کان جلد يا بعد ۾ سنگين مسئلن جو تجربو ڪيو.
هڪ ٻيو قيمتي خيال اهو آهي ته هڪ منصوبي لاءِ مائڪرو سروس آرڪيٽيڪچر سان ڪامياب ٿيڻ لاءِ، توهان کي چڱيءَ طرح ڄاڻڻ گهرجي ۽ موضوع جي ايراضي، ۽ ڪيئن microservices ٺاهڻ لاء. ۽ هڪ موضوع واري علائقي کي سکڻ جو بهترين طريقو هڪ monolith ٺاهڻ آهي.
پر ڇا جيڪڏهن اسان اڳ ۾ ئي هن صورتحال ۾ آهيون؟
ڪنهن به مسئلي کي حل ڪرڻ لاءِ پهريون قدم اهو آهي ته ان سان اتفاق ڪيو وڃي ۽ اهو سمجهڻ گهرجي ته اهو هڪ مسئلو آهي، جنهن ۾ اسان وڌيڪ ڏک نه ٿا چاهيون.
جيڪڏهن، وڏي پئماني تي منوولٿ جي صورت ۾ (جڏهن اسان ان لاءِ اضافي وسيلا خريد ڪرڻ جو موقعو ختم ڪري ڇڏيو آهي)، اسان ان کي ڪٽي ڇڏيون ٿا، ته پوءِ ان صورت ۾ سامهون اچي ٿو ڪهاڻي: جڏهن گهڻيون مائڪرو سروسز هاڻي مدد نه ڪنديون آهن، پر رڪاوٽ ٿينديون آهن. اضافي کي ڪٽيو ۽ وڌايو!
مثال طور، مٿي ڄاڻايل اجتماعي تصوير لاءِ ...
سڀ کان وڌيڪ قابل اعتراض مائڪرو سروسز کان نجات حاصل ڪريو:
فرنٽيڊ نسل لاءِ ذميوار سڀني مائڪرو سروسز کي گڏ ڪريو: