কম্পিউটার টিউটোরিয়াল

Node.js এবং Redis ডিস্ট্রিবিউটেড ক্যাশিং সহ একটি উচ্চ-পারফরম্যান্স URL শর্টনার তৈরি করুন

Node.js এবং Redis ডিস্ট্রিবিউটেড ক্যাশিং সহ একটি উচ্চ-পারফরম্যান্স URL শর্টনার তৈরি করুন

এই টিউটোরিয়ালে, আমরা Node.js এবং Redis ব্যবহার করে একটি পরিমাপযোগ্য URL সংক্ষিপ্তকরণ পরিষেবা তৈরি করব। এই পরিষেবাটি উচ্চ ট্র্যাফিক দক্ষতার সাথে পরিচালনা করতে, লেটেন্সি কমাতে এবং নির্বিঘ্নে স্কেল করার জন্য বিতরণকৃত ক্যাশিংয়ের সুবিধা দেবে। সিস্টেমটি দ্রুত এবং নির্ভরযোগ্য থাকে তা নিশ্চিত করতে আমরা সামঞ্জস্যপূর্ণ হ্যাশিং, ক্যাশে অবৈধকরণ কৌশল এবং শার্ডিংয়ের মতো মূল ধারণাগুলি অন্বেষণ করব৷

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

আপনি যা শিখবেন

  • কিভাবে Node.js ব্যবহার করে একটি URL শর্টনার পরিষেবা তৈরি করবেন এবং Redis .

  • কিভাবে ডিস্ট্রিবিউটেড ক্যাশিং বাস্তবায়ন করবেন কর্মক্ষমতা অপ্টিমাইজ করতে।

  • সঙ্গত হ্যাশিং বোঝা এবং ক্যাশে অবৈধকরণ কৌশলগুলি .

  • ডকার ব্যবহার করা হচ্ছে শার্ডিং এবং স্কেলিং এর জন্য একাধিক রেডিস ইন্সট্যান্স অনুকরণ করতে।

পূর্বশর্ত

শুরু করার আগে, নিশ্চিত করুন যে আপনি নিম্নলিখিত ইনস্টল করেছেন:

  • Node.js (v14 বা উচ্চতর)

  • রেডিস

  • ডকার

  • JavaScript, Node.js, এবং Redis এর প্রাথমিক জ্ঞান।

সূচিপত্র

  • প্রকল্প ওভারভিউ

  • ধাপ 1:প্রকল্প সেট আপ করা

  • ধাপ 2:রেডিস ইনস্ট্যান্স সেট আপ করা

  • ধাপ 3:ইউআরএল শর্টনার পরিষেবা বাস্তবায়ন করা

  • ধাপ 4:ক্যাশে অবৈধকরণ কার্যকর করা

  • ধাপ 5:ক্যাশে মেট্রিক্স নিরীক্ষণ

  • ধাপ 6:অ্যাপ্লিকেশন পরীক্ষা করা হচ্ছে

  • উপসংহার:আপনি যা শিখেছেন

প্রকল্প ওভারভিউ

আমরা একটি URL সংক্ষিপ্তকারী পরিষেবা তৈরি করব যেখানে:

  1. ব্যবহারকারীরা লম্বা ইউআরএল ছোট করতে পারে এবং আসল ইউআরএল পুনরুদ্ধার করতে পারে।

  2. পরিষেবাটি রেডিস ক্যাশিং ব্যবহার করে৷ সংক্ষিপ্ত URL এবং মূল URL এর মধ্যে ম্যাপিং সংরক্ষণ করতে৷

  3. উচ্চ ট্র্যাফিক পরিচালনা করতে ক্যাশে একাধিক Redis উদাহরণ জুড়ে বিতরণ করা হয়৷

  4. সিস্টেমটি ক্যাশে হিট প্রদর্শন করবে এবং মিস রিয়েল-টাইমে।

সিস্টেম আর্কিটেকচার

