Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

प्रदर्शन और लागत तुलना:डेनो केवी बनाम अपस्टैश रेडिस

<पी> लगभग 2 सप्ताह पहले हमने क्लाउडफ्लेयर केवी और अपस्टैश रेडिस के प्रदर्शन और लागत की तुलना की थी। इस बार हम डेनो केवी को देखेंगे, जो उनके ग्लोबल एज नेटवर्क में चलने वाला एक डेनो-नेटिव कुंजी मूल्य स्टोर है।

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

<पी> हम दो अलग-अलग बेंचमार्क आयोजित करेंगे, दोनों कोड को चलाने के लिए डेनो डिप्लॉय का उपयोग करेंगे। दोनों ही मामलों में, केवी स्टोर और रेडिस में सभी उपलब्ध रीड क्षेत्र सक्षम होंगे।

  1. planetfall.io का उपयोग करके दुनिया भर के 20 क्षेत्रों से आह्वान।
  2. बहुत अधिक लोड वाले एकल क्षेत्र से आह्वान।
<पी> बाद में, हम परिणामों की तुलना करेंगे और ट्रेड-ऑफ़ और मूल्य निर्धारण के बारे में बात करेंगे।

बेंचमार्क

<पी> यहां बताया गया है कि सेटअप कैसा दिखता है, यह मूल रूप से क्लाउडफ्लेयर जैसा ही है, बस डेनो केवी का उपयोग करने के लिए अपडेट किया गया है।

  • 1000 कुंजियाँ
  • 4 केबी - 64 केबी डेटा आकार (यादृच्छिक)
  • सभी कुंजियों पर 60 के दशक का टीटीएल
  • फ़ंक्शन लागू करने वाले 20 क्षेत्र
  • ~10 अनुरोध प्रति सेकंड
<पी> मैंने एक छोटा सा कीस्पेस चुना, यह सुनिश्चित करने के लिए कि हमें आरपीएस को बहुत अधिक क्रैंक किए बिना कुछ कैश हिट मिल रहे हैं।

कोड

<पी> यह फ़ंक्शन अपने आप में बहुत सरल है; यह बस रेडिस से पढ़ता है, केवी से पढ़ता है, और फिर बाद में मूल्यांकन के लिए उन विलंबताओं को लौटाता है।

main.ts
app.get("/test", async (c) => {
 const key = Math.floor(Math.random() * 1_000).toString()
 const minValueSize = 4 * 1024
 const maxValueSize = 64 * 1024
 
 const data = randomBytes(minValueSize, maxValueSize)
 
 const ttlSeconds = 60
 
 const beforeRedis = performance.now()
 const redisResponse = await fetch(Deno.env.get("UPSTASH_REDIS_REST_URL")!, {
 method: "POST",
 headers: {
 "Content-Type": "application/json",
 "Authorization": `Bearer ${Deno.env.get("UPSTASH_REDIS_REST_TOKEN")}`,
 },
 body: JSON.stringify(["GET", key])
 })
 const redisLatency = performance.now() - beforeRedis
 
 if (!redisResponse) {
 await fetch(Deno.env.get("UPSTASH_REDIS_REST_URL")!, {
 method: "POST",
 headers: {
 "Content-Type": "application/json",
 "Authorization": `Bearer ${Deno.env.get("UPSTASH_REDIS_REST_TOKEN")}`,
 },
 body: JSON.stringify(["SET", key, data, "EX", ttlSeconds])
 })
 }
 
 const kv = await Deno.openKv();
 
const beforeKV = performance.now()
 const kvResponse = await kv.get([key])
 const kvLatency = performance.now() - beforeKV
 if (!kvResponse.value) {
 const setRes = await kv.set([key], data, { expireIn: ttlSeconds })
 console.log({ setRes })
 }
 
 return c.json({
 redisLatency,
 kvLatency,
 });
});

परिणाम - वैश्विक विलंबता

