आपके पास खुद एक काफी दिलचस्प प्रोजेक्ट है। मैंने कभी नहीं देखा कि किसी ने भी कुछ को लागू करने की कोशिश की हो, जो कि कम से कम SQL सर्वर पर हो। जितना अधिक मैं आपकी पोस्ट को पढ़ता हूँ, उतने ही अधिक प्रश्न मेरे साथ आते हैं ...
सबसे खराब स्थिति परिदृश्य इन्फ्रास्ट्रक्चर-वार (जो वास्तव में सबसे अच्छा मामला है, व्यापार-वार), आपको 10K डेटाबेस 2k उपयोगकर्ताओं की आवश्यकता है। वह 20,000,000 उपयोगकर्ता हैं। आप 20 M SQL सर्वर लॉगिन को प्रबंधित करने के प्रयास में सफल नहीं होंगे। IMO। बस उनमें से सरासर संख्या, उन्हें सर्वर से सर्वर तक ले जाने के लिए, आईडी टकराव और बेमेल आईडी के लिए बाहर देखने के साथ-साथ, मुझे यकीन नहीं है कि SQL सर्वर sys.server_principals में 20 M पंक्तियों के साथ कैसे व्यवहार करेगा। इसके अतिरिक्त, आपका वेब ऐप संभवतः एकल, या बहुत कम उपयोगकर्ताओं के रूप में कनेक्ट करना चाहता है। जब तक उनके DSN तार समान नहीं हैं, IIS कनेक्शन को पूल नहीं कर सकता। DSN स्ट्रिंग की विशेषताओं में से एक उपयोगकर्ता नाम है। विभिन्न उपयोगकर्ताओं का अर्थ है कोई पूलिंग नहीं।
आपको अपनी स्वयं की उपयोगकर्ता क्रेडेंशियल योजना को रोल करना होगा। यह पता लगाना होगा कि उपयोगकर्ता किस किरायेदार से संबंधित है और फिर आपके वेब कोड को उचित डेटाबेस का चयन करना होगा। वह उपयोगकर्ता मेटाडेटा महत्वपूर्ण है, इसे कहीं संग्रहीत करने की आवश्यकता है, इसे क्लस्टर या मिरर किए जाने की आवश्यकता है, इसे तेज़ करने की आवश्यकता है और इसे सुरक्षा के नजरिए से अच्छी तरह से संरक्षित करने की आवश्यकता है। IOW। इसे एन्क्रिप्ट करें।) यह मानते हुए कि एसक्यूएल यहां भी एक अच्छा विचार है, मैं इस डेटाबेस को उन उदाहरणों से दूर रखूंगा जो सर्वर किरायेदारों हैं। यह एक सुरक्षा दृष्टिकोण से और एक लोड दृष्टिकोण से मदद करता है, हालांकि मुझे लगता है कि एक बार उपयोगकर्ताओं को मान्य किया जाता है और वेब ऐप को किसी अन्य उदाहरण पर सही डेटाबेस में ले जाया जाता है, इससे संबंधित इस उपयोगकर्ता मेटाडेटा की कोई और क्वेरी नहीं होगी उपयोगकर्ता।
त्वरित प्रश्न: क्या दो अलग-अलग उपयोगकर्ता, जो दो अलग-अलग किरायेदारों से संबंधित हैं, को एक ही उपयोगकर्ता नाम की अनुमति दी जानी चाहिए?
एक और त्वरित प्रश्न: अगर मैं आपको बताता हूं कि मैं फ़्यूबर, इंक। के लिए काम करता हूं, तो आप कैसे जानते हैं? क्या फ़्यूबर आपको उपयोगकर्ताओं की एक सूची देने जा रहा है और आप उन्हें उपयोगकर्ता नामों की एक सूची वापस दे रहे हैं, या वे स्वयं-प्रावधान पर जा रहे हैं?
आपको मल्टी-इंस्टेंस जाने की आवश्यकता है। यदि उन उपयोगकर्ताओं का एक अंश भी एक बार में आवेदन को हिट करने का निर्णय लेता है, तो एक एकल उदाहरण पिघल जाएगा। यह उन सभी अनुरोधों को चलाने के लिए पर्याप्त कार्यकर्ता सूत्र नहीं होगा। यदि एक ही समय में केवल 1000 उपयोगकर्ता आपके उदाहरण को हिट करते हैं, तो यह संभवतः कार्यकर्ता थ्रेड्स से बाहर निकल जाएगा और अनुरोध स्टैक अप और प्रतीक्षा करना शुरू कर देगा। मैंने ऐसा होते देखा है; समीपवर्ती लक्षण यह है कि नए कनेक्शन उदाहरण में लॉग इन नहीं कर पाएंगे क्योंकि उनकी सेवा करने के लिए उपलब्ध वर्कर थ्रेड उपलब्ध नहीं हैं। यदि यह बहुत ही अल्पकालिक व्यवहार है, तो आप एप्लिकेशन जीवित रह सकते हैं। यदि नहीं, या आपका ऐप उधम मचा रहा है, तो उपयोगकर्ताओं को त्रुटियाँ मिलेंगी।
यहां तक कि अगर आपके पास शुरू करने के लिए कई किरायेदार नहीं होंगे, तो आपको भविष्य और स्वचालन के बारे में सोचना शुरू करना चाहिए क्योंकि जब आप देखते हैं कि आपका सर्वर खराब हो गया है और ऑनलाइन लाने के लिए 10 नए किरायेदार हैं, तो यह बहुत देर हो चुकी है और आपकी सेवा (और जब तक आप समस्या से अपना रास्ता नहीं निकालेंगे, आपके क्लाइंट और आपके जल्द-से-जल्द-पूर्व क्लाइंट) पीड़ित होंगे।
आपको डेटाबेस को स्थानांतरित करने के लिए एक तरीका चाहिए, जो ओवरलोडेड सर्वरों से हल्के से लोड किए गए (या नए) सर्वरों तक ले जाए। आपको डाउनटाइम की विंडो मिल सकती है या नहीं यह आपके SLA पर निर्भर करेगा।
क्या आप SalesForce की तरह एक विशिष्ट एप्लिकेशन प्रदान कर रहे हैं, या ये डेटाबेस केवल आपके किरायेदारों के लिए जो कुछ भी डालना चाहते हैं उसके लिए कंटेनर हैं?
डेटाबेस कितने बड़े हैं? यदि वे बहुत बड़े नहीं हैं, तो आप एक बैकअप फ़ाइल से पुनर्स्थापित कर सकते हैं जो एक टेम्पलेट प्रदान करती है। (यह मॉडल डेटाबेस द्वारा किए गए कार्यों से बहुत भिन्न नहीं है, लेकिन मैंने किसी को एसक्यूएल 6.5 के साथ मेरे दिनों से किसी को वास्तव में अच्छे तरीके से मॉडल का उपयोग करने के लिए नहीं देखा है।) एक बार टेम्पलेट को नए डेटाबेस के नाम पर बहाल किया गया है, तो आप कर सकते हैं। फिर एक विशेष किरायेदार के लिए आवश्यक के रूप में नए डेटाबेस को अनुकूलित करें। इससे पहले कि आप किरायेदार है, जाहिर है आप अनुकूलन नहीं कर सकते। यदि डेटाबेस बड़ा है, तो आप उसी मूल प्रक्रिया का पालन कर सकते हैं, जब आप समय से पहले पुनर्स्थापना करते हैं, इससे पहले कि किसी नए किरायेदार को स्थान की आवश्यकता हो। आप इन डेटाबेस के एक जोड़े के आसपास रख सकते हैं, शायद एक प्रति उदाहरण। यदि आप बहुत अधिक आस-पास रखते हैं, तो यह आपको आवश्यकता से अधिक हार्डवेयर और / या स्टोरेज खरीदने के लिए मजबूर करेगा,
यदि यह आपका अपना ऐप है, तो आप स्कीमा में अपडेट कैसे संभालेंगे? यदि आप डेटाबेस के संस्करणों को कोड के संस्करणों के साथ सीधे रखने जा रहे हैं, यदि आप एक एकल URL का उपयोग कर रहे हैं जो आपके वेब ऐप पर जाता है?
आप उन डेटाबेस का कैसे पता लगा सकते हैं और नष्ट कर सकते हैं जो अब उपयोग में नहीं हैं? क्या आप तब तक इंतजार करते हैं जब तक कि आपका ए / आर समूह यह नहीं कहता कि किसी ने तीन महीने के लिए अपने बिल का भुगतान नहीं किया है?
यदि किरायेदार अनुमतियाँ प्रबंधित कर रहे हैं, तो इसका अर्थ है कि उन्हें ऐप के आंतरिक कामकाज की कुछ समझ है, या आपके ऐप में बहुत ही सरल रोल संरचना है। ब्लॉगर जैसी किसी चीज़ का एक मोटे उदाहरण के रूप में उपयोग करना, उपयोगकर्ता कर सकते हैं (पोस्ट पढ़ें), (पोस्ट पढ़ें और टिप्पणी करें), (... और पोस्ट बनाएं), (... और अन्य पोस्ट संपादित करें), (... और रीसेट कर सकते हैं अन्य उपयोगकर्ता पासवर्ड), या (... और जो भी हो)। अधिकारों के उन विभिन्न सेटों में से प्रत्येक के लिए एक भूमिका होना और एक उपयोगकर्ता को एक भूमिका या किसी अन्य को सौंपना बहुत कठिन नहीं होना चाहिए, लेकिन आप अपने ऐप को 'GRANT' स्टेटमेंट नहीं चलाना चाहते हैं। उन भूमिकाओं के लिए देखें जिनमें एक पदानुक्रम है और विरासत पर निर्भर है, यह भ्रमित हो सकता है। यदि आप किसी उपयोगकर्ता का प्रचार कर रहे हैं या उसे डिमोट कर रहे हैं, तो मैं कहूंगा कि उन्हें सभी संबद्ध भूमिकाओं से हटा दें और फिर उन्हें वापस उसी भूमिका में जोड़ें, जिसकी उन्हें आवश्यकता है। ओह,
मुझे लगता है कि मैंने केवल यहां सतह को खरोंच दिया है, और यह पोस्ट पहले से ही बहुत लंबी है। जो आपको वास्तव में चाहिए वह एक पुस्तक है, या कम से कम किसी श्वेतपत्र से जिसने यह किया है। अगर वे इसे प्रतिस्पर्धात्मक लाभ के रूप में देखते हैं तो ज्यादातर लोग बात नहीं करेंगे।