रॉब्लॉक्स का प्रतिदिन 2 ट्रिलियन विश्लेषण घटनाओं तक का मार्ग
एक स्केलेबल एनालिटिक्स इनजेक्शन इंफ्रास्ट्रक्चर का निर्माण

हर दिन, औसतन 97.8 मिलियन उपयोगकर्ता* एक-दूसरे से बात करने, बनाने और साथ में खेलने के लिए Roblox पर आते हैं। ये सभी इंटरैक्शन मिलकर 2 पेटाबाइट के एनालिटिक्स इवेंट्स डेटा का निर्माण करते हैं। एक नए स्केलेबल इनजेस्टन सिस्टम की बदौलत, हमने हाल ही में एक बड़ा मील का पत्थर हासिल किया है: हमारी प्रणाली अब प्रतिदिन 2 ट्रिलियन से अधिक इवेंट्स को प्रोसेस कर रही है। यह प्रणाली उन पर्सनलाइज़ेशन, सुरक्षा और अर्थव्यवस्था एल्गोरिदम को सक्षम करती है जो Roblox प्लेटफ़ॉर्म को शक्ति प्रदान करते हैं।
पहले, एक क्लाउड क्यू सेवा रोब्लॉक्स-जनित एनालिटिक्स डेटा को events_hourly नामक एक एकल लॉजिकल टेबल में इनजेस्ट करती थी। इसे तारीख, घंटे, और वेब, मोबाइल, या friendService जैसे मनमाने ढंग से परिभाषित टैग के अनुसार विभाजित किया गया था। हमारे डेटा वैज्ञानिक और इंजीनियर विशिष्ट इवेंट्स को समर्पित टेबल्स में निकालने के लिए निर्धारित बैच जॉब्स पर निर्भर थे। नए एनालिटिक इवेंट्स बनाने और भेजने के लिए किसी अग्रिम स्कीमा की आवश्यकता नहीं होती थी। इंजीनियरों ने एक्सट्रैक्ट, ट्रांसफॉर्म, और लोड (ETL) पाइपलाइन चरण में अपने टेबल स्कीमा को बाद में नियंत्रित किया।

यह सेटअप लचीला था और इंजीनियरों को तेजी से काम करने में सक्षम बनाता था, लेकिन इसने चुनौतियाँ पेश कीं।
- जैसे-जैसे घटनाओं की मात्रा बढ़ी, केवल तारीख, घंटे और टैग के आधार पर विभाजित 2 ट्रिलियन पंक्तियों के साथ इंटरैक्ट करना दिन-ब-दिन अधिक अप्रभावी होता गया।
- events_hourly तालिका के लिए छह घंटे का दिन-अंत विलंब और events_daily के लिए 24 घंटे का विलंब ऐसे समय पैदा करता था जब डेटा पाइपलाइनें अवरुद्ध हो जाती थीं।
- डेटासेट-स्तर की अनुमतियों, स्तर, प्रतिधारण और अलर्ट का प्रबंधन अधिक जटिल हो गया।
- इवेंट दस्तावेज़ीकरण, इतिहास और स्वामित्व का अभाव था, जिसके परिणामस्वरूप डेटा की उपयोगिता और ट्रेसबिलिटी खराब हो गई।
- क्लाउड क्यू सेवा के साथ निर्मित इनजेक्शन इंफ्रास्ट्रक्चर पर 23 Gbps क्लाउड इनजेक्शन लागत आई।

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

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

