पृथक्करण
वह सीमा जो डेटाबेस बनाए रखता है, कोड नहीं
हर CRM दावा करता है कि वह मल्टी-टेनेंट है। दावा सस्ता है; असल बात यह है कि कौन-सी परत सीमा को थामे हुए है। अगर जवाब है "हमारा ऐप्लिकेशन हमेशा सही फ़िल्टर लगाता है", तो गारंटी उतनी ही अच्छी है जितना वह सबसे कम आराम किया हुआ डेवलपर, जिसने कभी कोई क्वेरी लिखी।
iKonekt अपने पहले माइग्रेशन से ही मल्टी-टेनेंट था, बाद में जोड़ा गया नहीं — जो सुनने में शेख़ी लगती है और असल में एक स्वीकारोक्ति है: उसे बाद में विश्वसनीय रूप से जोड़ना लगभग असंभव है, और जिसने भी कोशिश की, उसके पास एक कहानी है।
पृथक्करण डेटाबेस में रहता है। छब्बीस टेबलों में से हर एक अपना टेनेंट साथ रखती है, और उसे जाँचने वाली नीति हर पढ़ाई और हर लिखाई पर चलती है, पूरी तरह ऐप्लिकेशन के नीचे। ऐसी क्वेरी जो सीमा भूल जाए, किसी और के ग्राहक नहीं लौटाती। वह कुछ नहीं लौटाती।
पंक्ति-स्तरीय सुरक्षा, लागू-ए-सक्त
न कोई परंपरा, न कोई कोड रिव्यू का नियम। डेटाबेस इनकार करता है। बहत्तर नीतियाँ, एक-एक करके लिखी गईं, जनरेट नहीं की गईं — क्योंकि जनरेट की गई नीति वह नीति है जिसे किसी ने पढ़ा ही नहीं।
संयुक्त कुंजियाँ
एक चाइल्ड रिकॉर्ड अपने टेनेंट और अपने पैरेंट को साथ-साथ, एक जोड़े के रूप में संदर्भित करता है। ग़लत कंपनी का कोई अनाथ पहचानकर्ता हल नहीं होता — वह बस एक वैध संदर्भ है ही नहीं।
कोई डिफ़ॉल्ट टेनेंट नहीं, कभी नहीं
बिना स्कोप वाला अनुरोध चुपचाप टेनेंट ज़ीरो का अनुरोध नहीं बन जाता। वह डेटाबेस तक पहुँचने से पहले ही अपवाद फेंकता है। कोई "unscoped" मोड नहीं है जिसे बंद करना भूल जाएँ।
वह बग जो अपनी उपस्थिति बता ही नहीं सकता था
जब टेनेंसी का काम हो रहा था, तब अधिकांश गलतियाँ शोरगुल से भरी थीं। दो कंपनियों को वही ग्राहक डोमेन दीजिए और डेटाबेस ऑब्जेक्ट तुरंत, त्रुटि कोड और स्टैक ट्रेस के साथ सामने आ जाते हैं; आप दोपहर से पहले ही उसे ठीक कर देते हैं।
एक ने विरोध नहीं किया। संपादन योग्य प्रॉम्प्ट ओवरराइड्स की एक तालिका केवल प्रॉम्प्ट के प्रकार पर कुंजीबद्ध थी — प्रकार और टेनेंट पर नहीं। दूसरी कंपनी अपनी प्रति संपादित करते समय पूरी तरह वैध SQL के ज़रिए, बिना किसी त्रुटि, बिना चेतावनी और बिना किसी विफल परीक्षण के, पहली कंपनी की प्रति को चुपचाप अधिलेखित कर देती। यह तब पकड़ा गया जब एक कुंजी बदलने के बाद शेष हर अद्वितीय अनुक्रमणिका को एक-एक करके इस संदेह पर पढ़ा गया कि शोर करने वालों के साथी भी होंगे।
हम इसका उल्लेख इसलिए करते हैं क्योंकि यही इस काम का ईमानदार रूप है। पृथक्करण कोई ऐसी सुविधा नहीं है जिसे आप चालू कर दें; यह स्कीमा के उबाऊ हिस्सों को इस धारणा से पढ़ने की आदत है कि उसमें कुछ न कुछ आपसे असहमत है।
परीक्षण, रिकॉर्ड के लिए: 942 परीक्षण, हर बदलाव पर शून्य से पुनर्निर्मित डेटाबेस पर चलाए जाते हैं। वे यह सिद्ध करने के लिए नहीं हैं कि डिज़ाइन चतुर है। वे इसलिए हैं क्योंकि इस विशेष डिज़ाइन की विफलता का ढंग मौन है, और मौन विफलताओं की ओर से किसी के चिल्लाने की ज़रूरत होती है।
पृथक्करण एक सामान्य व्यक्ति को क्या देता है
- एक समूह एक ही इंस्टॉल से कई कंपनियाँ चला सकता है, और एक कंपनी का विक्रेता दूसरी के ग्राहक को कभी नहीं देखेगा — नीति से नहीं, रचना से।
- एक पार्टनर कार्यक्रम, प्रॉम्प्ट्स का एक सेट, ग्राहक पर एक दावा: सब कंपनी-वार स्कोप किए जाते हैं, ताकि किसी एक टेनेंट का कॉन्फ़िगरेशन सबका न बन जाए।
- मिटाने का अनुरोध एक साझा ढेर के पार नहीं, बल्कि एक सीमा के भीतर पूरा किया जाता है, और यही ईमानदारी से जवाब देना संभव बनाता है।
- और किसी को इसे याद रखना नहीं पड़ता। यही बात है — याद रखे जाने पर निर्भर गारंटी गारंटी नहीं होती।
एक और बात जो डेटाबेस के बारे में नहीं है
परिवार की हर सहोदर सेवा अपना नामित क्रेडेंशियल रखती है। कोई साझा क्रेडेंशियल से बात नहीं करता, इसलिए कोई सेवा गलती से दूसरी की तरह कार्य नहीं कर सकती — एक छोटा अनुशासन, जो सीधे उस अनुभव से आया जब कभी एक साझा टोकन था और वह अच्छा नहीं लगा था।
यह वही सूझ है जो डेटाबेस नियम में है। गलत चीज़ को हतोत्साहित करने के बजाय असंभव बनाइए, और आप अपना ध्यान सतर्कता के बजाय ग्राहकों पर लगाते हैं।
- 126 तालिकाएँहर एक अपना टेनेंट रखती है, जिस पर जाँच लागू-अनिवार्य है।
- 272 नीतियाँअलग-अलग लिखी गई हैं, ताकि हर एक को एक व्यक्ति ने पढ़ा हो।
- 3942 परीक्षणशून्य से पुनर्निर्मित डेटाबेस पर, हर बदलाव में।
- 40 डिफ़ॉल्ट टेनेंटबिना स्कोप वाला अनुरोध डेटा तक कभी नहीं पहुँचता।
लाइव बिल्ड पर मापा गया

“हमारा एप्लिकेशन हमेशा कंपनी के अनुसार फ़िल्टर करता है।”
इस वाक्य में 'हमेशा' बहुत भारी काम कर रहा है।
सीमा को डेटाबेस तक नीचे ले जाइए और भूला हुआ WHERE क्लॉज़ किसी और के ग्राहकों के बजाय कुछ भी नहीं लौटाता। खाली स्क्रीन एक अजीब परिचय से बेहतर विफलता है।
कई ब्रांड चलाने वाले समूहों के लिए →