<पी> 30 मिनट के बाद, परिणाम यहां हैं। यहां मापी गई विलंबता केवल डेनो डिप्लॉय के फ़ंक्शन से स्टोर तक है, इसमें फ़ंक्शन को लागू करने के लिए नेटवर्क राउंडट्रिप शामिल नहीं है।

प्रदर्शन और लागत तुलना:डेनो केवी बनाम अपस्टैश रेडिस <पी> पूर्ण आकार के लिए छवि पर क्लिक करें

डेनो केवी अपस्टैश रेडिस P90265ms76msP99494ms94ms <पी> केवी से डेटा पढ़ते समय डेनो केवी काफी धीमा है। मेरा पहला विचार यह था कि हो सकता है कि उनके पास दुनिया भर में वितरित पर्याप्त पढ़ने योग्य क्षेत्र न हों। इस बेंचमार्क के समय, उनके पास gpc-us-east4 था , gpc-asia-southeast1 , gcp-europe-west3 , gcp-southamerica-east1 और gcp-us-west2 .

<पी> शायद डेटा लाने के लिए बड़ी संख्या में अनुरोधों को कई क्षेत्रों में जाने की आवश्यकता होती है, जो उच्च विलंबता को समझाएगा, एक ही क्लाउड और संभावित डेटासेंटर के अंदर गणना और भंडारण दोनों को नियंत्रित करने के डेनो के लाभ को प्रभावी ढंग से समाप्त कर देगा। दूसरी ओर, अपस्टैश AWS पर चल रहा है और डेनो से रेडिस तक के सभी अनुरोध क्लाउड प्रदाता सीमाओं के पार जा रहे हैं।

एकल क्षेत्र

<पी> इस सिद्धांत का परीक्षण करने के लिए, मैंने दूसरा बेंचमार्क चलाया है, जहां मैं केवल एक ही स्थान (मेरे घर) से फ़ंक्शन का आह्वान कर रहा हूं और सभी अनुरोध फ्रैंकफर्ट से होते हैं। डेनो केवी और अपस्टैश रेडिस दोनों के पास gcp-europe-west3 की एक पठनीय प्रतिकृति है और eu-central-1 क्रमशः GCP और AWS के लिए।

प्रदर्शन और लागत तुलना:डेनो केवी बनाम अपस्टैश रेडिस <पी> पूर्ण आकार के लिए छवि पर क्लिक करें

<पी> इस परिदृश्य में दोनों सेवाएँ बहुत तेज़ हैं, लेकिन डेनो केवी अभी भी अपस्टैश रेडिस की तुलना में धीमी है। यहाँ एकल क्षेत्र के लिए विलंबताएँ हैं, कोष्ठक में डेल्टा से वैश्विक विलंबता के साथ:

डेनो केवी अपस्टैश रेडिस P90132ms (-133)16ms (-60)P99154ms (-340)26ms (-68) <पी> 154 एमएस निश्चित रूप से 494 एमएस से काफी बेहतर है, लेकिन यह धारणा है कि मेरा सारा ट्रैफिक एक ही क्षेत्र से आ रहा है, जो ग्लोबल एज नेटवर्क के पूरे विचार के खिलाफ है। यदि आप एक वैश्विक एपीआई चला रहे हैं, तो आपके पास दुनिया भर से ट्रैफिक आएगा और केवी में डेटा तक पहुंच की आवश्यकता वाले प्रत्येक अनुरोध को इसके द्वारा धीमा कर दिया जाएगा।

मूल्य निर्धारण

<पी> डेनो और अपस्टैश दोनों आपको मुख्य रूप से उपयोग के लिए बिलिंग कर रहे हैं। दोनों के पास अच्छे निःशुल्क स्तर हैं, इसलिए आप बिना कुछ भुगतान किए उन्हें आज़मा सकते हैं।