स्कीमा कई लाभ प्रदान करते हैं, लेकिन इन्हें पहले से अनिवार्य करने से प्रक्रिया में रुकावट आती है। डेटा वैज्ञानिकों और इंजीनियरों को बिना किसी बाधा के तेजी से काम करने और पुनरावृत्ति करने की आवश्यकता होती है। इसे समर्थन देने के लिए, हमने एक केंद्रीकृत स्कीमा रिपॉजिटरी पेश की और स्कीमा लेखन को यथासंभव स्वचालित और सुव्यवस्थित बनाने के लिए उपकरणों का एक सुइट विकसित किया।
उदाहरण के लिए, हमने यह मान्य करने के लिए एक कस्टम प्रोटो लिंटर बनाया कि प्रत्येक स्कीमा में आवश्यक मेटाडेटा है और यह Roblox कन्वेंशन के अनुरूप है। हमने एक इवेंट स्कीमा को हाइव डेटा डेफिनिशन लैंग्वेज में अनुवादित करने के लिए एक प्रोटो प्लग-इन भी बनाया है ताकि जब भी कोई स्कीमा बनाई या अपडेट की जाती है, तो संबंधित हाइव टेबल सिंक में बनी रहे। ये सभी टूल एक CI/CD पाइपलाइन में एकीकृत हैं और एक पुल रिक्वेस्ट बनाए जाने पर स्वचालित रूप से चलते हैं। यह इंजीनियरों को स्कीमा की समस्याओं को जल्दी पकड़ने और उनके स्कीमा को मर्ज करने से पहले टेस्ट हाइव टेबलों में इवेंट्स को सत्यापित करने की अनुमति देता है। परिणामस्वरूप, किसी स्कीमा को प्रोडक्शन में तैनात करना उतना ही सरल है जितना कि उसे मर्ज करना।
एक सुव्यवस्थित डेवलपर अनुभव के साथ, हमने यह जांच किया कि इनजेस्टन पाइपलाइन में किसी इवेंट को स्कीमाबद्ध और प्रोटो में परिवर्तित कहाँ किया जाना चाहिए। इवेंट प्रोड्यूसर्स से सीरियलाइज़्ड प्रोटो बाइट्स को अपनाने और भेजने के लिए कहना कई टीमों में फैला एक महत्वपूर्ण बदलाव होता। समस्याओं को हल करने और क्रमिक रूप से मूल्य प्रदान करने के लिए, हमने इनजेस्टन बैकएंड सेवा को अपडेट करके इवेंट प्रोड्यूसर्स से स्कीमाबद्ध करने के प्रयास को अलग कर दिया, ताकि आने वाले इवेंट्स को प्रोटो में परिवर्तित किया जा सके। अब, परिवर्तित इवेंट्स को पार्क्यू फ़ाइलों में एकत्र किया जाता है, वितरित स्टोरेज पर अपलोड किया जाता है, और व्यक्तिगत हाइव टेबल्स के रूप में पंजीकृत किया जाता है।
रॉब्लॉक्स के डेटा सेंटरों के साथ रीयल-टाइम इवेंट इनजेस्टन
इसके बाद, हमने एनालिटिक्स इवेंट्स को सर्व करने की लागतों पर ध्यान केंद्रित किया। पहले, इनजेस्ट बैकएंड क्लाउड इंफ्रास्ट्रक्चर पर बनाया गया था। एनालिटिक्स इवेंट्स को एक क्यू सर्विस में भेजा जाता था, जो उन्हें बफर करती थी और फिर उन्हें डाउनस्ट्रीम प्रोसेसिंग और विश्लेषण के लिए टिकाऊ क्लाउड स्टोरेज में संग्रहीत करती थी। हालांकि एक क्लाउड क्यू सर्विस ने हमारी सेवा को सरल बनाया और पारदर्शी स्केलिंग की अनुमति दी, लेकिन इसका उपयोग अन्य स्ट्रीमिंग जॉब्स द्वारा करना मुश्किल है और यह अधिक महंगी है। इसे संबोधित करने के लिए, हमने इनजेक्शन सर्विस को रॉब्लॉक्स के डेटा सेंटर में लाने पर विचार किया।
हमारी आंतरिक स्टोरेज टीम ने एक ओपन-सोर्स वितरित इवेंट स्ट्रीमिंग प्लेटफ़ॉर्म पर आधारित क्यू-एज़-ए-सर्विस (QaaS) बनाया था। QaaS एनालिटिक इवेंट इनजेस्टन के लिए एक बेहतरीन विकल्प है क्योंकि इवेंट्स 'पहले आओ, पहले पाओ' (first-in, first-out) क्रम में टेल किए जाते हैं और थोड़ी अवधि के बाद हटा दिए जाते हैं। Roblox में, हम प्रत्येक स्कीमाटाइज़्ड इवेंट के लिए एक समर्पित टॉपिक बनाते हैं और बड़ी इवेंट स्ट्रीम के लिए स्केल करने हेतु पार्टिशन काउंट का उपयोग करते हैं। डेटा टीम ने QaaS से कंज्यूम करने, पार्केट फाइल बनाने और फाइलों को टिकाऊ क्लाउड स्टोरेज में अपलोड करने के लिए एक समर्पित सेवा भी बनाई।
QaaS के लागू होने और पार्केट फ़ाइलों को बनाने और संग्रहीत करने के लिए एक समर्पित सेवा के साथ, डेटा टीम ने डेटा की शुद्धता और स्केलेबिलिटी दोनों को मान्य करने के लिए छह महीने तक शैडो राइट्स किए। अंत में, व्यापक डेटा पूर्णता और अखंडता जांच के बाद, हमने अपनी पुरानी क्लाउड क्यू सेवा से एनालिटिक इवेंट्स इनजेक्शन को सफलतापूर्वक माइग्रेट किया। यह एक बड़ा मील का पत्थर था। हमने इनजेक्शन पथ से क्लाउड संसाधन लागत को हटा दिया और किसी घटना के होने और हमारे डेटा लेक में पहुँचने के बीच की देरी को काफी कम कर दिया। पहले हमारे पास तीन घंटे का सर्विस-स्तर समझौता था, जिसे हम अक्सर पूरा नहीं कर पाते थे—आज, हम लगातार औसतन 15 मिनट का लक्ष्य हासिल कर रहे हैं।

प्रगति और भविष्य का कार्य

यह इंजीनियरों को QaaS से उपभोग करके स्कीमाबद्ध घटनाओं के लिए रीयल-टाइम इवेंट प्रोसेसिंग पाइपलाइनें लिखने की अनुमति देता है, जिससे सुरक्षा और रीयल-टाइम सिफारिश सुविधाओं को शक्ति मिलती है। हमने उसी स्कीमाकरण फ्रेमवर्क और QaaS इनजेस्टन के साथ चेंज डेटा कैप्चर भी लॉन्च किया, जिससे पूर्ण डेटाबेस डंप्स काफी हद तक समाप्त हो गए। रीयल-टाइम एनालिटिक्स और इवेंट स्ट्रीमिंग से लेकर नए उपयोग मामलों को अनलॉक करने तक, हमारा काम जारी है क्योंकि हम बड़े पैमाने पर अधिक स्मार्ट, तेज़ और अधिक लागत-कुशल डेटा सिस्टम विकसित कर रहे हैं।
हम इस कार्य में उनके बहुमूल्य योगदान के लिए पॉल मौ का धन्यवाद करना चाहेंगे।
* 31 मार्च, 2025 को समाप्त हुई तीन महीनों की अवधि तक।