পরিমাপযোগ্যতা এবং কর্মক্ষমতা নিশ্চিত করতে, আমরা আমাদের পরিষেবাকে নিম্নলিখিত উপাদানগুলিতে ভাগ করব:

  1. API সার্ভার :URL সংক্ষিপ্ত এবং পুনরুদ্ধারের জন্য অনুরোধগুলি পরিচালনা করে৷

  2. ক্যাশিং লেয়ার রিডিস করুন :বিতরণ করা ক্যাশিংয়ের জন্য একাধিক Redis দৃষ্টান্ত ব্যবহার করে৷

  3. ডকার :একাধিক Redis কন্টেইনার সহ একটি বিতরণ করা পরিবেশ অনুকরণ করে৷

ধাপ 1:প্রকল্প সেট আপ করা

আসুন একটি Node.js অ্যাপ্লিকেশন শুরু করে আমাদের প্রকল্প সেট আপ করি:

mkdir scalable-url-shortener
cd scalable-url-shortener
npm init -y

এখন, প্রয়োজনীয় নির্ভরতা ইনস্টল করুন:

npm install express redis shortid dotenv
  • express :একটি লাইটওয়েট ওয়েব সার্ভার ফ্রেমওয়ার্ক।

  • redis :ক্যাশে পরিচালনা করতে।

  • shortid :সংক্ষিপ্ত, অনন্য আইডি তৈরি করার জন্য।

  • dotenv :পরিবেশ ভেরিয়েবল পরিচালনার জন্য।

একটি .env তৈরি করুন আপনার প্রকল্পের রুটে ফাইল:

PORT=3000
REDIS_HOST_1=localhost
REDIS_PORT_1=6379
REDIS_HOST_2=localhost
REDIS_PORT_2=6380
REDIS_HOST_3=localhost
REDIS_PORT_3=6381

এই ভেরিয়েবলগুলি Redis হোস্ট এবং পোর্টগুলিকে সংজ্ঞায়িত করে যা আমরা ব্যবহার করব৷

ধাপ 2:রেডিস ইনস্ট্যান্স সেট আপ করা

আমরা একাধিক Redis উদাহরণ সহ একটি বিতরণ করা পরিবেশ অনুকরণ করতে ডকার ব্যবহার করব৷

তিনটি Redis কন্টেইনার শুরু করতে নিম্নলিখিত কমান্ডগুলি চালান:

docker run -p 6379:6379 --name redis1 -d redis
docker run -p 6380:6379 --name redis2 -d redis
docker run -p 6381:6379 --name redis3 -d redis

এটি বিভিন্ন পোর্টে চলমান তিনটি Redis দৃষ্টান্ত স্থাপন করবে। আমরা সামঞ্জস্যপূর্ণ হ্যাশিং বাস্তবায়ন করতে এই দৃষ্টান্তগুলি ব্যবহার করব৷ এবং শার্ডিং।

ধাপ 3:URL শর্টনার পরিষেবা বাস্তবায়ন করা

আসুন আমাদের প্রধান অ্যাপ্লিকেশন ফাইল, index.js তৈরি করি :

require('dotenv').config();
const express = require('express');
const redis = require('redis');
const shortid = require('shortid');
const app = express();
app.use(express.json());
const redisClients = [
 redis.createClient({ host: process.env.REDIS_HOST_1, port: process.env.REDIS_PORT_1 }),
 redis.createClient({ host: process.env.REDIS_HOST_2, port: process.env.REDIS_PORT_2 }),
 redis.createClient({ host: process.env.REDIS_HOST_3, port: process.env.REDIS_PORT_3 })
];
// Hash function to distribute keys among Redis clients
function getRedisClient(key) {
 const hash = key.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0);
 return redisClients[hash % redisClients.length];
}
// Endpoint to shorten a URL
app.post('/shorten', async (req, res) => {
 const { url } = req.body;
 if (!url) return res.status(400).send('URL is required');
 const shortId = shortid.generate();
 const redisClient = getRedisClient(shortId);
 await redisClient.set(shortId, url);
 res.json({ shortUrl: `http://localhost:${process.env.PORT}/${shortId}` });
});
// Endpoint to retrieve the original URL
app.get('/:shortId', async (req, res) => {
 const { shortId } = req.params;
 const redisClient = getRedisClient(shortId);
 redisClient.get(shortId, (err, url) => {
 if (err || !url) {
 return res.status(404).send('URL not found');
 }
 res.redirect(url);
 });
});
app.listen(process.env.PORT, () => {
 console.log(`Server running on port ${process.env.PORT}`);
});