डेनो केवी अपस्टैश रेडिस फ़्लैट लागत$20/माह (पढ़े गए क्षेत्रों को जोड़ने के लिए) मुफ़्त भंडारण$0.50 / जीबी$0.25 / जीबीरीड्स$1 / मिलियन / 4केबी$2 / मिलियन (आकार की परवाह किए बिना)राइट $2.50 / मिलियन / 1 केबी$2 / मिलियन (आकार की परवाह किए बिना)बैंडविड्थ$0.50 / जीबी$0.03 / जीबी <पी> मुख्य अंतर यह है कि डेनो की कीमत उतनी पारदर्शी नहीं है जितनी मुझे उम्मीद थी क्योंकि लागत की गणना करने के लिए मुझे यह जानना होगा कि मेरे अनुरोध कितने बड़े होंगे। अपस्टैश के साथ यह कोई समस्या नहीं है, क्योंकि सभी अनुरोधों का बिल समान होता है। अपस्टैश पर डिफ़ॉल्ट रूप से आप प्रति अनुरोध 1 एमबी तक पढ़ या लिख सकते हैं और हम आपको एक निश्चित शुल्क पर इसे बढ़ाने की अनुमति देते हैं।

<पी> लब्बोलुआब यह है कि यदि आप प्रति अनुरोध 8kb से अधिक पढ़ रहे हैं, तो अपस्टैश संभवतः सस्ता है।

निष्कर्ष

<पी> डेनो केवी का उपयोग करना काफी अच्छा लगता है क्योंकि यह एक ही प्लेटफॉर्म पर है; आपको एक अलग खाता प्रबंधित करने की आवश्यकता नहीं है, और इसका उपयोग करने के लिए किसी अतिरिक्त सेटअप की आवश्यकता नहीं है। हालाँकि, प्रदर्शन और लागत अपस्टैश के आसपास भी नहीं है। इसमें यह भी सीमित है कि आप इसके साथ क्या कर सकते हैं। मान सेट करना और प्राप्त करना, हालांकि यह सबसे आम ऑपरेशन है, यह सब आप Redis के साथ नहीं कर सकते हैं। रेडिस के लिए ढेर सारे विचार और उपयोग के मामले ढूंढने के लिए हमारे उदाहरण देखें।

<पी> आइए नमस्ते कहें और हमारे डिस्कॉर्ड में या एक्स पर इनमें से किसी के बारे में प्रश्न पूछें।


  1. HTML DOM ऑब्जेक्ट का हवाला देता है HTML DOM ऑब्जेक्ट का हवाला देता है

    एचटीएमएल डोम साइट ऑब्जेक्ट एचटीएमएल एलिमेंट से जुड़ा है। किसी उद्धृत रचनात्मक कार्य का संदर्भ देने के लिए तत्व का उपयोग किया जाता है और शीर्षक को शामिल किया जाना चाहिए। यह पेंटिंग, किताब, टीवी शो, फिल्में आदि हो सकती हैं। सिंटैक्स − . के लिए वाक्य रचना निम्नलिखित है एक साइट ऑब्जेक्ट बनाना - var

  1. HTML नेविगेटर ऐपसंस्करण संपत्ति HTML नेविगेटर ऐपसंस्करण संपत्ति

    HTML नेविगेटर ऐप वर्जन गुण ब्राउज़र के संस्करण की जानकारी देता है। सिंटैक्स निम्नलिखित वाक्य रचना है - navigator.appVersion आइए हम HTML नेविगेटर ऐप वर्जन प्रॉपर्टी का एक उदाहरण देखें - उदाहरण <!DOCTYPE html> <html> <style>    body {       color: #000; &nb

  1. कैसे सीएसएस और जावास्क्रिप्ट के साथ ज़ूम करने के लिए एक छवि बनाने के लिए? कैसे सीएसएस और जावास्क्रिप्ट के साथ ज़ूम करने के लिए एक छवि बनाने के लिए?

    छवि ज़ूम बनाने के लिए कोड निम्नलिखित है: उदाहरण <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style>    * {box-sizing: border-box;}    .img{       display: inl