ڪبرنيٽس ۾ ڊيٽا اسٽوريج جا نمونا

ڪبرنيٽس ۾ ڊيٽا اسٽوريج جا نمونا
اي حبر!

اسان توهان کي ياد ڏياريندا آهيون ته اسان هڪ ٻيو انتهائي دلچسپ ۽ مفيد جاري ڪيو آهي هڪ ڪتاب Kubernetes جي نمونن بابت. اهو سڀ سان شروع ٿيو "نمونو"برينڊن برنس، ۽، رستي ۾، اسان وٽ هن حصي ۾ ڪم ڪيو آهي ٻيلي. اڄ اسان توهان کي MinIO بلاگ مان هڪ مضمون پڙهڻ جي دعوت ڏيون ٿا جيڪو مختصر طور تي ڪبرنيٽس ۾ ڊيٽا اسٽوريج جي رجحانن ۽ خاصيتن کي بيان ڪري ٿو.

Kubernetes بنيادي طور تبديل ڪيو آهي روايتي ايپليڪيشن ڊولپمينٽ ۽ ڊولپمينٽ نمونن. ھاڻي ھڪڙي ٽيم ھڪڙي ايپليڪيشن کي ترقي ڪري سگھي ٿي، جانچ ڪري سگھي ٿي، ۽ ڏينھن جي معاملي ۾ - گھڻن ماحولن ۾، سڀ Kubernetes ڪلستر جي اندر. ٽيڪنالاجي جي پوئين نسلن سان اهڙي ڪم کي عام طور تي هفتا لڳن ٿا، جيڪڏهن مهينا نه.

ھي تيز رفتار ڪبرنيٽس پاران مهيا ڪيل خلاصي جي ڪري ممڪن ٿيو آھي - اھو آھي، ڇاڪاڻ⁠تہ ڪبرنيٽس پاڻ فزيڪل يا ورچوئل مشينن جي گھٽ سطح جي تفصيلن سان رابطو ڪري ٿو، صارفين کي مطلوب پروسيسر، ميموري جي مطلوب مقدار، ۽ ڪنٽينر جو تعداد بيان ڪرڻ جي اجازت ڏئي ٿو. مثال طور، ٻين پيٽرولن جي وچ ۾. ڪبرنيٽس جي حمايت ڪندڙ هڪ وڏي برادري سان ۽ ان کي اپنائڻ ۾ مسلسل واڌارو ٿي رهيو آهي، ڪبرنيٽس سڀني ڪنٽينر آرڪيسٽريشن پليٽ فارمن جي وچ ۾ وڏي مارجن سان اڳواڻ آهي.

جيئن ڪبرنيٽس جو استعمال وڌي ٿو، تنهنڪري ان جي اسٽوريج جي نمونن بابت مونجهارو آهي..

هر ڪنهن سان مقابلو ڪرڻ سان ڪبرنيٽس پائي جي هڪ ٽڪري لاءِ (يعني ڊيٽا اسٽوريج)، جڏهن اها ڊيٽا اسٽوريج بابت ڳالهائڻ ايندي آهي، سگنل تمام گهڻو شور ۾ ٻڏي ويندو آهي.
ڪبرنيٽس ايپليڪيشن ڊولپمينٽ، ڊولپمينٽ، ۽ انتظام لاءِ هڪ جديد ماڊل ٺاهي ٿو. هي جديد ماڊل ڳڻپيوڪر مان ڊيٽا اسٽوريج کي ڊيڪپل ڪري ٿو. ڪبرنيٽس جي حوالي سان لاتعلقي کي مڪمل طور تي سمجهڻ لاءِ، توهان کي اهو به سمجهڻ جي ضرورت آهي ته ڪهڙيون رياستي ۽ بي رياست ايپليڪيشنون آهن، ۽ ڊيٽا اسٽوريج ان ۾ ڪيئن ٺهي ٿي. هي اهو آهي جتي S3 پاران استعمال ڪيل REST API اپروچ ٻين حلن جي POSIX/CSI اپروچ تي واضح فائدا آهن.