আপনি এই কোডে দেখতে পাচ্ছেন, আমাদের আছে:

  1. সংগত হ্যাশিং :

    • আমরা একটি সাধারণ হ্যাশ ফাংশন ব্যবহার করে একাধিক Redis ক্লায়েন্ট জুড়ে কী (সংক্ষিপ্ত URL) বিতরণ করি।

    • হ্যাশ ফাংশন নিশ্চিত করে যে ইউআরএলগুলি Redis ইনস্ট্যান্স জুড়ে সমানভাবে বিতরণ করা হয়েছে।

  2. URL সংক্ষিপ্তকরণ৷ :

    • /সংক্ষিপ্ত করুন এন্ডপয়েন্ট একটি দীর্ঘ URL গ্রহণ করে এবং ছোট ব্যবহার করে একটি ছোট আইডি তৈরি করে লাইব্রেরি।

    • সংক্ষিপ্ত URL আমাদের হ্যাশ ফাংশন ব্যবহার করে Redis দৃষ্টান্তগুলির একটিতে সংরক্ষণ করা হয়৷

  3. ইউআরএল পুনঃনির্দেশ :

    • /:shortId এন্ডপয়েন্ট ক্যাশে থেকে আসল URL পুনরুদ্ধার করে এবং ব্যবহারকারীকে পুনঃনির্দেশ করে।

    • ইউআরএলটি ক্যাশে পাওয়া না গেলে, একটি 404 প্রতিক্রিয়া ফেরত দেওয়া হয়৷

পদক্ষেপ 4:ক্যাশে অবৈধকরণ কার্যকর করা

একটি বাস্তব-বিশ্বের অ্যাপ্লিকেশনে, URL এর মেয়াদ শেষ হতে পারে বা সময়ের সাথে পরিবর্তন হতে পারে। এটি পরিচালনা করতে, আমাদের ক্যাশে অবৈধকরণ বাস্তবায়ন করতে হবে .

ক্যাশ করা ইউআরএলে মেয়াদ শেষ হওয়ার যোগ করা হচ্ছে

আমাদের index.js পরিবর্তন করা যাক প্রতিটি ক্যাশেড এন্ট্রির জন্য একটি মেয়াদ শেষ হওয়ার সময় সেট করতে ফাইল:

// Endpoint to shorten a URL with expiration
app.post('/shorten', async (req, res) => {
 const { url, ttl } = req.body; // ttl (time-to-live) is optional
 if (!url) return res.status(400).send('URL is required');
 const shortId = shortid.generate();
 const redisClient = getRedisClient(shortId);
 await redisClient.set(shortId, url, 'EX', ttl || 3600); // Default TTL of 1 hour
 res.json({ shortUrl: `http://localhost:${process.env.PORT}/${shortId}` });
});
  • TTL (টাইম-টু-লাইভ) :আমরা 1 ঘন্টা একটি ডিফল্ট মেয়াদ শেষ হওয়ার সময় সেট করি প্রতিটি সংক্ষিপ্ত URL এর জন্য। প্রয়োজনে আপনি প্রতিটি URL এর জন্য TTL কাস্টমাইজ করতে পারেন।

  • ক্যাশে অবৈধকরণ৷ :TTL মেয়াদ শেষ হয়ে গেলে, এন্ট্রি স্বয়ংক্রিয়ভাবে ক্যাশে থেকে সরানো হয়।

ধাপ 5:ক্যাশে মেট্রিক্স নিরীক্ষণ

ক্যাশে হিট নিরীক্ষণ করতে এবং মিস , আমরা index.js-এ আমাদের শেষ পয়েন্টগুলিতে কিছু লগিং যোগ করব :

