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

Cloudflare Workers के साथ एज पर Redis की शक्ति का उपयोग करें

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

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

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

Cloudflare Workers KV के साथ तुलना

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

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

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

एज पर एनालिटिक्स

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

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

सेटअप

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

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

Cloudflare Workers कोड

Cloudflare Workers फ़ंक्शन request को पैरामीटर के रूप में स्वीकार करता है। Upstash के REST API का उपयोग करके, मैं अनुरोध को एक Redis लिस्ट में रिकॉर्ड करता हूं। मैं वर्तमान तारीख को Redis लिस्ट के लिए कुंजी के रूप में उपयोग करता हूं। इसलिए हम अलग-अलग लिस्ट में प्रति दिन अनुरोध रिकॉर्ड करते हैं।

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

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 })
    )
  );
});

एनालिटिक्स टूल कोड

अब आइए एक सरल कमांड लाइन एप्लिकेशन लिखें जो तारीख को एक तर्क के रूप में लेगा और हमें एनालिटिक्स डेटा लौटाएगा। एक फोल्डर बनाएं और npm init चलाएं। फिर npm install ioredis के साथ Redis क्लाइंट इंस्टॉल करें। .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 के साथ चला सकते हैं। बाद वाला आज के लिए क्वेरी करेगा।

Cloudflare Workers के साथ एज पर Redis की शक्ति का उपयोग करें

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

Upstash एज रोडमैप

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

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

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

  1. Remix और Serverless Redis के साथ स्केलेबल TODO ऐप बनाएं Remix और Serverless Redis के साथ स्केलेबल TODO ऐप बनाएं

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

  1. क्लाउडफ्लेयर वर्कर्स और सर्वरलेस रेडिस के साथ कस्टम वेटिंग रूम बनाएं - ट्रैफिक सर्ज को नियंत्रित करें क्लाउडफ्लेयर वर्कर्स और सर्वरलेस रेडिस के साथ कस्टम वेटिंग रूम बनाएं - ट्रैफिक सर्ज को नियंत्रित करें

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

  1. एज कैशिंग के साथ Redis में 5ms वैश्विक लेटेंसी प्राप्त करें एज कैशिंग के साथ Redis में 5ms वैश्विक लेटेंसी प्राप्त करें

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