هن آرٽيڪل ۾، اسان ڪبرنيٽس ۾ ڊيٽا اسٽوريج جي نمونن جي باري ۾ ڳالهائينداسين ۽ خاص طور تي رياستي ۽ بي رياست ايپليڪيشنن جي وچ ۾ بحث کي بهتر سمجهڻ لاءِ انهن جي وچ ۾ ڇا فرق آهي ۽ اهو ضروري ڇو آهي. باقي متن ايپليڪيشنن ۽ انهن جي ڊيٽا اسٽوريج جي نمونن تي نظر ايندو، ڪنٽينرز ۽ ڪبرنيٽس سان ڪم ڪرڻ جي بهترين طريقن جي روشني ۾.

بي رياست ڪنٽينر

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

رياستي ڪنٽينرز

جيڪڏهن هڪ ڪنٽينر مقامي طور تي منسلڪ ڊوائيسز (يا بلاڪ ڊيوائس تي) ڊيٽا کي ذخيرو ڪري ٿو، ته پوءِ ڊيٽا اسٽور جنهن تي اهو رهي ٿو، هڪ نئين نوڊ ڏانهن منتقل ٿيڻو پوندو، ڪنٽينر سان گڏ، ناڪامي جي صورت ۾. اهو ضروري آهي ڇو ته ٻي صورت ۾ ڪنٽينر ۾ هلندڙ ايپليڪيشن صحيح طريقي سان ڪم نه ڪري سگهندي ڇو ته ان کي مقامي ميڊيا تي محفوظ ڪيل ڊيٽا تائين رسائي جي ضرورت آهي. اهڙا ڪنٽينر ڪم ڪرڻ لاء چيو ويندو آهي رياستي.

خالص ٽيڪنيڪل نقطي نظر کان، رياستي ڪنٽينر پڻ ٻين نوڊس ڏانهن منتقل ڪري سگھجن ٿيون. اهو عام طور تي ورهايل فائل سسٽم استعمال ڪندي حاصل ڪيو ويندو آهي يا سڀني نوڊس تي هلندڙ ڪنٽينرز سان ڳنڍيل نيٽ ورڪ اسٽوريج کي بلاڪ ڪريو. هن طريقي سان، ڪنٽينرز کي مسلسل ڊيٽا اسٽوريج لاء حجم تائين رسائي، ۽ معلومات سڄي نيٽ ورڪ تي واقع ڊسڪ تي ذخيرو ٿيل آهي. مان هن طريقي کي سڏيندس "رياستي ڪنٽينر جو طريقو"، ۽ باقي مضمون ۾ آئون ان کي سڏيندس هڪجهڙائي جي خاطر.

ڪبرنيٽس ۾ ڊيٽا اسٽوريج جا نمونا

هڪ عام رياستي ڪنٽينر جي انداز ۾، سڀئي ايپليڪيشن پوڊ هڪ واحد ورهايل فائل سسٽم سان ڳنڍيل آهن- هڪ قسم جي حصيداري اسٽوريج جتي سڀني ايپليڪيشن ڊيٽا رهي ٿي. جڏهن ته ڪجهه تبديليون ممڪن آهن، اهو هڪ اعلي سطحي طريقو آهي.

ھاڻي اچو ته ڏسون ڇو رياستي ڪنٽينر جو طريقو بادل-مرڪزي دنيا ۾ ھڪڙو مخالف نمونو آھي.

Cloud-نيسي ايپليڪيشن ڊيزائن

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

