Nếu bot của bạn gặp lỗi giới hạn tỷ lệ, đừng lo lắng—đây là một thách thức phổ biến có thể giải quyết được bằng cách tiếp cận phù hợp. Bài viết này sẽ giúp bạn hiểu hệ thống giới hạn tỷ lệ của Discord và cung cấp các giải pháp thực tế.
Nội Dung
Hiểu Về Các Loại Giới Hạn Tỷ Lệ của Discord
Giới Hạn Tỷ Lệ Theo Đường Truyền
Giới Hạn Tỷ Lệ Cụ Thể Theo Tài Nguyên
Cách Xác Định Vấn Đề Giới Hạn Tỷ Lệ Của Bạn
Thực Hành Tốt Nhất Để Xử Lý Giới Hạn Tỷ Lệ
Những Cân Nhắc Về Gateway và Phân Vùng
Hiểu Về Các Loại Giới Hạn Tỷ Lệ của Discord
Discord sử dụng nhiều loại giới hạn tỷ lệ để bảo vệ API. Việc xác định loại sự cố bạn đang gặp phải rất quan trọng để tìm ra giải pháp phù hợp:
Giới Hạn Tỷ Lệ Toàn Cầu
Giới Hạn: 50 yêu cầu mỗi giây trên hầu hết các điểm cuối
Phạm Vi: Áp dụng cho toàn bộ ứng dụng của bạn
Xác Định: Tìm kiếm X-RateLimit-Scope: global
trong tiêu đề phản hồi
Giới Hạn Tỷ Lệ Theo Đường Truyền
Giới Hạn: Thay đổi tùy theo điểm cuối
Phạm Vi: Dành riêng cho từng tuyến API
Xác Định: Kiểm tra X-RateLimit-Scope: user
Giới Hạn Tỷ Lệ Cụ Thể Theo Tài Nguyên
Lưu ý: Giới hạn tỷ lệ dành riêng cho từng tài nguyên có thể đạt được từ nhiều nguồn (người dùng khác, bot, webhook, etc.) và có thể không chỉ ra rằng ứng dụng của bạn phải chịu trách nhiệm hoàn toàn.
Giới Hạn: Giới hạn độc lập cho các nhóm, kênh, hoặc webhook cụ thể
Phạm Vi: Áp dụng cho các hành động trên các tài nguyên cụ thể.
Xác Định: Tìm kiếm X-RateLimit-Scope: shared
trong tiêu đề
Giới hạn Yêu Cầu Không Hợp Lệ
Giới Hạn: 10.000 yêu cầu không hợp lệ trong 10 phút
Nguyên Nhân Phổ Biến: Lỗi chưa được xử lý (401, 403 hoặc 429) gây ra tình trạng yêu cầu tăng đột biến. Xin lưu ý, 429 lỗi trả về với X-RateLimit-Scope: shared
không được tính vào giới hạn yêu cầu không hợp lệ của bạn.
Kết Quả: Cấm Cloudflare tạm thời
Cách Xác Định Vấn Đề Giới Hạn Tỷ Lệ Của Bạn
Cách đáng tin cậy nhất để xác định giới hạn bạn đang gặp phải là kiểm tra tiêu đề phản hồi HTTP khi bạn nhận được mã trạng thái 429. Các tiêu đề chính cần kiểm tra:
X-RateLimit-Limit
: Giới hạn tỷ lệ tối đa cho điểm cuối đó
X-RateLimit-Remaining
: Số lượng yêu cầu còn lại trong cửa sổ hiện tại
X-RateLimit-Reset
: Khi cửa sổ giới hạn tỷ lệ được đặt lại (dấu thời gian Unix)
X-RateLimit-Reset-After
: Số giây cho đến khi giới hạn được thiết lập lại
X-RateLimit-Scope
: Chỉ ra loại giới hạn tỷ lệ (toàn cầu, người dùng, hoặc chia sẻ)
retry_after
: Số mili giây phải đợi trước khi thực hiện yêu cầu khác
Thực Hành Tốt Nhất Để Xử Lý Giới Hạn Tỷ Lệ
Thực Hiện Các Chiến Lược Dự Phòng Phù Hợp
Luôn tôn trọng giá trị retry_after
trong giới hạn tỷ lệ phản hồi. Phần này cho bạn biết chính xác thời gian cần đợi trước khi thử lại.
Hãy Cân Nhắc Sử Dụng Tương Tác Khi Có Thể
Lệnh ứng dụng và thành phần tin nhắn là giải pháp thay thế tuyệt vời cho lệnh tiền tố, có thể ngăn chặn các yêu cầu API và tin nhắn quá mức trong các kênh.
Mẹo bổ sung: Hãy giữ phản hồi tương tác và tin nhắn theo dõi ở trạng thái tạm thời vì chúng không được tính vào giới hạn tỷ lệ.
Lưu Trữ Dữ Liệu Hiệu Quả
Giảm các cuộc gọi API bằng cách lưu trữ dữ liệu thường xuyên truy cập, như:
- Thông tin bang hội
- Chi tiết kênh
- Hồ sơ người dùng
- Dữ liệu vai trò
Sử Dụng Yêu Cầu Điều Chỉnh
Kiểm soát tỷ lệ là một giải pháp chủ động nhằm ngăn chặn giới hạn tỷ lệ bằng cách kiểm soát tỷ lệ yêu cầu của bạn trước khi đạt đến giới hạn.
Ví dụ, nếu bot của bạn cần gửi tin nhắn chào mừng tới 200 thành viên mới, thay vì gửi ngay lập tức tất cả 200 tin nhắn, hãy đặt chúng vào hàng đợi giải phóng 4 yêu cầu sau mỗi 100 mili giây. Tỷ lệ này duy trì ổn định ở mức 40 yêu cầu mỗi giây, luôn thấp hơn giới hạn 50 yêu cầu một cách an toàn, đồng thời đảm bảo tất cả tin nhắn được gửi trong khoảng 5 giây.
Giới Hạn Tỷ Lệ Toàn Cầu
Nếu bạn đang đạt đến giới hạn tỷ lệ toàn cầu, chương trình của bạn có thể có vấn đề tiềm ẩn cần được giải quyết.
Sau đây là cách tối ưu hóa mã của bạn để đảm bảo nằm trong giới hạn:
- Triển khai bộ nhớ đệm thích hợp
- Di chuyển đến các tính năng dựa trên tương tác
Nếu các giải pháp này không giải quyết được vấn đề giới hạn tỷ lệ toàn cầu của bạn, chúng tôi khuyến khích bạn liên hệ qua kênh #api-help
của Nhà Phát triển Discord hoặc liên hệ với Bộ Phận Hỗ Trợ Nhà Phát Triển.
Những Cân Nhắc Về Gateway và Phân Vùng
Đối với các bot xử lý các sự kiện thời gian thực thông qua Discord's Gateway (kết nối websocket), phân mảnh là điều cần thiết khi bot của bạn phát triển.
Phân mảnh là gì?
Phân mảnh chia bot của bạn thành nhiều phiên bản, mỗi phiên bản xử lý một tập hợp con các nhóm. Tính năng này phân bổ tải trên nhiều kết nối websocket, giúp bạn duy trì trong giới hạn tỷ lệ.
Nên bắt đầu lập kế hoạch triển khai phân mảnh khi đạt đến con số 2.000 bang hội, vì phân mảnh phải được bật khi có 2.500 bang hội trở lên. Để có hiệu suất tối ưu, hãy thực hiện theo phương pháp tốt nhất là duy trì khoảng 1 mảnh cho 1.000 bang hội.
Hãy nhớ rằng, giới hạn tỷ lệ tồn tại để đảm bảo trải nghiệm ổn định cho tất cả người dùng Discord. Bằng cách làm theo những biện pháp thực hành tốt nhất này, bạn có thể xây dựng một bot có khả năng mở rộng hiệu quả trong khi vẫn tuân thủ những giới hạn này.