2012-12-17 30 views
5

Tôi có nhiều máy chủ/công nhân thực hiện một hàng đợi nhiệm vụ thực hiện các yêu cầu API. (Django với Memcached và Celery cho hàng đợi) Các yêu cầu API được giới hạn trong 10 yêu cầu một giây. Làm cách nào để tôi có thể xếp hạng giới hạn để tổng số yêu cầu (tất cả các máy chủ) không vượt quá giới hạn?Giới hạn tốc độ phân phối

Tôi đã xem xét một số câu hỏi về giới hạn tốc độ liên quan mà tôi đoán là chúng tập trung vào một trường hợp tuyến tính, không đồng thời hơn. Tôi nên dùng loại phương pháp nào?

Trả lời

0

Bạn đã xem Rate Limiter từ dự án Guava? Họ đã giới thiệu lớp học này trong một trong những bản phát hành mới nhất và dường như nó đáp ứng một phần nhu cầu của bạn.

Chắc chắn nó sẽ không tính giới hạn tốc độ trên nhiều nút trong môi trường phân tán nhưng những gì bạn làm là giới hạn tốc độ được định cấu hình động dựa trên số lượng nút đang chạy (tức là cho 5 nút bạn có giới hạn tốc độ 2 yêu cầu API một giây)

0

Tôi đã làm việc trên một dự án mã nguồn mở để giải quyết vấn đề chính xác này được gọi là Limitd. Mặc dù tôi không có khách hàng cho các công nghệ khác hơn là nút, giao thức và ý tưởng rất đơn giản.

Phản hồi của bạn rất được hoan nghênh.

0

tôi giải quyết vấn đề mà tiếc là không cho công nghệ của bạn: bandwidth-throttle/token-bucket

Nếu bạn muốn thực hiện nó, đây là ý tưởng của việc thực hiện:

Đó là một token bucket algorithm mà chuyển đổi các thẻ chứa vào một dấu thời gian kể từ khi nó cuối cùng đã hoàn toàn trống rỗng. Mỗi tiêu thụ cập nhật dấu thời gian này (bị khóa) để mỗi quá trình chia sẻ cùng một trạng thái.