अपरिवर्तनीय सर्वर क्या हैं?


23

अपरिवर्तनीय सर्वर के बारे में कुछ प्रश्न हैं , जैसे:

यह स्पष्ट लगता है कि यह सर्वरों के साथ करना है (जो मुझे मिलता है)। और बस अपरिवर्तनीय के व्याकरण को पचाते हुए , मुझे लगता है कि इसका " म्यूट करने के लिए संभव नहीं" के साथ कुछ करना होगा । यदि वह अनुमान करीब है, तो मुझे कोई सुराग नहीं है कि वास्तव में क्या म्यूट नहीं किया जा सकता है (और मुझे संदेह है कि इसका साउंडकार्ड या अन्य किसी के साथ क्या करना है)।

मेरे सवाल :

  • वास्तव में एक "अपरिवर्तनीय सर्वर" (DevOps के संदर्भ में) क्या है?
  • उनका उपयोग क्यों किया जाता है?

4
म्यूट करने के लिए संभव नहीं है
एवगेनी

3
@Evgeny: ggggggggggggrrrrrrrrrrrrrrrr, मैं करीब था, लेकिन पूरी तरह से मेरी के साथ गलत मूक (मुझ पर हंसते नहीं करते कृपया ...) अनुमान।
Pierre.Vriens


मुझे खेद है कि मैं इतना कुंद हो गया था, लेकिन "अपरिवर्तनीय" को परिभाषित करने के लिए एक सरल इंटरनेट खोज थी? मुझे लगता है कि प्रश्न इससे बड़ा है, लेकिन अनुमान लगाने के बजाए शब्द का अर्थ देखना आपको एक अच्छी शुरुआत दे सकता है।
एड्रियन

@ एड्रियन कोई समस्या नहीं है जो कुंद हो रही है (क्योंकि मैं ईएसएल पीड़ित हूं, मुझे Google को ऐसा करना होगा जो वास्तव में कुंद की सटीक पहचान प्राप्त करे)। हालांकि मुझे आश्चर्य है कि अगर आपके लोग इस मेटा से वाकिफ हैं ? इसके अलावा, मैं विकिपीडिया जैसे विकल्पों के बजाय, DevOps विशेषज्ञों से सीखना चाहूंगा।
Pierre.Vriens

जवाबों:


19

अपरिवर्तनीयता अक्सर कंप्यूटर विज्ञान हलकों में उपयोग किया जाने वाला एक शब्द है, जो आमतौर पर "निर्माण के बाद बदलने के लिए संभव नहीं" के लिए नीचे उबलता है। यह आमतौर पर समानता, संगामिति, और थ्रेड सुरक्षा के संदर्भ में उपयोग किया जाता है।

उस विषय की चर्चा आकर्षक है, लेकिन आमतौर पर स्टैक ओवरफ्लो पर कहीं और पाया जा सकता है । मैं यहाँ इसमें डुबकी लगाने का आग्रह कर रहा हूँ। प्रमुख अवधारणा 'निर्माण के बाद परिवर्तन संभव नहीं है'।

कल्पना कीजिए कि, अमेज़ॅन पर, आप एक वेब सेवा को मशीन इमेज (एएमआई - एक पूर्व-निर्मित उदाहरण जिसे आप बार-बार पुन: प्रावधान कर सकते हैं) में पकाकर तैनात करते हैं। यह एक बैकएंड डेटाबेस से जुड़ता है क्रेडेंशियल के माध्यम से यह स्टार्टअप पर एक रजिस्ट्री से बाहर निकलता है। यह एक लॉगिंग टूल जैसे स्प्लंक में लॉग्स डंप करता है। दिन-प्रतिदिन के सामान्य ऑपरेशन के लिए, आपके पास इस बॉक्स में ssh का कोई कारण नहीं है। यदि आपको उस सेवा को स्केल करने की आवश्यकता है, तो आप बस उस एएमआई के अधिक उदाहरण बनाते हैं और एक लोड बैलेंसर को समायोजित करते हैं। इसे नीचे कताई बस उदाहरणों और लोड बैलेंसरों का विनाश है।

दिन-प्रतिदिन के संचालन के लिए, इस बॉक्स में परिवर्तन का कोई कारण नहीं है । हम सिर्फ एएमआई से अधिक आग लगा सकते हैं।