اهو بنيادي طور تي ڊيٽا اسٽوريج لاءِ هڪ نئين معيار جي ابتڙ ۾ مدد ڪري ٿو، يعني ڪلائوڊ بيسڊ اسٽوريج، بنيادي طور تي ڪم ڪرڻ REST API جي بنياد تي ۽ ايپليڪيشن کي مقامي ڊيٽا اسٽوريج جي بوجھل سار سنڀال کان آزاد ڪرڻ. انهي حالت ۾، ايپليڪيشن مؤثر طور تي بي رياست موڊ ۾ وڃي ٿي (جيئن ته رياست ريموٽ اسٽوريج ۾ آهي). جديد ايپليڪيشنون شروع کان ٺهيل آهن انهي فڪر سان ذهن ۾. ضابطي جي طور تي، ڪنهن به جديد ايپليڪيشن جيڪا هڪ قسم جي ڊيٽا کي پروسيس ڪري ٿي (لاگ، ميٽا ڊيٽا، بلب، وغيره) هڪ ڪلائوڊ-ايئنٽيڊ پيراڊم جي مطابق ٺهيل آهي، جتي رياست کي خاص طور تي ان جي اسٽوريج لاء وقف ڪيل سافٽ ويئر سسٽم ڏانهن منتقل ڪيو ويندو آهي.

رياستي ڪنٽينر جو طريقو اهو سڄو نمونو واپس آڻيندو آهي جتي اهو شروع ٿيو هو!

ڊيٽا کي ذخيرو ڪرڻ لاءِ POSIX انٽرفيس استعمال ڪرڻ سان، ايپليڪيشنون هلن ٿيون ڄڻ ته اهي رياستي هجن، ۽ ان جي ڪري، اهي ڪلائوڊ سينٽرڪ ڊيزائن جي سڀ کان اهم اصولن کان پري ٿي وڃن ٿيون، يعني ايپليڪيشن ورڪر ٿريڊز جي سائيز کي مختلف ڪرڻ جي صلاحيت ايندڙ آمدن تي منحصر ڪري ٿي. input. load، نئين نوڊ ڏانھن منتقل ڪريو جيئن ئي موجوده نوڊ ناڪام ٿئي ٿي، وغيره.

هن صورتحال تي هڪ ويجھو نظر وجهڻ سان، اسان کي معلوم ٿئي ٿو ته جڏهن ڊيٽا اسٽور چونڊيو، اسان کي بار بار POSIX بمقابله REST API دشمني سان منهن ڏيڻو پوي ٿو، پر ڪبرنيٽس ماحول جي ورهايل فطرت جي ڪري POSIX مسئلن جي اضافي واڌ سان. خاص طور تي،

  • POSIX چيٽ آهي: POSIX semantics جي ضرورت آهي ته هر آپريشن کي ميٽا ڊيٽا ۽ فائل بيان ڪندڙن سان لاڳاپيل هجي جيڪي آپريشن جي حالت کي برقرار رکڻ ۾ مدد ڪن. اهو نتيجو اهم قيمتن ۾ آهي جنهن جو ڪوبه حقيقي قدر ناهي. آبجیکٹ اسٽوريج APIs، خاص طور تي S3 API، انهن گهرجن کان نجات حاصل ڪريو، ايپليڪيشن کي فائر ڪرڻ جي اجازت ڏين ٿا ۽ پوء "وساري" ڪال بابت. اسٽوريج سسٽم جو جواب ظاهر ڪري ٿو ته عمل ڪامياب هو يا نه. جيڪڏهن اهو ناڪام ٿئي ٿو، ايپليڪيشن ٻيهر ڪوشش ڪري سگهي ٿي.
  • نيٽ ورڪ پابنديون: هڪ ورهايل سسٽم ۾، اهو اشارو آهي ته ٿي سگهي ٿو ڪيتريون ئي ايپليڪيشنون آهن جيڪي ڊيٽا کي ساڳي منسلڪ ميڊيا تي لکڻ جي ڪوشش ڪري رهيا آهن. تنهن ڪري، نه رڳو ايپليڪيشنون ڊيٽا جي منتقلي بينڊوڊٿ لاءِ هڪ ٻئي سان مقابلو ڪنديون (ميڊيا ڏانهن ڊيٽا موڪلڻ لاءِ)، پر اسٽوريج سسٽم پاڻ هن بينڊوڊٿ لاءِ مقابلو ڪندو جسماني ڊسڪ تي ڊيٽا موڪلڻ سان. POSIX جي بيخبري جي ڪري، نيٽ ورڪ ڪالن جو تعداد ڪيترائي ڀيرا وڌي ٿو. ٻئي طرف، S3 API مهيا ڪري ٿو نيٽ ورڪ ڪالن جي وچ ۾ واضح فرق انهن جي وچ ۾ جيڪي ڪلائنٽ کان سرور تائين پيدا ٿين ٿا ۽ جيڪي سرور جي اندر ٿين ٿا.
  • حفاظت: POSIX سيڪيورٽي ماڊل فعال انساني شموليت لاءِ ٺاهيو ويو آهي: منتظمين هر صارف يا گروپ لاءِ مخصوص رسائي جي سطح کي ترتيب ڏين ٿا. بادل جي مرڪز واري دنيا سان ٺهڪندڙ اهو نمونو ڏکيو آهي. جديد ايپليڪيشنون API تي ٻڌل سيڪيورٽي ماڊلز تي ڀاڙين ٿيون، جتي رسائي جا حق مقرر ڪيا ويا آهن جيئن پاليسين جي سيٽ، سروس اڪائونٽس، عارضي سندون، وغيره مختص ڪيا ويا آهن.
  • انتظام: Stateful containers ڪجهه انتظام مٿي آهي. اسان ڊيٽا تائين متوازي رسائي کي هم وقت سازي ڪرڻ جي باري ۾ ڳالهائي رهيا آهيون، ڊيٽا جي استحڪام کي يقيني بڻائي، اهو سڀ ڪجهه احتياط سان غور ڪرڻ جي ضرورت آهي ته ڪهڙي ڊيٽا جي رسائي جي نمونن کي استعمال ڪرڻ لاء. اضافي سافٽ ويئر کي انسٽال ڪيو وڃي، مانيٽر ڪيو وڃي، ۽ ترتيب ڏنو وڃي، اضافي ترقي جي ڪوشش جو ذڪر نه ڪرڻ.

