কম্পিউটার

ক্লাউডফ্লেয়ার কর্মীদের সাথে রেডিস @ এজ

এজ এ কম্পিউটিং সাম্প্রতিক বছরগুলিতে সবচেয়ে উত্তেজনাপূর্ণ ক্ষমতাগুলির মধ্যে একটি। CDN আপনাকে আপনার ফাইলগুলিকে আপনার ব্যবহারকারীদের কাছাকাছি রাখতে দেয়। এজ কম্পিউটিং আপনাকে আপনার ব্যবহারকারীদের কাছাকাছি আপনার অ্যাপ্লিকেশনগুলি চালানোর অনুমতি দেয়। এটি বিকাশকারীদের বিশ্বব্যাপী বিতরণ করা, পারফরম্যান্ট অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে।

ক্লাউডফ্লেয়ার ওয়ার্কাররা এই মুহূর্তে এই স্থানের শীর্ষস্থানীয় পণ্য। এটি আপনাকে ঠান্ডা শুরু ছাড়া একটি সার্ভারহীন প্রক্রিয়াকরণ পরিবেশ দেয়। আপনার অ্যাপ্লিকেশনের বিলম্ব কমাতে আপনি Cloudflare এর গ্লোবাল নেটওয়ার্কের সুবিধা নিন। আপনি Javascript, Rust, C এবং C++ এ আপনার ফাংশন লিখতে পারেন।

সার্ভারহীন ফাংশন (AWS Lambda ইত্যাদি) অনুরূপ, ক্লাউডফ্লেয়ার কর্মীরা রাষ্ট্রহীন। আপনি ক্লাউডফ্লেয়ারের সমীক্ষায় দেখতে পাচ্ছেন, বিকাশকারীরা এজ ফাংশন থেকে তাদের ডাটাবেসগুলিকে সংযুক্ত করার উপায় জিজ্ঞাসা করছে। দুর্ভাগ্যবশত, বেশিরভাগ ডাটাবেস সার্ভারহীন পরিবেশের জন্য ডিজাইন করা হয়নি, তাদের অবিরাম সংযোগ প্রয়োজন। আমরা সহজে এবং দ্রুততম উপায়ে Upstash অ্যাক্সেস করতে সার্ভারহীন প্রান্ত ফাংশন সক্ষম করতে Redis-এর উপর REST API তৈরি করেছি৷

ক্লাউডফ্লেয়ার ওয়ার্কার্স কেভির সাথে তুলনা করা

ক্লাউডফ্লেয়ারের একটি মৌলিক কী ভ্যালু স্টোর রয়েছে যা আপনি আপনার এজ ফাংশনগুলির অবস্থা সংরক্ষণ করতে ব্যবহার করতে পারেন। Upstash Redis ক্লাউডফ্লেয়ার KV-এর বিরুদ্ধে বিভিন্ন দিক দিয়ে পারদর্শী:

  • ক্লাউডফ্লেয়ার কেভি শুধুমাত্র মৌলিক গেট/সেট/ডিলিট কার্যকারিতা প্রদান করে। Upstash আপনাকে সমস্ত Redis ডেটা স্ট্রাকচার দেয় যেখানে আপনি অনেক বেশি পরিশীলিত কার্যকারিতা তৈরি করতে পারেন (হ্যাশ, তালিকা, সাজানো সেট, রেঞ্জ, অ্যাপেন্ড, ইনক্রিমেন্ট ইত্যাদি)।
  • ক্লাউডফ্লেয়ার কেভিকে ক্লাউডফ্লেয়ার ইকোসিস্টেম থেকে অ্যাক্সেসযোগ্য করার জন্য ডিজাইন করা হয়েছে যখন আপনি যে কোনও জায়গা থেকে Upstash Redis অ্যাক্সেস করতে এবং ব্যবহার করতে পারেন কারণ এটি Redis এবং REST API উভয়কেই সমর্থন করে৷ আপনি এজ থেকে রেডিসে আপনার ডেটা অফলোড করতে পারেন তারপর যেকোন রেডিস ক্লায়েন্ট দ্বারা প্রক্রিয়া করুন৷
  • ক্লাউডফ্লেয়ার কেভি ভারী অ্যাপ্লিকেশন পড়ার জন্য অপ্টিমাইজ করা হয়েছে। লেখাগুলি অন্য জায়গায় প্রতিলিপি হতে 60 সেকেন্ড সময় নিতে পারে। Upstash-এর জন্য লেখার বিলম্বগুলি মিলিসেকেন্ডে৷

এখন ক্লাউডফ্লেয়ার + রেডিস সংমিশ্রণের শক্তি প্রদর্শনের জন্য একটি সহজ উদাহরণ লিখি৷

এজ এনালিটিক্স

ওয়েব বিশ্লেষণ সব ওয়েবসাইটের মালিকদের জন্য একটি খুব সাধারণ প্রয়োজন. গুগল অ্যানালিটিক্স শক্তিশালী কিন্তু অনেক ডেভেলপার তাদের ট্রাফিক ডেটা Google-এর সাথে শেয়ার করতে এবং ব্যবহারকারীদের ব্রাউজারে কুকিজ ইনজেকশন করতে পছন্দ করেন না। যেহেতু আপনার ওয়েবসাইটের ট্রাফিক CDN এর মাধ্যমে আসে, আপনি সহজেই এজ লেয়ারে আপনার ট্র্যাফিক ট্র্যাক করতে পারেন। এখানে আমরা ক্লাউডফ্লেয়ার ওয়ার্কারদের কাছ থেকে ব্যবহারকারীর ট্র্যাফিক ট্র্যাক করার জন্য একটি খুব সাধারণ উদাহরণ প্রয়োগ করব। আমরা ক্লাউডফ্লেয়ার ওয়ার্কারদের মধ্যে ট্র্যাফিককে বাধা দেব এবং ব্যবহারকারীর অনুরোধগুলি Upstash Redis-এ সংরক্ষণ করব। তারপরে আমরা একটি মৌলিক স্বতন্ত্র অ্যাপ্লিকেশন লিখব যা অনুরোধগুলি বিশ্লেষণ করবে এবং একটি নির্বাচিত দিনে আমাকে নিম্নলিখিত তথ্য দেবে:

  • পৃষ্ঠা দেখা
  • অনন্য দর্শক
  • সবচেয়ে বেশি দর্শকের শীর্ষ দেশগুলি
  • সবচেয়ে বেশি পরিদর্শন করা পৃষ্ঠাগুলি

