जब एक डिप्लॉयमेंट प्लेटफ़ॉर्म चुनने की बात आती है, तो उनके बीच वास्तविक-विश्व प्रदर्शन की तुलना करना अक्सर बहुत कठिन होता है। यह सर्वरलेस प्लेटफ़ॉर्म के लिए विशेष रूप से सच है, जो वैश्विक एज डिप्लॉयमेंट के कारण सुपर लो लेटेंसी का विज्ञापन करते हैं। लेकिन कम लेटेंसी का क्या फायदा अगर आपका डेटा लाना अभी भी धीमा है? यदि आपका API उपयोगकर्ता के ठीक बगल में चलता है लेकिन डेटा लाने के लिए दुनिया के आधे हिस्से में नेटवर्क राउंडट्रिप करने की आवश्यकता है, तो आपका अनुभव अच्छा नहीं होगा।
पारंपरिक रूप से आपका कंप्यूट और स्टोरेज एक ही सर्वर में या कम से कम एक ही डेटासेंटर में कोलोकेटेड होते थे, लेकिन सर्वरलेस और एज फ़ंक्शन के उदय के साथ, हमने कंप्यूट और स्टोरेज का डिकपलिंग देखा है। यह स्केलिंग और उपलब्धता के लिए बहुत अच्छा है, लेकिन यह एक नई समस्या पेश करता है: लेटेंसी। इन दिनों अपने API को वैश्विक एज नेटवर्क पर डिप्लॉय करना बेहद आसान है, लेकिन आपके डेटा का क्या? डेटा अभी भी पीछे चल रहा है, लेकिन निश्चित रूप से पकड़ रहा है।
इस लेख में हम दो सर्वरलेस डेटास्टोर के प्रदर्शन की तुलना करेंगे: Cloudflare KV और Upstash Redis। दोनों सर्वरलेस हैं, दोनों विश्व स्तर पर वितरित हैं, लेकिन उनका दृष्टिकोण बहुत अलग है। Cloudflare KV एक पुल-आधारित की-वैल्यू स्टोर है, जबकि Upstash एक्टिव रेप्लिकेशन के साथ एक Redis-संगत सेवा है।
पुल-आधारित बनाम एक्टिव रेप्लिकेशन
पुल-आधारित: डेटा आमतौर पर एक केंद्रीय स्थान पर संग्रहीत होता है और केवल तभी एज नोड्स पर ले जाया जाता है जब किसी उपयोगकर्ता द्वारा अनुरोध किया जाता है। यह दृष्टिकोण Cloudflare KV द्वारा अपनाया गया है।
एक्टिव रेप्लिकेशन: डेटा हर एज लोकेशन में संग्रहीत होता है और डेटास्टोर द्वारा स्वयं सिंक में रखा जाता है। डेटा के अपडेट तुरंत सभी क्षेत्रों में रेप्लिकेट हो जाते हैं। यह दृष्टिकोण Upstash और परिणामस्वरूप Vercel द्वारा अपनाया गया है।
कैशिंग वास्तव में केवल कुंजियों और उनके मूल्यों का एक समूह संग्रहीत करना है। यह एक सरल अवधारणा है, लेकिन यह बहुत आम भी है। यह दो डेटास्टोर के प्रदर्शन की तुलना करने का एक शानदार तरीका भी है। हम Cloudflare KV और Upstash Redis के प्रदर्शन की तुलना करने के लिए एक साधारण कैशिंग परिदृश्य का उपयोग करेंगे।
बेंचमार्क
हम वास्तव में क्या परीक्षण कर रहे हैं?
हम एक Cloudflare वर्कर द्वारा Cloudflare KV और Upstash Redis से एक मान पढ़ने का अनुभव की लेटेंसी को मापेंगे।
- 1 Cloudflare वर्कर
- 1000 कुंजियाँ
- 4KB - 64KB डेटा आकार (यादृच्छिक)
- सभी कुंजियों पर 60 सेकंड TTL
- वर्कर को आमंत्रित करने वाले 20 क्षेत्र
- ~10 अनुरोध प्रति सेकंड
मैंने एक छोटा कीस्पेस चुना, ताकि बिना RPS को बहुत अधिक बढ़ाए कुछ कैश हिट सुनिश्चित हो सकें।
वर्कर कोड
वर्कर स्वयं बहुत सरल है, यह केवल Redis से पढ़ता है, KV से पढ़ता है और फिर मूल्यांकन के लिए उन लेटेंसी को वापस करता है।
app.get("/test", async (c) => { const redis = Redis.fromEnv(c.env); const key = Math.floor(Math.random() * 1_000).toString(); const minValueSize = 4 * 1024; const maxValueSize = 64 * 1024; const ttlSeconds = 60; const randomValue = new TextDecoder().decode( crypto.getRandomValues( new Uint8Array( Math.floor(Math.random() * (maxValueSize - minValueSize)) + minValueSize, ), ), ); const beforeRedis = performance.now(); const redisResponse = await redis.get(key); const redisLatency = performance.now() - beforeRedis; if (!redisResponse) { await redis.set(key, randomValue, { ex: ttlSeconds, }); } const beforeKV = performance.now(); const kvResponse = await c.env.ANDREAS_KV_BENCHMARK.get(key); const kvLatency = performance.now() - beforeKV; if (!kvResponse) { await c.env.ANDREAS_KV_BENCHMARK.put(key, randomValue, { expirationTtl: ttlSeconds, }); } return c.json({ kvLatency, redisLatency, }); });
परिणाम - वैश्विक लेटेंसी
बेंचमार्क को ~30 मिनट तक चलाने के बाद, हम दोनों डेटास्टोर के बीच कुछ महत्वपूर्ण अंतर देख सकते हैं।
पूरा आकार देखने के लिए छवि पर क्लिक करें
जैसा कि आप देख सकते हैं, Cloudflare KV लगातार Upstash Redis से धीमा है। मुझे इसकी उम्मीद नहीं थी, क्योंकि Cloudflare KV को कम-लेटेंसी के रूप में विज्ञापित करता है और उसी प्लेटफ़ॉर्म पर चलता है जिस पर वर्कर चलते हैं। हां, वे डिफ़ॉल्ट रूप से हर एक क्षेत्र में डेटा नहीं रखते, लेकिन कुछ मिनटों के बाद, मुझे उम्मीद थी कि डेटा उस क्षेत्र में कैश हो जाएगा जहां वर्कर चल रहा है।
शायद लोड उनके सिस्टम के लिए डेटा को कोलोकेट करने के लिए पर्याप्त नहीं है? आइए एक क्षेत्र को अलग करें और लोड को काफी बढ़ाएं यह देखने के लिए कि क्या इससे कोई फर्क पड़ता है।
एकल क्षेत्र
आइए बहुत अधिक RPS के साथ एकल क्षेत्र के परिणामों को देखें। सिद्धांत रूप में Cloudflare को इस क्षेत्र में अपने सभी कैश को गर्म करने में सक्षम होना चाहिए और विज्ञापित के अनुसार सुपर लो लेटेंसी प्राप्त करनी चाहिए।
यह परीक्षण पहले वाले के समान है, सिवाय इसके कि हम एक ही क्षेत्र से वर्कर को कॉल कर रहे हैं और ~400 RPS के साथ।
पूरा आकार देखने के लिए छवि पर क्लिक करें
KV की लेटेंसी में बड़े पैमाने पर सुधार हुआ है:
- P90: 742ms -> 115ms
- P99: 1,336ms -> 560ms
जाहिर है, Cloudflare को वास्तव में अपने डेटा को चल रहे वर्कर्स के करीब रेप्लिकेट करने से पहले काफी उच्च लोड की आवश्यकता होती है। हालांकि यह अभी भी Upstash Redis की लेटेंसी से काफी ऊपर है। जबकि Cloudflare की P90 लेटेंसी 115ms इतनी खराब नहीं है, आधे सेकंड से अधिक की P99 लेटेंसी स्पष्ट रूप से ध्यान देने योग्य है। ध्यान रखें कि हम यह सुनिश्चित करने के लिए लगभग 400 अनुरोध प्रति सेकंड कर रहे हैं कि डेटा वास्तव में रेप्लिकेट हो, जो पहले से ही अधिकांश छोटे से मध्यम API की तुलना में अधिक लोड है।
दिलचस्प बात यह है कि आप देख सकते हैं कि Cloudflare ने डेटा को वर्कर के करीब या दूर कब ले जाया, जिसे निम्नलिखित छवि में एनोटेट किया गया है:
पूरा आकार देखने के लिए छवि पर क्लिक करें
मूल्य निर्धारण
लागत के बारे में बात किए बिना यह तुलना निष्पक्ष नहीं होगी।
यहां मुख्य प्रेरक कारक किसी भी डेटास्टोर तक पहुंचने की प्रति-अनुरोध लागत होगी।
Cloudflare KV रीड के लिए प्रति मिलियन $0.50 चार्ज करता है, जबकि Upstash Redis कमांड के लिए प्रति मिलियन $1 चार्ज करता है। कुछ अन्य अंतर हैं, जहां Cloudflare स्टोरेज पर अधिक महंगा है, जबकि Upstash बैंडविड्थ पर अधिक महंगा है। हालांकि, ये इस परिदृश्य में मुख्य लागत चालक नहीं हैं।
- Cloudflare मूल्य निर्धारण
- Upstash मूल्य निर्धारण
क्या Upstash आपके लिए सही है?
यह एक ऐसा सवाल है जिसका जवाब केवल आप दे सकते हैं।
जाहिर है हम यहां पक्षपाती हैं और वास्तव में अपने उत्पाद और उसके मूल्य में विश्वास करते हैं, इसलिए इसे एक चुटकी नमक के साथ लें।
यदि आप एक छोटे से मध्यम आकार का API चला रहे हैं, तो आपको लेटेंसी को प्राथमिकता देनी चाहिए क्योंकि लागत नगण्य होगी। जब API पर भारी ट्रैफ़िक होता है, तो Upstash निश्चित मूल्य निर्धारण प्रदान करता है जो Cloudflare KV से सस्ता है।
यदि आपको केवल set, get या list जितना सरल चाहिए, तो आप हमेशा वर्कर्स प्लेटफ़ॉर्म पर रहेंगे और उच्च लेटेंसी आपके एप्लिकेशन के लिए स्वीकार्य है, तो Cloudflare KV सही विकल्प हो सकता है। सब कुछ एक ही जगह पर संभाला जाता है और आपको किसी चीज़ की चिंता करने की ज़रूरत नहीं है।
यदि आपने उनमें से किसी भी प्रश्न का उत्तर 'नहीं' में दिया है, तो मैं आपको Upstash को आज़माने के लिए प्रोत्साहित करूंगा। Redis में बहुत सी विशेषताएं हैं जो Cloudflare KV में नहीं हैं, जैसे पब/सब, सॉर्टेड सेट, हैश, आदि। और Upstash उन सभी का समर्थन करता है। यदि आप पहले से ही Redis का उपयोग कर रहे हैं, तो आप बस अपने एप्लिकेशन को Upstash पर इंगित कर सकते हैं और यह काम करेगा। कुछ भी बदलने की आवश्यकता नहीं है।
निष्कर्ष
Cloudflare KV एक बेहतरीन उत्पाद है, लेकिन यह Redis जैसे पूर्ण विकसित डेटाबेस का प्रतिस्थापन नहीं है। यह सरल उपयोग-मामलों के लिए उपयुक्त है, जहां लेटेंसी चिंता का विषय नहीं है।
हमारे डिस्कॉर्ड पर आकर नमस्ते कहें या X पर इस बारे में कोई भी प्रश्न पूछें।