अपस्टैश ने AWS लैम्ब्डा फंक्शन के लिए सर्वोत्तम डेटाबेस विकल्प बनने के मिशन के साथ अपनी यात्रा शुरू की। इस बीच, हमने अपने सर्वरलेस फंक्शन बनाने के लिए एक और बढ़िया विकल्प खोजा: क्लाउडफ्लेयर वर्कर्स। यह एक रोमांचक प्रोडक्ट है क्योंकि यह कम लागत और बिना कोल्ड स्टार्ट के साथ दुनिया भर में बेहतर लेटेंसी का वादा करता है। लेकिन इसकी तुलना AWS लैम्ब्डा से करने पर इसकी कई सीमाएं हैं। अतिरिक्त सीमाएं डेटाबेस विकल्पों की सूची को छोटा कर देती हैं। हमने इसे अपस्टैश को इस प्रश्न के लिए एक बेहतरीन समाधान के रूप में स्थापित करने के अवसर के रूप में देखा: CF वर्कर्स स्टेटलेस हैं। फिर मुझे अपना डेटा कहां रखना चाहिए?
चुनौतियाँ
पहुंच योग्यता
क्लाउडफ्लेयर वर्कर्स एक अधिक बंद वातावरण है। यह AWS की तरह नहीं है। आप अपने स्वयं के डेटाबेस को उसी क्षेत्र में सेटअप नहीं कर सकते और VPC के माध्यम से एक्सेस नहीं कर सकते। इसलिए आपको वर्कर्स फंक्शन से अपने डेटाबेस को एक्सेस करने की आवश्यकता है। क्लाउडफ्लेयर वर्कर्स रनटाइम के रूप में V8 आइसोलेट्स का उपयोग करते हैं। यह TCP कनेक्शन की अनुमति नहीं देता। इसलिए डेटाबेस HTTP के माध्यम से सुलभ होना चाहिए।
ग्लोबल रेप्लिकेशन
वर्कर्स का लाभ हर जगह डिप्लॉय होने का है। जबकि आपका फंक्शन दुनिया भर से कम लेटेंसी के साथ सुलभ है; आपको अपने डेटाबेस तक पहुंचने में सैकड़ों मिलीसेकंड खर्च नहीं करने चाहिए। आपका डेटाबेस वहां होना चाहिए जहां आपका फंक्शन निष्पादित होता है। यह आपके डेटा को कई क्षेत्रों और महाद्वीपों में रेप्लिकेट करके संभव है।
कम लेटेंसी
डेवलपर्स एज कंप्यूटिंग समाधान पसंद करते हैं क्योंकि वे हर जगह कम लेटेंसी प्रदान करते हैं। डेटाबेस बॉटलनेक नहीं होना चाहिए। रेडिस जैसे इन-मेमोरी डेटाबेस सब-मिलीसेकंड लेटेंसी प्रदान करते हैं।
अपस्टैश की यात्रा
REST API
हमने अपस्टैश को नेटिव रेडिस API सपोर्ट के साथ लॉन्च किया। सभी रेडिस क्लाइंट समर्थित हैं, यह लीगेसी रेडिस एप्लिकेशन के लिए एकदम सही है। लेकिन जल्द ही हमने सर्वरलेस फंक्शन पर उपयोगकर्ताओं को कनेक्शन समस्याओं का सामना करते देखा। साथ ही यह क्लाउडफ्लेयर वर्कर्स से सुलभ नहीं था। इसलिए हमने पहले GraphQL API इम्प्लीमेंट किया। लेकिन हम GraphQL API से खुश नहीं थे, क्योंकि प्रॉक्सी लेयर के कारण परफॉरमेंस ओवरहेड था। साथ ही GraphQL रेडिस कमांड चलाने का सबसे आसान तरीका नहीं था। हमने डेटाबेस इंजन के अंदर एक REST सर्वर बनाने का फैसला किया ताकि परफॉरमेंस ओवरहेड को कम किया जा सके। हमें लगता है कि REST रेडिस के लिए बेहतर फिट है। हमने REST API लॉन्च किया और देखा कि यह क्लाउडफ्लेयर वर्कर्स और वेबअसेंबली से रेडिस एक्सेस करने वाले डेवलपर्स के बीच काफी लोकप्रिय है।
एज कैशिंग
REST API की बदौलत, अपस्टैश वर्कर्स से सुलभ था लेकिन लेटेंसी आदर्श नहीं थी। कुछ डेवलपर्स ने रेडिस रिस्पॉन्स को कैश करने के लिए क्लाउडफ्लेयर के अपने कैशिंग का उपयोग करने की कोशिश की। लेकिन यह एक जटिल समाधान था। रेडिस पहले से ही बहुत तेज़ होना चाहिए, इसलिए कहीं और कैश रेडिस करना अच्छा नहीं लगता। इसीलिए हमने एज कैशिंग बनाने का फैसला किया जहां हम रेडिस REST रिस्पॉन्स को सभी एज लोकेशन पर कैश करते हैं। हमने रेडिस रिस्पॉन्स को कैश करने के लिए CDN प्रोवाइडर्स का उपयोग किया। यह एज लेटेंसी में एक महत्वपूर्ण सुधार था, 80% तक परफॉरमेंस गेन।
ग्लोबल डेटाबेस
एज कैशिंग ग्लोबल लेटेंसी समस्या का एक बेहतरीन समाधान था लेकिन कुछ उपयोग के मामलों के लिए इसकी कुछ कमियां हैं। सबसे पहले, यह कैश इनवैलिडेशन (पर्ज) का समर्थन नहीं करता। यदि कैश का एक्सपायरेशन टाइम 30 सेकंड है; तो 30 सेकंड की विंडो है जहां आपके क्लाइंट बासी डेटा पढ़ सकते हैं। इसे कई वेब उपयोग के मामलों द्वारा सहन किया जा सकता है लेकिन सभी नहीं। दूसरा, एज कैशिंग केवल REST API के लिए समर्थित है। रेडिस क्लाइंट एज कैशिंग से लाभ नहीं उठा सकते। इसलिए हमने एक नए डेटाबेस टाइप को डिज़ाइन करने का फैसला किया जो डेटा को कई क्षेत्रों में रेप्लिकेट करता है। इसे अत्यधिक उपलब्ध और पर्याप्त रूप से सुसंगत बनाने के लिए डिज़ाइन करना बहुत चुनौतीपूर्ण था। वर्तमान में अपस्टैश में एक ग्लोबल डेटाबेस ऑफरिंग है जो आपके डेटा को 5 अलग-अलग AWS क्षेत्रों (पूर्व और पश्चिम उत्तरी अमेरिका, यूरोप, एशिया, दक्षिण अमेरिका) में रेप्लिकेट करता है। ग्लोबल डेटाबेस कैश नहीं है इसलिए इसमें कैश-इनवैलिडेशन समस्याएं नहीं हैं। लिखने को तुरंत सभी रेप्लिका में रेप्लिकेट किया जाता है। परफॉरमेंस और उपलब्धता के लिए, ग्लोबल डेटाबेस को अंततः सुसंगत होने के लिए डिज़ाइन किया गया है।
एज कैशिंग बनाम ग्लोबल डेटाबेस (या दोनों)
यदि आपको केवल अपने एज समाधान के लिए कैश की आवश्यकता है तो एज कैशिंग एक अच्छा समाधान हो सकता है। लेकिन यदि आपको अपने लिखने की आवश्यकता है कि वे तुरंत कैश को इनवैलिडेट करें, तो आपको ग्लोबल डेटाबेस पसंद करना चाहिए। कैशिंग के अलावा, ग्लोबल डेटाबेस का उपयोग अत्यधिक उपलब्ध ग्लोबल डेटास्टोर के रूप में किया जा सकता है। यह भी ध्यान रखें कि एज कैशिंग केवल REST कॉल के लिए उपलब्ध है। यदि आप रेडिस क्लाइंट का उपयोग कर रहे हैं, तो एज पर कम लेटेंसी के साथ ग्लोबल डेटाबेस एकमात्र विकल्प है।
एज कैशिंग और ग्लोबल डेटाबेस दोनों को रीड लेटेंसी को कम करने/न्यूनतम करने के लिए डिज़ाइन किया गया है। यदि आपका उपयोग का मामला 90% लिखना है तो सिंगल रीजन सेटअप अधिक समझ में आएगा। लिखने की लेटेंसी मल्टी और सिंगल रीजन डेटाबेस दोनों के लिए समान है, लेकिन वे ग्लोबल सेटअप में 5 गुना अधिक महंगे हैं।
जब एज कैशिंग सक्षम होती है, तो अपस्टैश पहली रिक्वेस्ट को ओरिजिन से लाता है फिर इसे एज पर कैश करता है। यदि ओरिजिन पास नहीं है, तो लेटेंसी अधिक होगी। यदि आप सभी मामलों के लिए सर्वोत्तम लेटेंसी चाहते हैं; तो आप ग्लोबल डेटाबेस पर एज कैशिंग सक्षम करके दोनों का उपयोग कर सकते हैं।
बेंचमार्क एप्लिकेशन देखें जो एज कैशिंग और ग्लोबल डेटाबेस की लेटेंसी की तुलना करता है।
आगे क्या?
यहां कुछ चीजें हैं जिन पर हम अपस्टैश को एज पर बेहतर बनाने के लिए काम कर सकते हैं:
- लिखने के लिए कम लेटेंसी: वर्तमान में, ग्लोबल डेटाबेस को सिंगल लीडर आर्किटेक्चर के साथ रीड लेटेंसी को अनुकूलित करने के लिए डिज़ाइन किया गया है। हमें लगता है कि यह अधिकांश उपयोग के मामलों को कवर करता है। लेकिन आपके फीडबैक और नए उपयोग के मामलों के आधार पर हम एक ऐसी आर्किटेक्चर पर काम कर सकते हैं जो कम लेटेंसी लिखने के साथ-साथ पढ़ने भी देती है।
- काफ्का सपोर्ट: हम आने वाले हफ्तों में रेडिस के अलावा काफ्का लॉन्च करने की योजना बना रहे हैं। काफ्का एज पर नए उपयोग के मामलों को सक्षम करेगा जैसे क्लिकस्ट्रीम विश्लेषण या सर्वरलेस/एज फंक्शन से काफ्का पर लॉग पुश करना।
हम आपके फीडबैक द्वारा निर्देशित अपस्टैश को सुधारना और विकसित करना जारी रखते हैं। ट्विटर या डिस्कॉर्ड पर अपने विचार बताएं।