ڪنٽينر ڊيٽا اسٽوريج انٽرفيس

جڏهن ته ڪنٽينر اسٽوريج انٽرفيس (CSI) Kubernetes حجم جي پرت جي واڌاري ۾ وڏي مدد ڪئي وئي آهي، جزوي طور تي ان کي ٽئين پارٽي اسٽوريج وينڊرز ڏانهن آئوٽ سورس ڪندي، اهو پڻ اڻڄاتل طور تي يقين ڏياريو آهي ته رياستي ڪنٽينر جو طريقو تجويز ڪيل طريقو آهي. Kubernetes ۾ ڊيٽا محفوظ ڪرڻ.

CSI هڪ معيار جي طور تي ترقي ڪئي وئي هئي ثالث بلاڪ ۽ فائل اسٽوريج سسٽم مهيا ڪرڻ لاءِ ميراثي ايپليڪيشنن کي جڏهن Kubernetes تي هلندي. ۽، جيئن ته هي آرٽيڪل ڏيکاريو ويو آهي، صرف هڪ صورتحال جنهن ۾ هڪ رياستي ڪنٽينر جو طريقو (۽ CSI ان جي موجوده شڪل ۾) احساس پيدا ڪري ٿو جڏهن ايپليڪيشن پاڻ هڪ ميراثي نظام آهي جنهن ۾ اهو ممڪن ناهي ته اعتراض اسٽوريج API لاء سپورٽ شامل ڪرڻ. .

اهو سمجهڻ ضروري آهي ته CSI ان جي موجوده شڪل ۾ استعمال ڪندي، اهو آهي، حجم کي وڌائيندي جڏهن جديد ايپليڪيشنن سان ڪم ڪري رهيا آهيون، اسان کي لڳ ڀڳ ساڳئي مسئلن کي منهن ڏينداسين جيڪي سسٽم ۾ پيدا ٿيا آهن جتي ڊيٽا اسٽوريج کي POSIX انداز ۾ منظم ڪيو ويو آهي.

هڪ بهتر انداز