जब आपको ओएस-स्तरीय सुरक्षा पैच प्रदान करने की आवश्यकता होती है तो क्या होता है? यह तब होता है जब आपके पास करने का निर्णय होता है ... क्या आप एक नए एएमआई को स्थापित पैच के साथ सेंकते हैं और सभी चल रहे उदाहरणों को फिर से जोड़ते हैं, या क्या आप मौजूदा छवियों में ssh और पैच को अपडेट करते हैं? ऐसे बहुत सारे लोग हैं, जो बस में ssh करेंगे। 'अपरिवर्तनीय वास्तुकला' के अनुयायी सिर्फ मुझ पर चिल्लाते हैं, यहां तक ​​कि इस तरह की बात करने का सुझाव भी संभव है।

इम्यूटेबिलिस्ट (अगर ऐसा कोई शब्द है) नई अमी को पाक करने की वकालत करते हैं। वे एक मशीन में कभी भी ssh को हटाने के लिए सभी कारणों को हटाने की वकालत करते हैं। वे इस बात की वकालत करते हैं कि रिपॉजिटरी से कॉन्फिगर विवरण निकालकर उस मशीन के स्टार्टअप पर कोई विशिष्ट मशीन कॉन्फ़िगरेशन होना चाहिए। यह 'मवेशियों की परम अभिव्यक्ति है, पालतू जानवर नहीं'।

अपरिवर्तनीय वास्तुकला विशेष रूप से मशीन कॉन्फ़िगरेशन के बारे में है जो मशीन छवि के निर्माण के बाद बदलने का कोई कारण नहीं है । अगर कुछ बदलने की जरूरत है, एक नई उदाहरण छवि को सेंकना, पुराने को बंद करना, नया लाना।


"पुराना बंद करो, नया लाओ"। या यदि आपकी वास्तुकला इसे अनुमति देती है, तो नया लाएं, लोड बैलेंसर को समायोजित करें, पुराने को बंद करें। इस तरह आप इसे कभी भी पसंद कर सकते हैं, यहाँ तक कि पीक टाइम के बीच में भी। :)
टिम मालोन

कार्यात्मक प्रोग्रामिंग (1960 के दशक) से अपरिवर्तनीयता, अब यह महसूस किया जा रहा है कि न केवल यह बग्स को कम करता है (कुछ ऐसा है जिसे अक्सर ध्यान नहीं दिया जाता है), बल्कि संगामिति के साथ भी सहायता करता है।
सीटीएल-अल्ट-डेलोर

मैं वास्तव में इस शानदार जवाब पर किसी भी तरह से दिलचस्पी ले सकता हूं कि कैसे मॉनिटरिंग एजेंट या अतिरिक्त सॉफ़्टवेयर जो मूल में सेंकना मुश्किल हो सकता है, यहां खेलने के लिए आ सकता है। उदाहरण के लिए, एपीएम मॉनिटरिंग सॉफ्टवेयर जिसे निर्माण और परिवर्तन मापदंडों के बाद नई मशीन वातावरण का पता लगाना है। मैं एएसएम में एसएसएम और स्वचालन को तैनात करने के लिए खोज कर रहा हूं, लेकिन अतिरिक्त एजेंटों से निपटने के दौरान एएमआई / छवियों के साथ अपरिवर्तनीय चर्चा करने के लिए बहुत कम पाया गया है जो बाद में स्थापित हो सकते हैं।
शेल्डन

10

क्लाउड प्रौद्योगिकियों ने हार्डवेयर और सॉफ़्टवेयर के बीच सीमा को स्थानांतरित कर दिया ताकि कई तकनीकी संचालन पूर्व में हार्डवेयर दुनिया के अनन्य नागरिक भी सॉफ़्टवेयर दायरे के विषय हों। साझा कंप्यूटिंग वातावरण कंप्यूटर के रूप में 1 पुराना हो सकता है, लेकिन क्लाउड प्रौद्योगिकियां उनके साथ बातचीत करने के लिए सुविधाजनक और परिचित रूपकों की पेशकश करके उन्हें लोकप्रिय बना सकती हैं: क्लाउड उपयोगकर्ता एक उदाहरण, एक पूर्ण कंप्यूटर या एक नकल सुरक्षित रखते हैं, जबकि पुराने साझा कंप्यूटिंग वातावरण में सभी संभव सेट होते हैं अनपेक्षित सीमाओं और "आपके प्रोग्राम को उस एफ़टीपी सर्वर पर अपलोड किया जाना है, पर्यावरण एक्स में चलेगा (आमतौर पर जो भी सॉफ़्टवेयर आप उपयोग करना चाहते हैं उसके 10y पुराने संस्करण के साथ), 60 मिनट के लिए" पूर्व या वास्तविक उपयोगकर्ताओं के लिए परिचित लग सकता है कंप्यूटिंग केंद्रों की।

