আপনার সিস্টেমের উপলব্ধতা বজায় রাখা যেকোনো প্রোডাক্টের জন্য সবচেয়ে Криটিক্যাল কাজের একটি। দুর্ভাগ্যক্রমে, লোকেরা আপনার রিসোর্সগুলো ওভারওয়েল্ম করে এটিকে অপব্যবহার করতে পারে, অথবা আপনি ব্যবহার সীমাবদ্ধ করে চার্জ করতে চান। রেট লিমিটিং এই অনেক সমস্যার একটি стандарт সমাধান এবং এটি বক্সের বাইরে কাজ করা উচিত। অবশ্যই, আপনি ইতিমধ্যে আপনার সিস্টেম তৈরি করেছেন এবং সার্ভারলেস ফাংশনগুলির মতো একটি স্টেটলেস পরিবেশে ভালোভাবে কাজ করার জন্য একটি রেট-লিমিটিং সিস্টেম ডিজাইন করার জন্য আরও সময় ব্যয় করতে চান না।
@upstash/ratelimit ঘোষণা
GitHub-এ, npm-এ বা Deno-তে উপলব্ধ।
আজ আমরা @upstash/ratelimit রিলিজ করছি, সার্ভারলেস পরিবেশের জন্য একটি রেট-লিমিটিং সমাধান, যেমন Vercel, Cloudflare, Deno, Fastly এবং Netlify। এটি Upstash Serverless Redis-এর ওপর তৈরি এবং এক বা একাধিক ডাটাবেস ব্যবহার করে বিশ্বব্যাপী আপনার ব্যবহারকারীদের জন্য কম লেটেন্সি অভিজ্ঞতা প্রদান করে!
শুরু করুন
@upstash/ratelimit তিনটি ভিন্ন স্ট্যান্ডার্ডাইজড অ্যালগরিদম বাস্তবায়ন করে, এবং আপনি প্রজেক্টের README-তে তাদের সম্পর্কে আরও পড়তে পারেন।
আমরা দুটি মেথড প্রদান করি:
limit(identifier: string): Promise<RatelimitResponse>
limit true বা false এবং অবশিষ্ট রিকোয়েস্ট সম্পর্কে কিছু মেটাডেটা রিটার্ন করে এবং এটি ব্যবহার করা যেতে পারে যদি আপনি আপনার সেট লিমিটের বাইরে সকল রিকোয়েস্ট রিজেক্ট করতে চান।
blockUntilReady(identifier: string, timeout: number): Promise<RatelimitResponse>
যদি আপনি একটি রিকোয়েস্ট তত্ক्षণ রিজেক্ট না করে এটি প্রসেস করা যাওয়ার জন্য অপেক্ষা করতে চান। মনে রাখবেন কিছু প্ল্যাটফর্ম আপনার ফাংশনের এক্সিকিউশন টাইমের জন্য চার্জ করে।
একক রিজনাল ডাটাবেস
একক ডাটাবেসের সাথে রেট লিমিটিং সহজ। আপনি Upstash-এ একটি ডাটাবেস তৈরি করুন এবং ব্যবহার শুরু করুন:
import { Ratelimit } from "@upstash/ratelimit"; import { Redis } from "@upstash/redis"; // ১০ সেকেন্ডে ১০ রিকোয়েস্ট অনুমতি দিতে একটি নতুন রেটলিমিটার তৈরি করুন const ratelimit = new Ratelimit({ redis: Redis.fromEnv(), limiter: Ratelimit.slidingWindow(10, "10 s"), }); // সব রিকোয়েস্টকে একক রেটলিমিট দিয়ে সীমাবদ্ধ করতে একটি কনস্ট্যান্ট স্ট্রিং ব্যবহার করুন // অথবা ব্যক্তিগত লিমিটের জন্য userID, apiKey বা ip address ব্যবহার করুন const identifier = "api"; const { success } = await ratelimit.limit(identifier); if (!success) { return "Unable to process at this time"; } doExpensiveCalculation(); return "Here you go!";
গ্লোবাল রেপ্লিকেটেড রেট-লিমিটিং
ধরুন আপনার US এবং ইউরোপে কাস্টমার আছে। এই ক্ষেত্রে, আপনি Upstash-এ দুটি রিজনাল Redis ডাটাবেস তৈরি করতে পারেন এবং আপনার ব্যবহারকারীরা তাদের কাছে সবচেয়ে কাছের ডিবি-এর লেটেন্সি উপভোগ করবে।
import { GlobalRatelimit } from "@upstash/ratelimit"; // deno-এর জন্য: উপরে দেখুন import { Redis } from "@upstash/redis"; // ১০ সেকেন্ডে ১০ রিকোয়েস্ট অনুমতি দিতে একটি নতুন রেটলিমিটার তৈরি করুন const ratelimit = new GlobalRatelimit({ redis: [ new Redis({ /* europe */ }), new Redis({ /* north america */ }), ], limiter: Ratelimit.slidingWindow(10, "10 s"), });
শেষ কথা
যদি আপনার কোনো প্রশ্ন থাকে, দয়া করে GitHub বা নিচের চ্যানেলগুলিতে আমাদের সাথে যোগাযোগ করুন।