انهي صورت ۾، اهو سمجهڻ ضروري آهي ته اڪثر ايپليڪيشنون موروثي طور تي خاص طور تي رياستي يا بي رياست ڪم لاءِ ٺهيل نه آهن. اهو رويو مجموعي سسٽم جي فن تعمير ۽ مخصوص ڊيزائن جي چونڊ تي منحصر آهي. اچو ته رياستي ايپليڪيشنن بابت ٿورو ڳالهايون.

اصول ۾، سڀ اپليڪيشن ڊيٽا ڪيترن ئي وسيع قسمن ۾ ورهائي سگهجي ٿو:

  • لاگ ڊيٽا
  • ٽائم اسٽيمپ ڊيٽا
  • ٽرانزيڪشن ڊيٽا
  • ميٽاداٽا
  • ڪنٽينر تصويرون
  • بلب (بائنري وڏو اعتراض) ڊيٽا

اهي سڀئي ڊيٽا جا قسم جديد اسٽوريج پليٽ فارمن تي تمام سٺي نموني سان سهڪار ڪيا ويا آهن، ۽ انهن مان هر هڪ مخصوص فارميٽ ۾ ڊيٽا پهچائڻ لاءِ تيار ڪيل ڪيترائي ڪلائوڊ-آبائي پليٽ فارم آهن. مثال طور، ٽرانزيڪشن ڊيٽا ۽ ميٽاداٽا شايد جديد ڪلائوڊ-آبائي ڊيٽابيس ۾ رهجي وڃن جهڙوڪ CockroachDB، YugaByte، وغيره. ڪنٽينر تصويرون يا بلب ڊيٽا ذخيرو ٿي سگھي ٿو ڊاڪر رجسٽري ۾ MinIO جي بنياد تي. ٽائم اسٽيمپ ڊيٽا کي ٽائم سيريز ڊيٽابيس ۾ محفوظ ڪري سگھجي ٿو جهڙوڪ InfluxDB وغيره. اسان هتي هر ڊيٽا جي قسم ۽ ان جي ايپليڪيشنن بابت تفصيل ۾ نه وينداسين، پر عام خيال اهو آهي ته مسلسل ڊيٽا اسٽوريج کان بچڻ لاء جيڪو مقامي ڊسڪ تي چڙهڻ تي ڀاڙي ٿو.

ڪبرنيٽس ۾ ڊيٽا اسٽوريج جا نمونا

اضافي طور تي، اهو هڪ عارضي ڪيشنگ پرت مهيا ڪرڻ لاء اڪثر اثرائتو آهي جيڪو ايپليڪيشنن لاء هڪ عارضي فائل اسٽور جي طور تي ڪم ڪري ٿو، پر ايپليڪيشنن کي هن پرت تي سچائي جو ذريعو نه هجڻ گهرجي.

رياستي ايپليڪيشن اسٽوريج

جڏهن ته اڪثر ڪيسن ۾ ايپليڪيشنن کي اسٽيٽ بيس رکڻ لاءِ ڪارآمد هوندو آهي، اهي ايپليڪيشنون جيڪي ڊيٽا کي ذخيرو ڪرڻ لاءِ ٺهيل هونديون آهن- جيئن ته ڊيٽابيس، آبجیکٹ اسٽور، ڪي-ويليو اسٽور- لازمي طور رياستي هونديون. اچو ته ڏسو ته اهي ايپليڪيشنون ڪبرنيٽس تي ڇو لڳل آهن. اچو ته MinIO کي مثال طور وٺون، پر ساڳيا اصول ڪنهن ٻئي وڏي ڪلائوڊ-آبائي اسٽوريج سسٽم تي لاڳو ٿين ٿا.

ڪلائوڊ-مقامي ايپليڪيشنون ٺهيل آهن ڪنٽينرز ۾ موجود لچڪ جو پورو فائدو وٺڻ لاءِ. هن جو مطلب اهو آهي ته اهي ماحول جي باري ۾ ڪو به تصور نه ڪندا آهن جنهن ۾ انهن کي مقرر ڪيو ويندو. مثال طور، MinIO هڪ اندروني ايريسر ڪوڊنگ ميڪانيزم استعمال ڪري ٿو سسٽم کي ڪافي لچڪ سان مهيا ڪرڻ لاءِ آپريشنل رهڻ لاءِ جيتوڻيڪ اڌ ڊسڪ ناڪام ٿي وڃن. MinIO پڻ ڊيٽا جي سالميت ۽ سيڪيورٽي کي منظم ڪري ٿو ملڪيت جي سرور-سائڊ هيشنگ ۽ انڪرپشن استعمال ڪندي.