इस पारी का व्यावहारिक परिणाम यह है कि तैनाती प्रक्रियाओं को अब सॉफ्टवेयर कलाकृतियों द्वारा दर्शाया जा सकता है (परिनियोजन प्रक्रियाएँ निर्देश बता रही हैं कि डेटाबेस, वेब-सर्वर या जो कुछ भी इस बुनियादी ढाँचे के साथ है, उस नेटवर्क के साथ, जहाँ वे चलते हैं, के साथ सेटअप करना।) इन नए लेंसों के साथ तैयार किया गया, सर्वरों का मैनुअल रखरखाव बहुत अधिक दिखता है। उत्पादन कोड का मैनुअल पैचिंग - जो केवल बहुत ही दुर्लभ अवसरों में एक वांछनीय चीज है। मैनुअल रखरखाव वास्तव में उत्पादन में चल रही प्रणालियों और इन प्रणालियों का वर्णन करने वाले कोड के बीच विसंगतियों को पेश करने के लिए अतिसंवेदनशील है, जिसका अर्थ है अपरिवर्तनीय व्यवहार और असंभव बग विश्लेषण, दोहरी बग फिक्सिंग और अन्य आपदाएं।

अपरिवर्तनीय सर्वर पैटर्न बस ऊपर मंत्र के बादल के संचालन के लिए स्थानांतरण, जो हम चल रहे कार्यक्रमों के मैनुअल रखरखाव से बचना चाहिए के अनुसार है। सेवर्स को मैन्युअल रूप से कॉन्फ़िगर करने के बजाय, अपरिवर्तनीय सर्वर पैटर्न इस कॉन्फ़िगरेशन को स्वचालित करने की सिफारिश करता है।

कार्यान्वयन जायके

जबकि अपरिवर्तनीय सर्वर पैटर्न का सामान्य विचार काफी स्पष्ट है, कार्यान्वयन की बारीकियों का एक बहुत कुछ है। उदाहरण के लिए, कुछ दृष्टिकोण सर्वर को अद्यतन नहीं करने का सुझाव देते हैं लेकिन इसके बजाय व्यवस्थित रूप से सर्वरों को प्रतिस्थापित करते हैं। ऐसा इसलिए है क्योंकि पैदावार की स्थिति को अद्यतन करने के लिए जहां एक तैनाती में कई अलग-अलग समय पर सर्वर शुरू होते हैं और कई, अलग-अलग, अद्यतन प्रक्रियाओं से गुजरते हैं, जो कि सर्वर के एक अमानवीय सेट का अर्थ है और सर्वर को अपने काम को संभालने में सूक्ष्म अंतर पैदा कर सकता है। एक दूसरा लोकप्रिय भिन्नता बिंदु है, सर्वर तक दूरस्थ पहुंच के बारे में अनुशासन। कुछ सर्वरों को पूरी तरह से दूरस्थ प्रशासनिक पहुंच को अक्षम करना पसंद करते हैं, यह सुनिश्चित करने के लिए कि मैनुअल रखरखाव कभी नहीं होता है।

इतिहास नोट

मेरे ज्ञान के सर्वश्रेष्ठ के लिए, "अपरिवर्तनीय सर्वर" शब्द कीफ मॉरिस द्वारा लोकप्रिय किया गया है, लेकिन यह विचार बहुत पुराना है। 1999 में फ्रीबीएसडी जेलों ने पहले से ही डिस्पोजेबल कंप्यूटिंग वातावरण के विन्यास को पूरी तरह से स्वचालित करने के विचार को लोकप्रिय बना दिया, इस तरह मैंने इस तकनीक का वर्णन करने के लिए इस नाम को सुनने से कई साल पहले "अपरिवर्तनीय सर्वर" पैटर्न को लागू करना शुरू कर दिया था।