app.get('/:shortId', async (req, res) => {
 const { shortId } = req.params;
 const redisClient = getRedisClient(shortId);
 redisClient.get(shortId, (err, url) => {
 if (err || !url) {
 console.log(`Cache miss for key: ${shortId}`);
 return res.status(404).send('URL not found');
 }
 console.log(`Cache hit for key: ${shortId}`);
 res.redirect(url);
 });
});

এই কোডে যা হচ্ছে তা এখানে:

  • ক্যাশে হিটস৷ :ক্যাশে একটি URL পাওয়া গেলে, এটি একটি ক্যাশে হিট৷

  • ক্যাশে মিস৷ :যদি একটি URL খুঁজে না পাওয়া যায়, এটি একটি ক্যাশে মিস।

  • এই লগিং আপনাকে আপনার বিতরণ করা ক্যাশের কর্মক্ষমতা নিরীক্ষণ করতে সাহায্য করবে৷

ধাপ 6:অ্যাপ্লিকেশন পরীক্ষা করা

  1. আপনার Redis ইনস্ট্যান্স শুরু করুন :
docker start redis1 redis2 redis3
  1. Node.js সার্ভার চালান :
node index.js
  1. এন্ডপয়েন্ট পরীক্ষা করুন curl ব্যবহার করে অথবা পোস্টম্যান:

    • একটি URL ছোট করুন:

       POST http://localhost:3000/shorten
       Body: { "url": "https://example.com" }
      
    • সংক্ষিপ্ত URL অ্যাক্সেস করুন:

       GET http://localhost:3000/{shortId}
      

উপসংহার:আপনি যা শিখেছেন

অভিনন্দন! আপনি সফলভাবে একটি মাপযোগ্য URL শর্টনার পরিষেবা তৈরি করেছেন৷ ডিস্ট্রিবিউটেড ক্যাশিং সহ Node.js এবং Redis ব্যবহার করে। এই টিউটোরিয়াল জুড়ে, আপনি শিখেছেন কিভাবে:

  1. সামঞ্জস্যপূর্ণ হ্যাশিং প্রয়োগ করুন একাধিক Redis দৃষ্টান্ত জুড়ে ক্যাশে এন্ট্রি বিতরণ করতে।

  2. ক্যাশে অবৈধকরণ কৌশলগুলি দিয়ে আপনার অ্যাপ্লিকেশনটিকে অপ্টিমাইজ করুন৷ ডেটা আপ-টু-ডেট রাখতে।

  3. ডকার ব্যবহার করুন একাধিক Redis নোড সহ একটি বিতরণ করা পরিবেশ অনুকরণ করতে।

  4. ক্যাশে হিট এবং মিস মনিটর করুন কর্মক্ষমতা অপ্টিমাইজ করতে।

পরবর্তী ধাপ:

  • একটি ডাটাবেস যোগ করুন :ক্যাশের বাইরে স্থির থাকার জন্য একটি ডাটাবেসে URL সংরক্ষণ করুন৷

  • বিশ্লেষণ প্রয়োগ করুন৷ :সংক্ষিপ্ত URL গুলির জন্য ক্লিকের সংখ্যা এবং বিশ্লেষণগুলি ট্র্যাক করুন৷

  • ক্লাউডে স্থাপন করুন :স্বয়ংক্রিয়-স্কেলিং এবং স্থিতিস্থাপকতার জন্য Kubernetes ব্যবহার করে আপনার অ্যাপ্লিকেশন স্থাপন করুন।

শুভ কোডিং!

বিনামূল্যে কোড শিখুন. freeCodeCamp-এর ওপেন সোর্স পাঠ্যক্রম 40,000-এরও বেশি লোককে ডেভেলপার হিসেবে চাকরি পেতে সাহায্য করেছে। শুরু করুন


  1. কিভাবে জাভাস্ক্রিপ্ট দিয়ে একটি সতর্কতা বক্স তৈরি করবেন

  2. পাইথন প্লটলি ব্যবহার করে ভৌগলিক প্লটিং

  3. HTML DOM ইনপুট রঙ নিষ্ক্রিয় বৈশিষ্ট্য

  4. Matplotlib এবং NumPy সহ একটি চিত্রের উপর বৃত্ত আঁকা