.net - AppDomain के इस्तेमाल का अच्छा उदाहरण




(5)

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

मैं साक्षात्कार में AppDomains के बारे में पूछता रहा हूं , और मैं मूल बातें जानता हूं :

  • वे एक आवेदन के भीतर एक अलगाव का स्तर हैं (उन्हें आवेदनों से अलग बनाते हैं)
  • वे धागे (थ्रेड्स से अलग बना सकते हैं)
  • एक ऐपडोमेन में अपवाद किसी अन्य को प्रभावित नहीं करता है
  • ऐपडोमेन एक दूसरे की मेमोरी तक नहीं पहुंच सकते
  • प्रत्येक ऐपडोमेन में अलग सुरक्षा हो सकती है

मैं अभी भी उन्हें क्या आवश्यक बनाता है नहीं मिलता है मैं एक उचित कंक्रीट परिस्थिति के लिए देख रहा हूँ जब आप एक का उपयोग करेंगे

उत्तर:

  • अविश्वस्त कोड
    • कोर आवेदन संरक्षित
      अविश्वस्त / तृतीय पक्ष प्लगइन्स को साझा स्मृति और गैर-अधिकृत पहुँच रजिस्ट्री या हार्ड ड्राइव से अलगाव द्वारा पृथक ऐपडोमेन में सुरक्षा प्रतिबंधों के साथ, आवेदन या सर्वर की रक्षा करने से रोक दिया गया है जैसे कि asp.net और SQL सर्वर होस्टिंग घटक कोड
  • विश्वसनीय कोड
    • स्थिरता
      अनुप्रयोग सुरक्षित, स्वतंत्र सुविधाओं / कार्यक्षमता में विभाजित है
    • वास्तुकला लचीलापन
      एकल सीएलआर उदाहरण या प्रत्येक कार्यक्रम में स्वयं के कई अनुप्रयोगों को चलाने के लिए स्वतंत्रता

और कुछ?


ऐप डोमेन अनुप्रयोग स्थिरता के लिए महान हैं I

आपके आवेदन में एक केंद्रीय प्रक्रिया होती है, जो अलग-अलग ऐपडोमेन में "फीचर्स" को उगलती है, आप वैश्विक दुर्घटना को रोक सकते हैं, उनमें से एक को दुर्व्यवहार करना चाहिए।


मुझे लगता है कि AppDomains के लिए मुख्य प्रेरणा यह है कि सीएलआर डिजाइनर कई विंडोज़ प्रोसेस की कार्यक्षमता ओवरहेड बिना प्रबंधित कोड को अलग करने का एक तरीका चाहते थे। यदि सीएलआर मूल रूप से यूनिक्स के शीर्ष पर लागू किया गया था (जहां कई प्रक्रियाएं खड़ी करना काफी कम खर्चीला है), ऐप डॉक्स का कभी आविष्कार नहीं किया जा सकता था।

साथ ही, तृतीय पक्ष एप्लिकेशन में प्रबंधित प्लग-इन आर्किटेक्चर्स निश्चित तौर पर ऐप डॉक्स के अच्छे उपयोग हैं, क्योंकि उनका अस्तित्व बड़ा कारण SQL सर्वर 2005 और एएसपी.NET जैसे प्रसिद्ध होस्ट्स के लिए है। उदाहरण के लिए, एक एएसपी.नेट होस्टिंग प्रदाता एक साझा होस्टिंग समाधान प्रदान कर सकता है जो एक ही विंडोज़ प्रोसेस के तहत चलने वाले एक ही बॉक्स में एकाधिक ग्राहकों से एकाधिक साइट्स का समर्थन करता है।


यदि आप एक ऐसा अनुप्रयोग बनाते हैं जो तृतीय-पक्ष प्लग-इन की अनुमति देता है, तो आप उन ऐप ऐडमेन में उन प्लग-इन को लोड कर सकते हैं ताकि आपका मुख्य एप्लिकेशन अज्ञात कोड से सुरक्षित हो।

एएसपी.एन.टी. एक एकल कार्यकर्ता प्रक्रिया के भीतर प्रत्येक वेब अनुप्रयोग के लिए अलग-अलग ऐप डॉक्स का उपयोग भी करता है।


अलग एप्लिकेशन डोमेन बनाने के लिए मुझे 2 या 3 मुख्य उपयोग के मामले दिखाई देते हैं:

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

2) अविश्वसनीय कोड को विशिष्ट सुरक्षा अनुमतियों के साथ एक अलग अनुप्रयोग डोमेन में कार्यान्वित करना (यह वास्तव में पहली कारण से संबंधित है)। जैसा कि पहले ही कह चुके हैं, आप तृतीय पक्ष प्लग इन या अविश्वस्त डीएलएस को अलग-अलग एप्लिकेशन डोमेन में लोड कर सकते हैं।

3) अनावश्यक स्मृति उपयोग को कम करने के लिए विधानसभाओं को अनलोड करने की क्षमता। दुर्भाग्य से, किसी एप्लिकेशन डोमेन से असेंबली को अनलोड करने का कोई तरीका नहीं है। इसलिए यदि आप अपने मुख्य एप्लिकेशन डोमेन पर कुछ बड़े विधानसभा को लोड करते हैं, तो उस विधानसभा के बाद संबंधित स्मृति को मुक्त करने का एकमात्र तरीका अब आपके आवेदन को बंद करना है। एक पृथक एप्लिकेशन डोमेन में असेंबलियों को लोड करना और उस डोमेन को उतारने के दौरान जब उन विधानसभाओं की आवश्यकता नहीं होती है, तो इस समस्या का हल होता है।







appdomain