CD-ROMS पर आधारित भौतिक अपरिवर्तनीयता की आड़ में, अपरिवर्तनीयता, विश्वसनीय कंप्यूटिंग सिस्टम के निर्माण के लिए एक लोकप्रिय उपाय भी है। यह अपरिवर्तनीय सर्वर पैटर्न के साथ गलत नहीं है।


1 अगर हम कंप्यूटर के रूप में स्वचालित करघा तालिकाओं या रोलर अंगों की गिनती नहीं करते हैं।


1
वाह, अभी तक एक और दिलचस्प व्याख्या, मर्सी! अब मुझे वास्तव में यह तय करने में परेशानी हो रही है कि कौन सा उत्तर स्वीकार किया जाए (कृपया उस पर धैर्य रखें, और कृपया यह जान लें कि मैं केवल अधिकतम 1 को ही चिह्नित कर सकता हूं, हालांकि इस समय मैं बिल्कुल भी निर्णय नहीं कर रहा हूं कि किस पर .. ।)।
Pierre.Vriens

1
खुशी के साथ! - मुझे लगता है कि किसी उत्तर को स्वीकार करने के लिए कई दिनों तक इंतजार करना एक अच्छा विचार है, इससे उपयोगकर्ताओं को अधिक उत्तर लिखने की संभावना बढ़ जाती है।
माइकल ली बारबियर ग्रुएनवाल्ड

9

अपरिवर्तनीय सर्वर वे सर्वर हैं जिन पर कोई परिवर्तन नहीं किया जा सकता है (अपडेट और सुरक्षा पैच के अलावा अन्य आदर्श रूप से)। सर्वर पर सॉफ़्टवेयर को बदलने के बजाय, आप वांछित सॉफ़्टवेयर के साथ एक नया सर्वर स्पूल करते हैं और फिर पुराने को समाप्त करते हैं।

यह अवधारणा यह सुनिश्चित करने में मदद करती है कि आपका परीक्षण, विकास और क्यूए सर्वर सभी समान हैं, जो इस प्रश्न के दायरे से बाहर कई कारणों से महत्वपूर्ण है। अपरिवर्तनीय सर्वर का एक अन्य लाभ पुराने सर्वर पर एप्लिकेशन को रोलबैक करने की क्षमता है। उदाहरण के लिए, मुझे K को उत्पादन सर्वर 1 में बदलने की आवश्यकता है, इसलिए मैंने सर्वर 2 को बदल दिया और K को बदल दिया। अब 10 मिनट के बाद, मैंने नोटिस किया कि K ने मेरे आवेदन के साथ कुछ तोड़ दिया है, बजाय इसे ठीक करने के, जो घंटों लग सकता है। और संभावित रूप से मेरे ग्राहकों के लिए डाउनटाइम का कारण बनता है, मैं ट्रैफ़िक को सर्वर 1 पर वापस भेज देता हूं, जबकि मुझे पता है कि 2 के साथ क्या गलत है।


हम्म, दिलचस्प ... मुझे इसे पचाने के लिए कुछ समय चाहिए ... जानिए जैसे "1 प्रश्न का उत्तर 10 नए प्रश्नों को ट्रिगर करता है?" ...
Pierre.Vriens

1
जल्दी से "रोलबैक" करने के लिए अभ्यास को अक्सर "ब्लू / ग्रीन तैनाती" (लाल / काला भी कहा जाता है, यह निर्भर करता है कि कौन कॉलिंग करता है)।
एवगेनी

