Dữ liệu lõiAPI

Giới hạn tốc độ

Giới hạn tốc độ nguyên tử phía máy chủ. GCRA chỉ trong một lệnh, hoặc các bộ giới hạn có tên với cửa sổ trượt, token bucket hoặc leaky bucket. Không cần Lua.

lệnh nguyên tử cho mỗi yêu cầu
1
thuật toán
4
script Lua
0
Bước 1 trên 5
Được phép

10 yêu cầu mỗi phút cho người dùng 42. Phản hồi cho biết được phép, giới hạn và còn lại bao nhiêu.

Phiên ví dụplaying
# Được phép
hotkv> GCRA.LIMIT ratelimit:user:42 60000 10
1) (integer) 0
2) (integer) 10
3) (integer) 9
4) (integer) -1
5) (integer) 6000

Một hướng dẫn minh họa động với các lệnh HotKV thật và phản hồi ví dụ. Nhấn vào bất kỳ bước nào để nhảy tới đó. Lệnh và phản hồi giữ nguyên bằng tiếng Anh, đúng như bạn gõ và thấy trong HotKV.

Vấn đề

Một API không có giới hạn chỉ cách sự cố ngừng hoạt động một client hành xử sai. Thực hiện kiểm tra trong mã ứng dụng nghĩa là một lần đọc, một phép tính và một lần ghi, và các yêu cầu đồng thời lọt qua khe hở giữa chúng. Nhiều nhóm cuối cùng phải duy trì một script Lua chỉ để làm cho nó nguyên tử.

HotKV xử lý như thế nào

GCRA.LIMIT quyết định và ghi lại trong một bước, nên các client đồng thời không thể cùng qua trên cùng một trạng thái, và giới hạn được nạp lại một cách mượt mà thay vì đặt lại tại ranh giới cửa sổ. Với các giới hạn bạn quản lý theo tên, RATELIMIT.CREATE thiết lập một bộ giới hạn cửa sổ trượt, token bucket hoặc leaky bucket với thống kê về những gì nó đã cho phép và từ chối.

Từng bước một

Điều gì xảy ra, từng lệnh một

  1. 01

    Được phép

    10 yêu cầu mỗi phút cho người dùng 42. Phản hồi cho biết được phép, giới hạn và còn lại bao nhiêu.

    GCRA.LIMIT ratelimit:user:42 60000 10
  2. 02

    Một đợt dồn dập từ bot

    Bot cào dữ liệu dùng hết hạn mức đột biến của nó và sau đó được cho biết phải chờ bao lâu. Một yêu cầu bị từ chối không làm thay đổi gì.

    GCRA.LIMIT ratelimit:bot:7 60000 10
  3. 03

    Bộ giới hạn có tên cho một gói

    Khách hàng gói miễn phí nhận 100 yêu cầu mỗi phút trên một cửa sổ trượt.

    RATELIMIT.CREATE free_plan 100 60000 ALGO sliding_window
  4. 04

    Yêu cầu có trọng số

    Một endpoint xuất dữ liệu tốn 20 đơn vị, nên nó dùng nhiều hạn mức hơn.

    RATELIMIT.CHECK free_plan customer:881 COST 20
  5. 05

    Xem bộ giới hạn đã làm gì

    Thiết lập, các khóa đang theo dõi và tổng số yêu cầu được phép và bị từ chối.

    RATELIMIT.STATS free_plan
Phù hợp ở đâu

Các tình huống thực tế

API công khai

Mỗi API key nhận một giới hạn theo gói, với đột biến cho các client cư xử tốt và một Retry-After chính xác cho phần còn lại.

Biểu mẫu đăng nhập và đăng ký

Số lần thử theo IP và theo tài khoản bị giới hạn để làm chậm việc nhồi thông tin đăng nhập.

Các lệnh gọi đi ra ngoài

Các lệnh gọi tới API đối tác hoặc nhà cung cấp LLM được giữ dưới hạn mức của chúng trên mọi worker trong cả đội máy.

Tích hợp sẵn

Bạn nhận được gì

GCRA trong một lệnh

Nạp lại mượt mà có đột biến, kiểm tra và cập nhật nguyên tử, thời gian thử lại khi bị từ chối.

GCRA.LIMITGCRA.RESET

Bộ giới hạn có tên

Cửa sổ trượt, token bucket hoặc leaky bucket, tạo một lần và kiểm tra theo từng khóa.

RATELIMIT.CREATERATELIMIT.CHECK

Yêu cầu có trọng số

Các lệnh gọi tốn kém có thể tính là nhiều yêu cầu. GCRA.LIMIT nhận một số đếm, RATELIMIT.CHECK nhận một COST.

COST

Thống kê

Tổng số được phép và bị từ chối theo từng bộ giới hạn.

RATELIMIT.STATS

Câu hỏi thường gặp

Tôi có cần script Lua để giới hạn tốc độ không?

Không. Cả GCRA.LIMIT và RATELIMIT.CHECK đều thực hiện toàn bộ kiểm tra như một lệnh nguyên tử.

Tôi nên dùng cái nào?

GCRA.LIMIT không cần thiết lập và hoạt động trên mọi gói. Các bộ giới hạn có tên RATELIMIT.* bổ sung lựa chọn thuật toán và thống kê, và là một phần của các gói Performance và Scale.

Một yêu cầu bị từ chối tốn bao nhiêu?

Không gì cả. Một lệnh gọi GCRA bị từ chối để nguyên bộ giới hạn, nên một client thử lại không bị phạt thêm.

Trường hợp sử dụng liên quan

Thử trên khối lượng công việc của chính bạn

HotKV nói giao thức Redis, nên bạn có thể trỏ một client hiện có tới nó và chạy chính những lệnh này.