การรักษาความพร้อมใช้งานของระบบเป็นหนึ่งในงานที่สำคัญที่สุดสำหรับผลิตภัณฑ์ใดๆ ขออภัย ผู้คนอาจใช้ทรัพยากรของคุณในทางที่ผิด หรือคุณต้องการจำกัดการใช้งานและเรียกเก็บเงิน การจำกัดอัตราเป็นวิธีแก้ปัญหามาตรฐานสำหรับปัญหาเหล่านี้จำนวนมาก และควรทำงานนอกกรอบ ท้ายที่สุด คุณได้สร้างระบบของคุณแล้ว และไม่ต้องการใช้เวลามากขึ้นในการออกแบบระบบจำกัดอัตราซึ่งทำงานได้ดีในสภาพแวดล้อมที่ไม่มีสถานะ เช่น ฟังก์ชันไร้เซิร์ฟเวอร์
กำลังประกาศ @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";
// Create a new ratelimiter, that allows 10 requests per 10 seconds
const ratelimit = new Ratelimit({
redis: Redis.fromEnv(),
limiter: Ratelimit.slidingWindow(10, "10 s"),
});
// Use a constant string to limit all requests with a single ratelimit
// Or use a userID, apiKey or ip address for individual limits.
const identifier = "api";
const { success } = await ratelimit.limit(identifier);
if (!success) {
return "Unable to process at this time";
}
doExpensiveCalculation();
return "Here you go!";
การจำกัดอัตราการจำลองแบบทั่วโลก
สมมติว่าคุณมีลูกค้าในสหรัฐอเมริกาและยุโรป ในกรณีนี้ คุณสามารถสร้างฐานข้อมูล Redis ระดับภูมิภาคสองฐานข้อมูลบน Upstash และผู้ใช้ของคุณจะเพลิดเพลินกับเวลาแฝงของฐานข้อมูลที่ใกล้เคียงที่สุด
import { GlobalRatelimit } from "@upstash/ratelimit"; // for deno: see above
import { Redis } from "@upstash/redis";
// Create a new ratelimiter, that allows 10 requests per 10 seconds
const ratelimit = new GlobalRatelimit({
redis: [
new Redis({
/* europe */
}),
new Redis({
/* north america */
}),
],
limiter: Ratelimit.slidingWindow(10, "10 s"),
});
ปิดคำ
หากคุณมีคำถามใดๆ โปรดติดต่อเราทาง GitHub หรือช่องทางด้านล่าง
ติดตามเราบน Discordand Twitter