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

रेडिस @ एज विद क्लाउडफ्लेयर वर्कर्स

एज पर कंप्यूटिंग हाल के वर्षों में सबसे रोमांचक क्षमताओं में से एक है। सीडीएन आपको अपनी फाइलों को अपने उपयोगकर्ताओं के करीब रखने की अनुमति देता है। एज कंप्यूटिंग आपको अपने एप्लिकेशन को अपने उपयोगकर्ताओं के करीब चलाने की अनुमति देता है। यह डेवलपर्स को विश्व स्तर पर वितरित, प्रदर्शनकारी एप्लिकेशन बनाने में मदद करता है।

क्लाउडफ्लेयर वर्कर्स इस समय इस क्षेत्र में अग्रणी उत्पाद है। यह आपको बिना कोल्ड स्टार्ट के सर्वर रहित प्रोसेसिंग वातावरण देता है। आप अपने अनुप्रयोगों की विलंबता को कम करने के लिए Cloudflare के वैश्विक नेटवर्क का लाभ उठाते हैं। आप अपने कार्यों को Javascript, Rust, C और C++ में लिख सकते हैं।

सर्वरलेस फ़ंक्शंस (AWS लैम्ब्डा आदि) के समान, Cloudflare Worker स्टेटलेस होते हैं। जैसा कि आप क्लाउडफ्लेयर के सर्वेक्षण में देख सकते हैं, डेवलपर्स अपने डेटाबेस को एज फ़ंक्शंस से जोड़ने के तरीके पूछ रहे हैं। दुर्भाग्य से, अधिकांश डेटाबेस सर्वर रहित वातावरण के लिए डिज़ाइन नहीं किए गए हैं, उन्हें लगातार कनेक्शन की आवश्यकता होती है। हमने रेडिस पर REST API विकसित किया है ताकि सर्वर रहित एज फंक्शन्स को Upstash को सबसे सरल और सबसे तेज़ तरीके से एक्सेस करने में सक्षम बनाया जा सके।

क्लाउडफ्लेयर वर्कर्स केवी के साथ तुलना करना

Cloudflare का एक बेसिक Key Value स्टोर है जिसका उपयोग आप अपने Edge फंक्शन की स्थिति को स्टोर करने के लिए कर सकते हैं। Upstash Redis कई पहलुओं में Cloudflare KV के खिलाफ उत्कृष्ट प्रदर्शन करता है:

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

अब Cloudflare+Redis संयोजन की शक्ति को प्रदर्शित करने के लिए एक सरल उदाहरण लिखते हैं।

Analytics at Edge

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

  • पृष्ठ दृश्य
  • अद्वितीय विज़िटर
  • सबसे अधिक विज़िटर वाले शीर्ष देश
  • सर्वाधिक देखे गए पृष्ठ

सेटअप

यदि आपके पास एक नहीं है, तो इस गाइड का पालन करते हुए एक डेटाबेस बनाएं। डेटाबेस पेज में, REST API बटन पर क्लिक करें और REST URL को कॉपी करें। यदि आपके पास Cloudflare खाता है, तो आप एक वर्कर्स फ़ंक्शन बना सकते हैं या आप बिना किसी खाते के भी खेल के मैदान का उपयोग कर सकते हैं।

:::नोट वैश्विक डेटाबेस का चयन करें Upstash डेटाबेस बनाते समय। वैश्विक डेटाबेस एज फ़ंक्शंस से विलंबता को कम करने के लिए डेटा को कई क्षेत्रों में दोहराता है।:::

क्लाउडफ्लेयर वर्कर्स कोड

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

Upstash REST API को एक एंडपॉइंट और एक टोकन की आवश्यकता होती है। डेटाबेस बनाने के बाद, आप एंडपॉइंट और टोकन को कंसोल से REST API पर क्लिक करके कॉपी कर सकते हैं बटन। एंडपॉइंट और टोकन की जगह, नीचे दिए गए कोड के साथ अपने क्लाउडफ्लेयर वर्कर्स फ़ंक्शन को अपडेट करें:

const endpoint = "REPLACE_UPSTASH_REST_ENDPOINT";
const token = "REPLACE_UPSTASH_REST_TOKEN";

async function recordRequest(request) {
  let d = new Date();
  let datestr = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate();
  let data = [["url", request.url], ...request.headers];
  let url = endpoint + "/lpush/" + datestr;
  const init = {
    body: JSON.stringify(data),
    method: "POST",
    headers: {
      Authorization: "Bearer " + token,
    },
  };
  return await fetch(url, init);
}

async function handleRequest(request) {
  recordRequest(request);
  return new Response("My Awesome Website");
}

addEventListener("fetch", (event) => {
  event.respondWith(
    handleRequest(event.request).catch(
      (err) => new Response(err.stack, { status: 500 })
    )
  );
});

Analytics टूल कोड

अब एक साधारण कमांड लाइन एप्लिकेशन लिखते हैं जो तारीख को एक तर्क के रूप में लेगा और हमें एनालिटिक्स डेटा लौटाएगा। एक फोल्डर बनाएं और npm init चलाएं . फिर रेडिस क्लाइंट को npm install ioredis . के साथ इंस्टॉल करें . कॉपी .env.example .env . के रूप में फ़ाइल करें और अपना Redis URL (ioredis) सेट करें। index.js को नीचे से अपडेट करें:

