<पी> परिनियोजन प्लेटफ़ॉर्म चुनते समय, उनके बीच वास्तविक दुनिया के प्रदर्शन की तुलना करना अक्सर बहुत कठिन होता है। यह सर्वर रहित प्लेटफ़ॉर्म के लिए विशेष रूप से सच है, जो वैश्विक बढ़त परिनियोजन के कारण सुपर लो विलंबता का विज्ञापन करते हैं। लेकिन यदि आपका डेटा प्राप्त करना अभी भी धीमा है तो कम विलंबता का क्या फायदा? यदि आपका एपीआई उपयोगकर्ता के ठीक बगल में चलता है, लेकिन डेटा लाने के लिए दुनिया भर में आधे रास्ते में नेटवर्क राउंडट्रिप करने की आवश्यकता है, तो आपके लिए अच्छा समय नहीं होगा। <पी> परंपरागत रूप से आपका कंप्यूट और आपका स्टोरेज एक ही सर्वर या कम से कम एक ही डेटासेंटर में स्थित होगा, लेकिन सर्वर रहित और एज फ़ंक्शंस के बढ़ने के साथ, हमने कंप्यूट और स्टोरेज का अलग होना देखा है। यह स्केलिंग और उपलब्धता के लिए बहुत अच्छा है, लेकिन यह एक नई समस्या पेश करता है:विलंबता। इन दिनों अपने एपीआई को ग्लोबल एज नेटवर्क पर तैनात करना बहुत आसान है, लेकिन आपके डेटा के बारे में क्या? डेटा अभी भी पीछे चल रहा है, लेकिन निश्चित रूप से गति पकड़ रहा है। <पी> इस लेख में हम दो सर्वर रहित डेटास्टोर्स के प्रदर्शन की तुलना करेंगे:क्लाउडफ्लेयर केवी और अपस्टैश रेडिस। दोनों सर्वर रहित हैं, दोनों विश्व स्तर पर वितरित हैं, लेकिन वे अपने दृष्टिकोण में बहुत भिन्न हैं। क्लाउडफ्लेयर केवी एक पुल-आधारित कुंजी-मूल्य स्टोर है, जबकि अपस्टैश सक्रिय प्रतिकृति के साथ एक रेडिस-संगत सेवा है। <पी> पुल-आधारित :डेटा आम तौर पर एक केंद्रीय स्थान पर संग्रहीत किया जाता है और उपयोगकर्ता द्वारा अनुरोध किए जाने पर ही इसे किनारे-नोड्स में ले जाया जाता है। यह क्लाउडफ्लेयर केवी द्वारा अपनाया गया दृष्टिकोण है। <पी> सक्रिय प्रतिकृति :डेटा को प्रत्येक किनारे-स्थान पर संग्रहीत किया जाता है और डेटास्टोर द्वारा ही सिंक किया जाता है। डेटा के अपडेट तुरंत सभी क्षेत्रों में दोहराए जाते हैं। यह अपस्टैश और फलस्वरूप वर्सेल द्वारा अपनाया गया दृष्टिकोण है। <पी> कैशिंग वास्तव में केवल कुंजियों का एक समूह और उनके मूल्यों को संग्रहीत करना है। यह एक सरल अवधारणा है, लेकिन यह बहुत सामान्य भी है। यह दो डेटास्टोर के प्रदर्शन की तुलना करने का भी एक शानदार तरीका है। हम क्लाउडफ्लेयर केवी और अपस्टैश रेडिस के प्रदर्शन की तुलना करने के लिए एक सरल कैशिंग परिदृश्य का उपयोग करेंगे। बेंचमार्क
<पी> हम वास्तव में क्या परीक्षण कर रहे हैं? <पी> हम क्लाउडफ़ेयर केवी और अपस्टैश रेडिस से एकल मान पढ़ते समय क्लाउडफ़ेयर कार्यकर्ता द्वारा अनुभव की गई विलंबता को मापेंगे। - 1 क्लाउडफ्लेयर कार्यकर्ता
- 1000 कुंजियाँ
- 4KB - 64KB डेटा आकार (यादृच्छिक)
- सभी कुंजियों पर 60 के दशक का टीटीएल
- कार्यकर्ता का आह्वान करने वाले 20 क्षेत्र
- ~10 अनुरोध प्रति सेकंड
<पी> मैंने एक छोटा सा कीस्पेस चुना, यह सुनिश्चित करने के लिए कि हमें आरपीएस को बहुत अधिक क्रैंक किए बिना कुछ कैश हिट मिल रहे हैं। कर्मचारी कोड
<पी> कार्यकर्ता स्वयं बहुत सरल है, यह बस रेडिस से पढ़ता है, केवी से पढ़ता है और फिर बाद में मूल्यांकन करने के लिए उन विलंबताओं को लौटाता है। वर्कर.tsapp.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 मिनट तक बेंचमार्क चलाने के बाद, हम पहले से ही दोनों डेटास्टोर के बीच कुछ महत्वपूर्ण अंतर देख सकते हैं।
<पी> पूर्ण आकार के लिए छवि पर क्लिक करें <पी> जैसा कि आप देख सकते हैं क्लाउडफ्लेयर केवी अपस्टैश रेडिस की तुलना में लगातार धीमा है। मैं इसकी उम्मीद नहीं कर रहा था, क्योंकि क्लाउडफ्लेयर केवी को कम-विलंबता के रूप में विज्ञापित करता है और स्वयं श्रमिकों के समान मंच पर चलता है। हां, वे डिफ़ॉल्ट रूप से हर एक क्षेत्र में डेटा नहीं रखते हैं, लेकिन कुछ मिनटों के बाद, मुझे उम्मीद है कि डेटा उस क्षेत्र में कैश किया जाएगा जहां कार्यकर्ता चल रहा है। <पी> हो सकता है कि लोड उनके सिस्टम के लिए डेटा को कोलोकेट करने के लिए पर्याप्त नहीं है? आइए एक क्षेत्र को अलग करें और लोड को काफी हद तक बढ़ाएं यह देखने के लिए कि क्या इससे कोई फर्क पड़ता है। एकल क्षेत्र
<पी> आइए बहुत अधिक आरपीएस वाले एक क्षेत्र के परिणामों को देखें। सैद्धांतिक रूप से क्लाउडफ्लेयर को इस क्षेत्र में अपने सभी कैश को गर्म करने और विज्ञापित के अनुसार बेहद कम विलंबता प्राप्त करने में सक्षम होना चाहिए। <पी> यह परीक्षण पहले परीक्षण के समान है, सिवाय इसके कि हम कार्यकर्ता को एक ही क्षेत्र से और ~400 आरपीएस के साथ बुला रहे हैं।
<पी> पूर्ण आकार के लिए छवि पर क्लिक करें <पी> केवी की विलंबता में बड़े पैमाने पर सुधार हुआ है: - P90: 742ms -> 115ms
- P99: 1,336ms ->560ms
<पी> जाहिर तौर पर क्लाउडफ़ेयर वास्तव में आपके डेटा को चालू श्रमिकों के करीब दोहराने से पहले आपको वास्तव में उच्च लोड की आवश्यकता होती है। हालाँकि यह अभी भी अपस्टैश रेडिस की विलंबता से काफी ऊपर है। हालांकि क्लाउडफ्लेयर की P90 विलंबता 115ms इतनी खराब नहीं है, लेकिन आधे सेकंड से अधिक की P99 विलंबता स्पष्ट रूप से ध्यान देने योग्य है। ध्यान रखें कि हम यह सुनिश्चित करने के लिए प्रति सेकंड लगभग 400 अनुरोध कर रहे हैं कि डेटा वास्तव में दोहराया गया है, जो आमतौर पर अधिकांश छोटे से मध्यम एपीआई की तुलना में पहले से ही अधिक लोड है। <पी> दिलचस्प बात यह है कि आप निम्न छवि में देख सकते हैं कि क्लाउडफ्लेयर ने कब डेटा को कार्यकर्ता से करीब या दूर ले जाया है:
<पी> पूर्ण आकार के लिए छवि पर क्लिक करें मूल्य निर्धारण
<पी> चीजों की कीमत के बारे में बात किए बिना यह उचित तुलना नहीं होगी। <पी> यहां मुख्य प्रेरक कारक किसी भी डेटास्टोर तक पहुंचने के लिए प्रति-अनुरोध लागत होगी। <पी> क्लाउडफ़ेयर प्रति मिलियन केवी रीड्स के लिए $0.50 का शुल्क लेता है, जबकि अपस्टैश प्रति मिलियन रेडिस कमांड के लिए $1 का शुल्क लेता है। कुछ अन्य अंतर भी हैं, जहाँ क्लाउडफ़ेयर स्टोरेज पर अधिक महंगा है, जबकि अपस्टैश बैंडविड्थ के मामले में अधिक महंगा है। हालाँकि, इस परिदृश्य में ये मुख्य लागत चालक नहीं हैं। - क्लाउडफ्लेयर मूल्य निर्धारण
- अपस्टैश मूल्य निर्धारण
क्या अपस्टैश आपके लिए सही है?
<पी> यह एक ऐसा प्रश्न है जिसका उत्तर केवल आप ही दे सकते हैं। पी> <पी> जाहिर तौर पर हम यहां पक्षपाती हैं और वास्तव में अपने उत्पाद और उसके मूल्य पर विश्वास करते हैं, इसलिए इसे थोड़ा नमक के साथ लें। <पी> यदि आप छोटे से मध्यम आकार का एपीआई चला रहे हैं, तो आपको विलंबता पर विचार करने की आवश्यकता होगी क्योंकि लागत नगण्य होगी। जब एपीआई पर भारी ट्रैफ़िक होता है, तो अपस्टैश निश्चित मूल्य निर्धारण की पेशकश करता है जो क्लाउडफ्लेयर केवी से सस्ता है। <पी> यदि आपको कभी भी केवल set की आवश्यकता होगी , get या list , आप हमेशा वर्कर्स प्लेटफ़ॉर्म पर बने रहेंगे और आपके एप्लिकेशन के लिए उच्च विलंबता स्वीकार्य है, तो क्लाउडफ़ेयर केवी सही विकल्प हो सकता है। सब कुछ एक ही स्थान पर संभाला जाता है और आपको किसी भी चीज़ के बारे में चिंता करने की ज़रूरत नहीं है। <पी> यदि आपने इनमें से किसी भी प्रश्न का उत्तर 'नहीं' में दिया है , तो मैं आपको अपस्टैश को आज़माने के लिए प्रोत्साहित करूंगा। Redis में बहुत सारी विशेषताएं हैं जो Cloudflare KV में नहीं हैं, जैसे पब/उप, सॉर्ट किए गए सेट, हैश इत्यादि। और Upstash उन सभी का समर्थन करता है। यदि आप पहले से ही Redis का उपयोग कर रहे हैं, तो आप बस अपने एप्लिकेशन को Upstash पर इंगित कर सकते हैं और यह बस काम करेगा। कुछ भी बदलने की जरूरत नहीं. निष्कर्ष
<पी> क्लाउडफ्लेयर केवी एक बेहतरीन उत्पाद है, लेकिन यह रेडिस जैसे पूर्ण विकसित डेटाबेस का प्रतिस्थापन नहीं है। यह साधारण उपयोग के मामलों के लिए उपयुक्त है, जहां विलंबता चिंता का विषय नहीं है। <पी> आइए नमस्ते कहें और हमारे डिस्कॉर्ड में या एक्स पर इनमें से किसी के बारे में प्रश्न पूछें।