এই আর্টিকেলে, আমরা দেখাব কিভাবে Upstash Rate Limit SDK ব্যবহার করে আপনার Next.js API রাউটগুলিতে রেট লিমিটিং প্রয়োগ করবেন।
ডাটাবেস সেটআপ
Upstash Console বা Upstash CLI ব্যবহার করে একটি Redis ডাটাবেস তৈরি করুন। পরবর্তী ধাপের জন্য UPSTASH_REDIS_REST_URL এবং UPSTASH_REDIS_REST_TOKEN কপি করুন।
প্রজেক্ট সেটআপ
আমরা একটি Next.js অ্যাপ্লিকেশন তৈরি করব এবং Vercel-এ ডিপ্লয় করব।
npx create-next-app@latest
@upstash/ratelimit ইনস্টল করুন:
npm install @upstash/ratelimit @upstash/redis
কোড
নিচের মতো আপনার pages/api/hello.js আপডেট করুন এবং UPSTASH_REDIS_REST_URL ও UPSTASH_REDIS_REST_TOKEN রিপ্লেস করুন।
import {Ratelimit} from "@upstash/ratelimit"; import {Redis} from "@upstash/redis"; const redis = new Redis({ url: 'UPSTASH_REDIS_REST_URL', token: 'UPSTASH_REDIS_REST_TOKEN', }) // ৫ সেকেন্ডে ৫ রিকোয়েস্ট অনুমতি দিতে একটি নতুন রেটলিমিটার তৈরি করুন const ratelimit = new Ratelimit({ redis: redis, limiter: Ratelimit.fixedWindow(5, "5 s"), }); export default async function handler(req, res) { // সব রিকোয়েস্টকে একক রেটলিমিট দিয়ে সীমাবদ্ধ করতে একটি কনস্ট্যান্ট স্ট্রিং ব্যবহার করুন // অথবা ব্যক্তিগত লিমিটের জন্য userID, apiKey বা ip address ব্যবহার করুন const identifier = "api"; const result = await ratelimit.limit(identifier); res.setHeader('X-RateLimit-Limit', result.limit) res.setHeader('X-RateLimit-Remaining', result.remaining) if (!result.success) { res.status(200).json({message: 'The request has been rate limited.', rateLimitState: result}) return } res.status(200).json({name: 'John Doe', rateLimitState: result}) }
এখানে, আমরা ৫ সেকেন্ডে ৫ রিকোয়েস্ট অনুমতি দিচ্ছি।
রান করুন
npm run dev দিয়ে অ্যাপটি চালান। ব্রাউজারটি ৫ বারથી বেশি রিফ্রেশ করুন এবং আপনি রেট লিমিটিং একশনে দেখতে পাবেন।
{"message":"The request has been rate limited.","rateLimitState":{"success":false,"limit":5,"remaining":-1,"reset":1654546770000,"pending":{}}}
সম্ভাব্য উন্নতি
- প্রতি ব্যবহারকারী ব্যবহার সীমাবদ্ধ করতে আপনার ব্যবহারকারীর আইডি বা IP ঠিকানা আইডেন্টিফায়ার হিসেবে ব্যবহার করুন।
const identifier = getClientIp(req); const result = await ratelimit.limit(identifier);
- স্মूदার (কিন্তু ব্যয়বহুল) রেট লিমিটিং অভিজ্ঞতার জন্য স্লাইডিং উইন্ডো অ্যালগরিদম ব্যবহার করুন।
const ratelimit = new Ratelimit({ redis: redis, limiter: Ratelimit.slidingWindow(10, "10 s"), });
- কিছু পরিমাণ স্পাইক সহন করতে টোকেন বাকেট অ্যালগরিদম ব্যবহার করুন।
const ratelimit = new Ratelimit({ redis: redis, limiter: Ratelimit.tokenBucket(5, "10 s", 10), });
- যদি আপনার Next.js অ্যাপ্লিকেশন বিভিন্ন অঞ্চলে ডিপ্লয় করা হয় তবে বিভিন্ন অঞ্চলে একাধিক Redis ব্যবহার করুন। এটি বিভিন্ন অবস্থানের জন্য লেটেন্সি কমাতে সাহায্য করবে।
- Upstash Redis ক্রেডেনশিয়ালগুলি এনভায়রনমেন্ট ভেরিয়েবল বা সিক্রেট স্টোর থেকে রাখুন এবং পড়ুন।