اهڙين ڪلائوڊ سينٽرڪ ايپليڪيشنن لاءِ، مقامي مسلسل حجم (PVs) تمام آسان آهن جيئن ته بيڪ اپ اسٽوريج. مقامي PV خام ڊيٽا کي ذخيرو ڪرڻ جي صلاحيت مهيا ڪري ٿي، جڏهن ته انهن PVs جي چوٽي تي هلندڙ ايپليڪيشنون آزاد طور تي ڊيٽا کي ماپڻ ۽ وڌندڙ ڊيٽا جي گهرجن کي منظم ڪرڻ لاء معلومات گڏ ڪن ٿيون.

اهو طريقو CSI-based PVs جي ڀيٽ ۾ تمام آسان ۽ خاص طور تي وڌيڪ اسپيبلبل آهي، جيڪي سسٽم ۾ ڊيٽا مينيجمينٽ ۽ بيڪارگي جي پنهنجي پرت کي متعارف ڪرايو؛ نقطو اهو آهي ته اهي تہه عام طور تي رياستي هجڻ لاءِ ٺهيل ايپليڪيشنن سان ٽڪراءُ ڪندا آهن.

حسابن مان ڊيٽا کي ختم ڪرڻ لاءِ مضبوط تحريڪ

هن آرٽيڪل ۾، اسان انهي بابت ڳالهايو آهي ته ڪيئن ايپليڪيشنون رياست کي بچائڻ کان سواء ڪم ڪرڻ لاء ٻيهر ترتيب ڏني وينديون آهن، يا، ٻين لفظن ۾، ڊيٽا کي محفوظ ڪرڻ ان تي ڪمپيوٽنگ کان ڌار ڪيو ويو آهي. نتيجي ۾، اچو ته هن رجحان جا ڪجهه حقيقي مثال ڏسو.

اسپار, هڪ نمايان ڊيٽا اينالائيٽڪس پليٽ فارم، روايتي طور تي بيان ڪيو ويو آهي ۽ HDFS تي لڳايو ويو آهي. جڏهن ته، جيئن اسپارڪ ڪلائوڊ-سينٽرڪ دنيا ۾ منتقل ٿي رهيو آهي، پليٽ فارم کي ’s3a‘ استعمال ڪندي غير ملڪي استعمال ڪيو پيو وڃي. اسپارڪ s3a استعمال ڪري ٿو رياست کي ٻين سسٽم ۾ منتقل ڪرڻ لاءِ، جڏهن ته اسپارڪ ڪنٽينر پاڻ کي مڪمل طور تي بي رياست هلائي ٿو. وڏي ڊيٽا اينالائيٽڪس جي ميدان ۾ ٻيا وڏا ڪاروباري رانديگر، خاص طور تي، عمودي, ٽراداتا, گرين پلم انهن تي ڊيٽا اسٽوريج ۽ حسابن جي الڳ ٿيڻ سان گڏ ڪم ڪرڻ لاء پڻ منتقل ٿي رهيا آهن.

ساڳيو نمونو ٻين وڏن تجزياتي پليٽ فارمن تي پڻ ڏسي سگھجي ٿو، بشمول Presto، Tensorflow کان R، Jupyter. ريموٽ ڪلائوڊ اسٽوريج سسٽم کي آف لوڊ ڪرڻ سان، توهان جي ايپليڪيشن کي منظم ڪرڻ ۽ ماپ ڪرڻ تمام آسان ٿي وڃي ٿو. ان کان علاوه، اهو مختلف قسم جي ماحول ۾ ايپليڪيشن جي پورائيزيشن کي آسان بڻائي ٿو.

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

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