@ स्वदेशी और सभी से भी बदतर, ए / बी तैनाती भी नामित किया जा सकता है, ए / बी प्रयोगों के साथ लाइन धुंधला। (और इससे भी बदतर, जब इस तरह की तैनाती, एक ही ऐप के संस्करण को
गुणा करता है

मुझे हमेशा बताया गया कि ब्लू / ग्रीन डिप्लॉयमेंट किसी मौजूदा एप्लिकेशन में अपडेट की तैनाती के लिए थे, सर्वर के लिए नहीं। @ ईवगेनी
कछुए

हाँ। आप सर्वर, कंटेनर, एप्लिकेशन और व्हाट्सएप को स्वैप कर सकते हैं और फिर भी इसे ब्लू / ग्रीन कह सकते हैं । मुझे लगता है कि यहाँ अपने खुद के क्यू एंड ए के हकदार हैं। बस यह बताना चाहते थे कि आपने अपने उत्तर में जिस तरह से रोलबैक समझाया है उसे अक्सर बी / जी कहा जाता है।
एवगेनी

6

मार्टिन फाउलर के इमोटिकेबल सर्वर पर ब्लिकी लेख पर सबसे अच्छा स्पष्टीकरण (हमेशा की तरह) पाया जा सकता है ।

एक सर्वर, यह हार्डवेयर या क्लाउड में एक वर्चुअल सर्वर हो सकता है, आमतौर पर एक ऑपरेटिंग सिस्टम और एप्लिकेशन इस पर चल रहा है।

अक्सर अनुप्रयोग, और ऑपरेटिंग सिस्टम के घटक, कॉन्फ़िगरेशन की आवश्यकता होती है और लागू होने के लिए परिवर्तनों की आवश्यकता होती है। उदाहरण के लिए सुरक्षा पैच, एप्लिकेशन और कॉन्फ़िगरेशन परिवर्तन के नए संस्करणों की तैनाती।

जब आप मानते हैं कि कोई भी परिवर्तन सर्वर की स्थिति पर एक उत्परिवर्तन है, तो शब्द immutableअधिक समझ में आने लगता है। इसका मतलब है कि इस तरह के सर्वर पर किसी भी म्यूटेशन की अनुमति नहीं है।

यह अक्सर ऐसा होता है, जब लोग सर्वर की स्थिति को बदलने में शामिल होते हैं - चाहे वह एक संस्करण की तैनाती हो, या कॉन्फ़िगरेशन परिवर्तन, या एक सुरक्षा पथ। परिणाम एक सर्वर है जो अब अपेक्षा के अनुरूप काम नहीं कर रहा है। उदाहरण के लिए, ग़लतफ़हमी, आदि के कारण एप्लिकेशन अब नहीं चल सकता है।

यही कारण है कि अपरिवर्तनीय सर्वर बनाने के लिए एक अभ्यास स्थापित किया गया है। अपरिवर्तनीय सर्वर के साथ , सर्वर की एक छवि को सभी कॉन्फ़िगरेशन, पैच, एप्लिकेशन संस्करणों के साथ बनाया जाता है। फिर उस सर्वर छवि का उपयोग विभिन्न वातावरणों में सर्वर बनाने के लिए किया जा सकता है।

पहला वातावरण जहां ऐसी छवि का उपयोग किया जाता है, वह ऐसा वातावरण होगा जहां छवि को काम करने के लिए परीक्षण किया जा सकता है। किसी भी असामान्यता का पता लगाया जाता है, और उसके बाद ही ऐसी छवि को नए संस्करण (जो अच्छी तरह से काम करने के लिए जाना जाता है) के साथ सर्वर को बदलने के लिए एक उत्पादन वातावरण में बढ़ावा दिया जा सकता है ।

एक बार छवियों को बनाने और छवियों को बढ़ावा देने की प्रक्रिया स्वचालित होने के बाद, आपको एक बहुत ही विफलता-प्रूफ प्रक्रिया मिलती है जिसमें बहुत कम मानवीय प्रयास और आपकी सेवा में विफलता का परिचय देने के लिए बहुत कम मौका होता है।

अक्सर अपरिवर्तनीय सर्वरों में उन्हें "दर्ज" करने का कोई तरीका भी शामिल नहीं होता है, जैसे उदाहरण के लिए ssh सर्वर गायब है। इस मामले में यह अक्सर ऐसा भी होता है कि सर्वर (मेट्रिक्स, लॉग) की सभी मेट्रोलोजी को मेट्रिक्स डेटाबेस या लॉग एग्रीगेशन सेवा जैसे सिस्टम से बाहर भेज दिया जाता है।

कंटेनरों के साथ (देखें: डॉकर ) चित्र बनाने के लिए भी एक प्रक्रिया होती है, और फिर इन्हें रनिंग कंटेनर में रखा जाता है। ये अपडेट किए गए चित्रों के आधार पर अक्सर नए कंटेनरों द्वारा प्रतिस्थापित किए जाते हैं, और कभी भी उत्परिवर्तित नहीं होते हैं। मतलब यह है कि कोई भी इंसान बदलाव लाने के लिए "कुछ ठीक करने" के लिए कंटेनर में नहीं जाता है।


दिलचस्प व्याख्या, हो सकता है कि आप इसे बहुत कम बदलना चाहते हैं , यदि आप कर सकते हैं, और अगर यह समझ में आता है, तो किसी चीज पर विस्तार करने के लिए, जो मुझे लगता है कि किसी भी तरह से संबंधित है, अर्थात, "फ्लशिंग" एक प्रणाली। जो मुझे लगता है कि आप (अधिक या कम) किसी को भी किसी चीज के साथ "खेलते" हैं, और उन्हें उल्टा चेतावनी देते हैं कि (जैसे) हर रात कुछ प्रारंभिक अवस्था में रीसेट होता है। ऐसा लगता है कि इस तरह के रीसेट के लिए इनपुट है ... बुद्ध ... मैं क्या कहने जा रहा था ... सही: ऐसी अपरिवर्तनीय-चीज़ जो इसके लिए इस्तेमाल की जा सकती है।
Pierre.Vriens

2
एक ऐसी सेवा चलाना जो सर्वर को ज्ञात स्थिति में लौटाता है (जैसे कि Chef / Puppet / Ansible / etc ...), इसका मतलब है कि आप अपरिवर्तनीय सर्वर का उपयोग नहीं कर रहे हैं। en.wikipedia.org/wiki/Promise_theory महान है, लेकिन martinfowler.com/bliki/ImmutableServer.html और भी बेहतर है।
एवगेनी

आप मुझे चिढ़ा रहे हैं, मुझे विश्वास है, या यह "मुझे चुनौती दे रहा है" (दैनिक प्रश्न सीमा की खोज करने की कोशिश करने के लिए)। कहीं ऐसा नहीं है कि एक एसई-नियम यह कहता है कि "आप केवल 30 दिनों में 50 प्रश्न पूछ सकते हैं"?
Pierre.Vriens

0

आइए व्युत्क्रम से शुरू करें, एक उत्परिवर्ती सर्वर क्या है?

परंपरागत रूप से, एक उत्परिवर्तनीय सर्वर अवसंरचना वह है जो निरंतर रूप से संशोधित और अद्यतन की जाती है। आप इसमें शेल सुरक्षित कर सकते हैं, पैकेजों को अपग्रेड कर सकते हैं, इसे कॉन्फ़िगर कर सकते हैं, सेवाएं स्थापित कर सकते हैं और इसके लिए नया कोड तैनात कर सकते हैं। यह वही है जो इसे परिवर्तनशील बनाता है, आप इसे बदल या संशोधित कर सकते हैं।

एक अपरिवर्तनीय अवसंरचना एक अन्य अवसंरचना प्रतिमान है जिसमें सर्वरों को तैनात करने के बाद कभी भी संशोधित नहीं किया जाता है। अगर किसी चीज़ को किसी भी तरह से अपडेट, फिक्स्ड, या संशोधित करने की आवश्यकता है, तो पुराने बदलावों को बदलने के लिए उपयुक्त बदलावों के साथ एक आम छवि से निर्मित नए सर्वरों का प्रावधान है। वे मान्य होने के बाद, वे उपयोग में लाए जाते हैं और पुराने को डिमोशन कर दिया जाता है।

उनका उपयोग क्यों किया जाता है? अपरिवर्तनीय अवसंरचना का लाभ आपके अवसंरचना में अधिक स्थिरता और विश्वसनीयता और अधिक सरल, अधिक अनुमानित तैनाती प्रक्रिया है और यह परिवर्तनशील अवसंरचना में आम सर्वर मुद्दों को कम करता है, जैसे सर्वर क्रैश से डाउनटाइम या जो भी हो।

लेकिन आपको यह जानना होगा कि व्यापक तैनाती ऑटोमेशन और फास्ट सर्वर प्रोविजनिंग के माध्यम से इसे कुशलता से कैसे प्रबंधित किया जाए।

कल्पना कीजिए कि आप बिटकॉइन का खनन कर रहे हैं, आप किसी भी डाउनटाइम नहीं चाहते हैं यदि आपका सर्वर दुर्घटनाग्रस्त हो गया है, तो आपको इसे जितनी जल्दी हो सके वापस करने की आवश्यकता होगी, इसलिए एक अपरिहार्य बुनियादी ढांचे का समाधान होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.