সেটআপ

আপনার যদি না থাকে তবে এই নির্দেশিকা অনুসরণ করে একটি ডাটাবেস তৈরি করুন। ডাটাবেস পৃষ্ঠায়, REST API বোতামে ক্লিক করুন এবং REST URL অনুলিপি করুন। আপনার যদি একটি ক্লাউডফ্লেয়ার অ্যাকাউন্ট থাকে, আপনি একটি ওয়ার্কার্স ফাংশন তৈরি করতে পারেন বা আপনি অ্যাকাউন্ট ছাড়াই খেলার মাঠটি ব্যবহার করতে পারেন৷

:::note গ্লোবাল ডাটাবেস নির্বাচন করুন Upstash ডাটাবেস তৈরি করার সময়। গ্লোবাল ডাটাবেস প্রান্ত ফাংশন থেকে লেটেন্সি কমাতে একাধিক অঞ্চলে ডেটা প্রতিলিপি করে।:::

ক্লাউডফ্লেয়ার ওয়ার্কার্স কোড

ক্লাউডফ্লেয়ার ওয়ার্কার্স ফাংশন request গ্রহণ করে একটি পরামিতি হিসাবে। Upstash এর REST API ব্যবহার করে, আমি একটি রেডিস তালিকায় অনুরোধটি রেকর্ড করি। আমি Redis তালিকার কী হিসাবে বর্তমান তারিখ ব্যবহার করি। তাই আমরা প্রতিদিনের অনুরোধগুলিকে আলাদা তালিকায় রেকর্ড করি৷

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

বিশ্লেষণ টুল কোড

এখন আসুন একটি সাধারণ কমান্ড লাইন অ্যাপ্লিকেশন লিখি যা তারিখটিকে একটি যুক্তি হিসাবে গ্রহণ করবে এবং আমাদের বিশ্লেষণ ডেটা ফেরত দেবে। একটি ফোল্ডার তৈরি করুন এবং 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 . পরেরটি আজকের জন্য জিজ্ঞাসা করবে৷

ক্লাউডফ্লেয়ার কর্মীদের সাথে রেডিস @ এজ

আপনি একটি সূচনা পয়েন্ট হিসাবে এই উদাহরণ মনে করতে পারেন. আপনি আপনার বিশ্লেষণের চাহিদা অনুযায়ী চার্ট এবং টেবিল সহ একটি সমৃদ্ধ ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন। আপনি আরও শক্তিশালী বিশ্লেষণের জন্য অন্যান্য Redis ডেটা স্ট্রাকচার ব্যবহার করতে পারেন।

Upstash এজ রোডম্যাপ

REST API হল আমাদের এজ গল্পের প্রথম ধাপ। আমরা এই বছর দুটি গুরুত্বপূর্ণ উন্নয়নের পরিকল্পনা করছি৷

  • এজ ক্যাশিং:(আপডেট:এটি প্রকাশিত হয়েছে, আরও জানুন) এই মুহূর্তে, আপনার সমস্ত REST অনুরোধগুলি আপনার ডাটাবেস অঞ্চলে আসে৷ আমরা শীঘ্রই এজ ক্যাশিং সমর্থন করব, তাই আপনার REST অনুরোধগুলি বিশ্বব্যাপী সমস্ত প্রান্তের অবস্থানগুলিতে ক্যাশে করা হবে৷ এটি আপস্ট্যাশ রেডিসকে ক্লাউডফ্লেয়ার কেভির মতো সারা বিশ্বে কম লেটেন্সি প্রদান করতে সক্ষম করবে৷
  • গ্লোবাল রেপ্লিকেটেড ডেটাবেস:(আপডেট:এটি প্রকাশিত হয়েছে, আরও জানুন) গ্লোবাল (মাল্টি অঞ্চল) রেপ্লিকেশন আপনার ডেটা একাধিক অঞ্চলে প্রতিলিপি করবে। তাই সমস্ত অনুরোধ (Redis এবং REST API উভয়ই) নিকটতম অবস্থানে যাবে। এটি আপনাকে সামঞ্জস্যের উপর সর্বনিম্ন ত্যাগ সহ বিশ্বব্যাপী কম লেটেন্সি দেবে।

আমি আমাদের এজ রোডম্যাপে নিবেদিত একটি ব্লগ পোস্ট লেখার পরিকল্পনা করছি। সাথে থাকুন এবং টুইটারে আমাদের অনুসরণ করুন।


  1. Redis সহ SvelteKit TODO অ্যাপ

  2. রেডিসের সাথে TODO অ্যাপ রিমিক্স করুন

  3. ক্লাউডফ্লেয়ার ওয়ার্কার এবং সার্ভারলেস রেডিস দিয়ে আপনার ওয়েব সাইটের জন্য আপনার নিজস্ব ওয়েটিং রুম তৈরি করুন

  4. এজ ক্যাশিং সহ 5 ms গ্লোবাল রেডিস লেটেন্সি