Tôi đang cố triển khai một số điều chỉnh trên API REST của mình. A typical approach là sau một ngưỡng nhất định để chặn yêu cầu (với 403
hoặc 429
phản hồi). Tuy nhiên, tôi đã thấy one api thay vào đó, hãy thêm chậm trễ vào phản hồi.điều chỉnh các cuộc gọi http api với độ trễ
Khi bạn thực hiện cuộc gọi đến API, chúng tôi sẽ xem xét số cuộc gọi trung bình của bạn mỗi giây (c/s) trong khoảng thời gian năm phút trước đó. Đây là những gì sẽ xảy ra:
trên 3c/s và chúng tôi thêm một sự chậm trễ 2 giây
trên 5c/s và chúng tôi thêm một sự chậm trễ 4 thứ hai
trên 7c/s và chúng tôi thêm một sự chậm trễ 5 giây
Từ quan điểm của khách hàng, tôi thấy điều này là tốt hơn so với việc trở lại một lỗi. Điều tồi tệ nhất có thể xảy ra là bạn sẽ chậm lại.
Tôi tự hỏi làm thế nào điều này có thể đạt được mà không ảnh hưởng tiêu cực đến máy chủ ứng dụng. tức là để thêm những sự chậm trễ đó, máy chủ cần phải giữ yêu cầu mở, khiến cho yêu cầu xử lý ngày càng nhiều bận rộn, nghĩa là nó có ít dung lượng hơn cho các yêu cầu mới sắp tới.
Cách tốt nhất để thực hiện điều này là gì? (nghĩa là cái gì đó có thể được thực hiện trên máy chủ web/cân bằng tải để máy chủ ứng dụng không bị ảnh hưởng tiêu cực? Có một số loại lớp điều chỉnh có thể được thêm vào cho mục đích này không?)
Chúng tôi ' tái sử dụng Django/Tastypie, nhưng câu hỏi là nhiều hơn về kiến trúc/mức độ khái niệm.
Cảm ơn! Có vẻ như chính xác thứ tôi đang tìm kiếm (không chắc chắn điều gì, nhưng có lẽ sẽ làm). – gingerlime
Đó có phải là 'nginx-delay-module' có thể lấy chỉ dẫn từ Django theo bất kỳ cách nào không? Ví dụ: nếu lạm dụng được xác định thông qua chế độ xem Django, tôi có thể hướng dẫn plugin đó trì hoãn phản hồi ở phía bên nginx không? Lý tưởng nhất là tôi muốn viết một lớp Throttle tùy chỉnh cho DRF bằng cách sử dụng này. – dtgq