नोशन ने अपने स्केलेबिलिटी संकट को कैसे सुलझाया
2021 में, नोशन की लोकप्रियता आसमान छू गई, लेकिन इसकी सेवा असहनीय रूप से धीमी हो गई। कंपनी का पोस्ट-क्रंच डेटाबेस, संपीड़ित होने पर भी, टेराबाइट्स की मात्रा में था, और फटने को तैयार था। ग्राहकों को खोने का सामना करते हुए, नोशन को इस समस्या को जल्दी से हल करने की आवश्यकता थी।
इसके मूल में, नोशन में सब कुछ एक ब्लॉक है, जो टेक्स्ट का एक टुकड़ा, एक इमेज, या एक पूरा पेज हो सकता है। प्रत्येक ब्लॉक को PostgreSQL में अपने स्वयं के अद्वितीय ID के साथ RLE के रूप में संग्रहीत किया जाता है। ब्लॉक को जटिल पेड़ जैसी संरचनाएँ बनाने के लिए अन्य ब्लॉकों के अंदर नेस्ट किया जा सकता है, जिससे अविश्वसनीय बहुमुखी प्रतिभा मिलती है। हालाँकि, इस संरचना का मतलब यह भी है कि एक साधारण दस्तावेज़ में सैकड़ों या हज़ारों डेटाबेस प्रविष्टियाँ हो सकती हैं।
लाखों उपयोगकर्ताओं के साथ, नोशन का डेटाबेस अभिभूत हो गया, जिससे विलंबता में वृद्धि हुई और प्रतिक्रियाएँ विलंबित हुईं। कंपनी का एकल मोनोलिथिक डेटाबेस अब लोड को संभाल नहीं सकता था, और लागत तेजी से बढ़ रही थी।
समाधान: क्षैतिज स्केलिंग
नोशन ने विदेशी कुंजियों के माध्यम से ब्लॉक टेबल से जुड़ी सभी तालिकाओं को शार्ड करने का निर्णय लिया। इसमें वर्कस्पेस, चर्चाएँ और टिप्पणियाँ शामिल थीं, संबंधित डेटा को एक ही शार्ड में रखते हुए। विभाजन कुंजी को वर्कस्पेस ID चुना गया था, क्योंकि उपयोगकर्ता आमतौर पर एक समय में एकल वर्कस्पेस के लिए डेटा का अनुरोध करते हैं।
नए शार्डिंग सेटअप को मौजूदा डेटा को संभालने और कम से कम दो वर्षों के लिए अनुमानित विकास को पूरा करने के लिए स्केल करने की आवश्यकता थी। उदाहरण के प्रकार को कम से कम 60k कुल IOPs की आवश्यकता थी, और RDS प्रतिकृति को बनाए रखने के लिए, उन्होंने प्रति तालिका 500 GB और प्रति भौतिक उदाहरण 10 टेराबाइट्स की सीमा निर्धारित की।
ध्यानपूर्वक विचार करने के बाद, नोशन ने 32 भौतिक डेटाबेस उदाहरण बनाने का विकल्प चुना, जिसमें प्रत्येक उदाहरण में 15 अलग-अलग तार्किक शार्ड शामिल हैं। इसके परिणामस्वरूप 32 भौतिक डेटाबेस में कुल 480 शार्ड हुए।
राउटिंग तंत्र
डेटा कहाँ संग्रहीत है यह निर्धारित करने के लिए राउटिंग तंत्र एप्लिकेशन स्तर पर निर्धारित किया गया था। एप्लिकेशन नए शार्ड के लिए छोटे उदाहरणों की लोड वितरण प्रावधान का उपयोग करता है और CPU, IOPS और लागत को कम करने की उम्मीद करता है।
माइग्रेशन योजना
नोशन की माइग्रेशन योजना में PG बाउंसर में 96 नई प्रविष्टियाँ जोड़ना शामिल था, अस्थायी रूप से उन्हें 32 मौजूदा शार्ड में प्रतिबिंबित करना। इसने उन्हें नए डेटाबेस में डेटा लिखे जाने पर डेटा को धीरे-धीरे नए शार्ड में माइग्रेट करने की अनुमति दी।
हालांकि, परीक्षण ने एक गंभीर समस्या का पता लगाया: चूँकि प्रत्येक पुराने शार्ड तीन नए शार्ड में मैप किए गए थे, इसलिए उन्हें या तो प्रति PG बाउंसर उदाहरण कनेक्शन की संख्या कम करने या इसे 3x तक बढ़ाने की आवश्यकता थी। समाधान PG बाउंसर क्लस्टर को स्वयं चार्ट करना था, चार नए क्लस्टर बनाना, प्रत्येक 24 डेटाबेस का प्रबंधन करना। इसने उन्हें प्रति शार्ड प्रति PG बाउंसर कनेक्शन को 8 तक बढ़ाने की अनुमति दी, जिससे प्रति PostgreSQL उदाहरण कुल कनेक्शन 200 तक सीमित हो गया।
डार्क रीड्स और परीक्षण
इन परिवर्तनों को उत्पादन में शुरू करने से पहले, नोशन ने परीक्षण के लिए डार्क रीड लागू किए। उन्होंने अनुरोध किए जाने पर पुराने और नए दोनों DB से डेटा प्राप्त करने के लिए कार्यक्षमता जोड़ी, संगति के लिए परिणामों की तुलना की और उपयोगकर्ता के अनुभव को प्रभावित करने से बचने के लिए किसी भी विसंगति को लॉक किया।
फेलओवर प्रक्रिया
फेलओवर प्रक्रिया में ट्रैफ़िक पॉज़ शामिल था, नए कनेक्शन को रोकना, जबकि चल रहे प्रश्नों को पूरा करने की अनुमति देना, प्रतिकृति जाँच, यह सुनिश्चित करना कि नए डेटाबेस पूरी तरह से पकड़े गए हैं, और कॉन्फ़िगरेशन अपडेट। पुराने डेटाबेस तक एप्लिकेशन की पहुँच रद्द कर दी गई थी, और PG बाउंसर को नए डेटाबेस की ओर इंगित करने के लिए अद्यतन किया गया था, केवल यदि आवश्यक हो तो नए DB से पुराने DB में परिवर्तनों को स्ट्रीम करके प्रतिकृति दिशा को उलट दिया गया था।
परिणाम
रीचार्टिंग परियोजना नोशन के लिए एक महत्वपूर्ण सफलता थी। प्रमुख परिणामों में शामिल हैं:
- बढ़ी हुई क्षमता
- बेहतर प्रदर्शन
- CPU और IOPS उपयोग नाटकीय रूप से कम हो गया, पिछले 90% की तुलना में पीक ट्रैफ़िक के दौरान लगभग 20% के आसपास नया उपयोग।
यह नई वास्तुकला नोशन को निरंतर उपयोगकर्ता विकास और डेटा मांगों को संभालने के लिए तैयार करती है।