const Redis = require("ioredis");
require("dotenv").config();
console.log("EDGE analytics with CloudFlare Workers and Upstash Redis.");
let redis = new Redis(process.env.REDIS_URL);
let dateArg = process.argv[2];
let datestr;
if (dateArg) {
  datestr = dateArg;
} else {
  let d = new Date();
  datestr = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate();
}

redis.lrange(datestr, "0", "-1", function (err, result) {
  let pageview = 0;
  let users = new Set();
  let countries = new Map();
  let paths = new Map();
  if (err) {
    console.log("Could not connect to Redis.");
    console.error(err);
  } else {
    console.log(
      "Upstash Redis Connection Successful. Analyzing the access logs..."
    );
    if (!result || result.length === 0) {
      console.log("Could not find any access logs for the date:" + datestr);
    } else {
      for (const elem of result) {
        let entries = JSON.parse(elem);
        for (let entry of entries) {
          if (entry[0] === "accept") {
            if (entry[1].startsWith("text")) pageview++;
          }
          if (entry[0] === "cf-ipcountry") {
            let temp = countries.get(entry[1]);
            if (!temp) {
              temp = 0;
            }
            countries.set(entry[1], temp + 1);
          }
          if (entry[0] === "url") {
            let temp = paths.get(entry[1]);
            if (!temp) {
              temp = 0;
            }
            paths.set(entry[1], temp + 1);
          }
          if (entry[0] === "x-real-ip") {
            users.add(entry[1]);
          }
        }
      }
      countries = new Map([...countries.entries()].sort((a, b) => b[1] - a[1]));
      paths = new Map([...paths.entries()].sort((a, b) => b[1] - a[1]));
      console.log("\nDATE: " + datestr);
      console.log("\nPAGE VIEWS: " + pageview);
      console.log("\nUNIQUE VISITORS: " + users.size);
      logMap("TOP COUNTRIES", countries);
      logMap("TOP PAGES", paths);
    }
  }
});

function logMap(title, data) {
  console.log("\n" + title);
  console.log("----------------");
  console.log(mapEntriesToString(data));
}

function mapEntriesToString(entries) {
  return Array.from(entries, ([k, v]) => `${k} : ${v}\n`).join("");
}

अब आप अपना आवेदन node index 2021-6-16 . के साथ चला सकते हैं या सिर्फ node index . बाद वाला आज के लिए पूछेगा।

रेडिस @ एज विद क्लाउडफ्लेयर वर्कर्स

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

अपस्टैश एज रोडमैप

REST API हमारी एज स्टोरी का पहला चरण है। हम इस साल दो महत्वपूर्ण विकास की योजना बना रहे हैं।

  • एज कैशिंग:(अपडेट:यह जारी किया गया है, और जानें) अभी, आपके सभी आरईएसटी अनुरोध आपके डेटाबेस क्षेत्र में आते हैं। हम जल्द ही एज कैशिंग का समर्थन करेंगे, इसलिए आपके आरईएसटी अनुरोध विश्व स्तर पर सभी किनारे के स्थानों पर कैश किए जाएंगे। यह Upstash Redis को Cloudflare KV की तरह दुनिया भर में कम विलंबता प्रदान करने में सक्षम करेगा।
  • वैश्विक प्रतिकृति डेटाबेस:(अपडेट:यह जारी किया गया है, और जानें) वैश्विक (बहु क्षेत्र) प्रतिकृति आपके डेटा को कई क्षेत्रों में दोहराएगी। तो सभी अनुरोध (Redis और REST API दोनों) निकटतम स्थान पर जाएंगे। यह आपको विश्व स्तर पर कम विलंबता देगा और निरंतरता पर कम से कम बलिदान देगा।

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


  1. रेडिस के साथ रीमिक्स TODO ऐप

    इस पोस्ट में, हम रीमिक्स और सर्वरलेस रेडिस (अपस्टैश) का उपयोग करके एक साधारण TODO ऐप लिखेंगे। रीमिक्स एक पूर्ण स्टैक वेब ढांचा है जो आपको उपयोगकर्ता इंटरफ़ेस पर ध्यान केंद्रित करने और तेज़, स्लीक और लचीला उपयोगकर्ता अनुभव प्रदान करने के लिए वेब मूलभूत सिद्धांतों के माध्यम से वापस काम करने देता है।

  1. क्लाउडफ्लेयर वर्कर्स और सर्वरलेस रेडिस के साथ अपनी वेब साइट के लिए अपना स्वयं का प्रतीक्षालय बनाएं

    इस ब्लॉग पोस्ट में, हम आपकी वेबसाइट के लिए एक प्रतीक्षालय पृष्ठ लागू करेंगे। क्यों? आपकी वेबसाइट पर विज़िटर्स की अधिक संख्या सामान्य तौर पर अच्छी बात है लेकिन हमेशा नहीं। अचानक उच्च ट्रैफ़िक आपके एप्लिकेशन को आसानी से अभिभूत कर सकता है जो आपकी सेवाओं को पूरी तरह से बाधित कर सकता है। प्रतीक्षालय एक

  1. एज कैशिंग के साथ 5 एमएस ग्लोबल रेडिस लेटेंसी

    जब डेटाबेस और क्लाइंट एक ही क्षेत्र में हों, तो Redis के साथ 1 ms लेटेंसी आसान होती है। लेकिन अगर आप चाहते हैं कि ग्राहकों को विश्व स्तर पर वितरित किया जाए तो विलंबता 100 एमएस से अधिक हो जाती है। हमने इसे दूर करने के लिए एज कैशिंग का निर्माण किया। एज कैशिंग एज कैशिंग के साथ, सीडीएन की तरह, आरईएसटी