परिचय
क्या आपने कभी सोचा है कि Codeshare जैसे प्लेटफॉर्म कैसे बने हैं? क्या आपने कभी अपने लिए एक अच्छे डेवलपर एक्सपीरियंस को बनाए रखते हुए ऐसी सेवा को स्केल करने की चुनौतियों से निपटने की कोशिश की है? जब मैंने Bytecrowds बनाने का फैसला किया, तो मुझे यह सब सीखना पड़ा। टेक्स्ट-शेयरिंग क्षमताएं प्रदान करने के लिए Yjs का उपयोग करने के निर्णय के बाद कठोर शोध किया, डेटाबेस चुनने का समय आया। बाजार में इतने सारे विकल्प उपलब्ध होने के कारण, मैंने एक आवश्यक कीवर्ड का उपयोग करके सूची को सीमित कर दिया: सरलता
Upstash क्यों?
Upstash की खोज से पहले भी, मुझे इसके सरल API के लिए Redis® में दिलचस्पी थी। हालांकि, इसे प्राथमिक डेटाबेस के रूप में उपयोग करने में स्केलिंग जैसी चुनौतियां आती हैं (आपको इसकी कैशिंग के लिए भी आवश्यकता हो सकती है) और पर्सिस्टेंस बनाए रखना। साथ ही, किसी भी प्रायोजन को सुरक्षित करने से पहले, आपको ओपन-सोर्स सॉफ्टवेयर के लिए बजट के बारे में बहुत सावधान रहना होगा। क्या आप अनुपयोगी कम्प्यूटिंग पावर के लिए भी भुगतान करेंगे? क्या आप अचानक ट्रैफिक स्पाइक को संभाल सकते हैं और इन्फ्रास्ट्रक्चर पर घंटों काम करने के बजाय नई सुविधाओं को प्रकाशित करने, मौजूदा में सुधार करने, या कुछ बग ठीक करने की दिशा में काम करने के लिए तैयार हैं? मैं, एक के लिए, नहीं था। इसलिए मुझे Upstash मिला।
Upstash Redis पेशकश मेरे 3 आवश्यक मानदंडों से मेल खाती है: यह उपयोग में आसान, स्केल करने में आसान, और लचीला है। इसे कम विलंबता, सर्वरलेस क्लाइंट में उपयोग के लिए आउट-ऑफ-द-बॉक्स REST SDK (Bytecrowds के लिए भी एक आवश्यकता), ग्लोबल रेप्लिकेशन, और कम्प्यूटिंग पावर के लिए पे-एज-यू-गो प्लान के साथ जोड़ें, कुछ नाम रखने के लिए, और आप समझ जाएंगे कि मैंने इसे अपने प्रोजेक्ट के लिए क्यों चुना।
ऐप में Redis® का उपयोग करना
आइए जानें कि Redis® का उपयोग प्रोजेक्ट के मुख्य डेटाबेस के रूप में कैसे किया जा सकता है, जो कई सेवाओं की जरूरतों को पूरा करता है। संदर्भ को समझने के लिए, यहां Bytecrowds के फ्लो का एक आरेख है:

यह क्लाइंट्स में टेक्स्ट सिंक करने के लिए Ably और एक कस्टम एनालिटिक्स इंजन का उपयोग करता है जो अनुरोध के IP एड्रेस के आधार पर डेटा एकत्र करता है।
मुख्य स्टोरेज
एक बाइटक्राउड निम्नलिखित प्रॉपर्टी के साथ एक Redis® हैश का रूप लेता है:
{
text: string,
language: string,
authorizedEmails: undefined || string array
}
हम इसके प्रॉपर्टी में से एक के बदलने पर हैश को अपडेट करते हैं, अपडेट के बीच "x" सेकंड की देरी के साथ। प्रोडक्शन में, यह वर्तमान में 100 मिलीसेकंड पर सेट है।
प्रमाणीकरण और प्राधिकरण
प्रमाणीकरण
चूंकि Bytecrowds Next.js का उपयोग करता है, GitHub OAuth को इंटीग्रेट करने के लिए Auth.js एक ठोस विकल्प था। सौभाग्य से, हम सत्र संग्रहीत करने के लिए Upstash एडाप्टर का भी लाभ उठा सकते हैं, जिससे हम अपने पूरे ऐप में Redis® का उपयोग कर सकते हैं।
प्राधिकरण
Bytecrowds मांग पर एक authorizedEmails फ़ील्ड बनाकर प्राधिकरण को संभालता है जो एक बार सेट होने के बाद API से अपरिवर्तनीय है। Redis® के बारे में मुझे जो चीजें पसंद हैं उनमें से एक नियमित संचालन के लिए आउट-ऑफ-द-बॉक्स उपलब्ध कार्यों की भीड़ है जो एल्गोरिदमिक रूप से कुशल होने के लिए भी डिज़ाइन किए गए हैं। एक उदाहरण देने के लिए, authorizedEmails पहले से सेट है या नहीं, यह जांचने के लिए हमें बस HEXISTS कमांड का उपयोग करना होगा, जिसमें O(1) जटिलता है।
एनालिटिक्स
Bytecrowds एक एनालिटिक्स सिस्टम का उपयोग करता है जो डेटा की दो श्रेणियों को संभालता है:
- एक दिन के आंकड़े, जो
year month dayजैसे नाम वाले Redis® हैश का रूप लेते हैं जिनमें निम्नलिखित प्रॉपर्टी होती हैं:
{
countries: string array,
hits: integer,
pages: string array,
uniqueVisitors: integer,
addresses: string array,
continents: string array
}
जहां addresses वेबसाइट विज़िटर्स की अनूठी संख्या निर्धारित करने के लिए उपयोग किए जाने वाले SHA256-एन्क्रिप्टेड IP एड्रेस की एक सरणी है।
continents,countries, औरpagesनामक 3 कुंजियाँ जिनके लिए Redis® सॉर्टेड सेट का उपयोग डेटा संग्रहीत करने के लिए किया गया था। हर स्टैट को उसके काउंट ("स्कोर", सॉर्टेड सेट के लिए) के साथ संग्रहीत करके, हम SORT या SORT_RO जैसे कमांड का उपयोग करके उन्हें आसानी से क्वेरी या सॉर्ट कर सकते हैं। Redis की सरलता फिर से दिखती है।
यदि आप इसके पीछे के कोड के बारे में उत्सुक हैं, तो https://github.com/Bytecrowds/analytics/blob/main/src/index.js देखें
नोट: अधिक जटिल परिदृश्य में, आप शायद इस सिस्टम में कुछ बदलाव लागू करेंगे, जैसे प्रसंस्करण से पहले कच्चे डेटा को संग्रहीत करना और Apache Kafka जैसे किसी प्रकार के स्ट्रीम प्रोसेसिंग टूल का उपयोग करना (Upstash इसका भी ख्याल रख सकता है, डॉक्स देखें)।
इसे लाइव देखें
Bytecrowds को एक्शन में देखना चाहते हैं? https://www.bytecrowds.com पर जाएं, "new bytecrowd" बटन पर क्लिक करें और लिंक को कई टैब में खोलें। जब आप लिखना शुरू करते हैं, तो आप देखेंगे कि कोड सभी जुड़े हुए क्लाइंट्स में दोहराया जाता है।
समाप्ति
यह कोई रहस्य नहीं है कि एक ओपन-सोर्स प्रोजेक्ट का एकमात्र सक्रिय अनुरक्षक होना कठिन है, लेकिन सही उपकरण और एक ऑटो-स्केलिंग इन्फ्रास्ट्रक्चर एक महान समर्थन हो सकता है जो आपको ट्रैफिक स्पाइक्स की चिंता किए बिना शानदार प्रोजेक्ट पर काम करना जारी रखने के लिए प्रेरित करता है। पहले से ही Upstash Redis® को आज़माने के लिए आश्वस्त? एक फ्री अकाउंट के लिए साइन अप करें, किसी क्रेडिट कार्ड की आवश्यकता नहीं है।
पूरा कोड देखने के लिए, GitHub रिपॉजिटरी देखें। यदि इस लेख के बारे में आपके कोई प्रश्न या प्रतिक्रिया हैं, तो मुझे tudor.zgimbau@gmail.com पर संपर्क करें।