2012-12-17 16 views
5

Mam wiele serwerów/pracowników przechodzących przez kolejkę zadań wykonujących żądania interfejsu API. (Django z Memcached i Seler dla kolejki) Żądania interfejsu API są ograniczone do 10 żądań na sekundę. Jak mogę ją ograniczyć, aby całkowita liczba żądań (wszystkich serwerów) nie przekroczyła limitu?Ograniczanie liczby rozproszonych

Przejrzałem kilka powiązanych pytań dotyczących limitu stawek, które, jak przypuszczam, koncentrują się na bardziej liniowym, nie współbieżnym scenariuszu. Jakie podejście powinienem przyjąć?

Odpowiedz

0

Czy obejrzałeś projekt Rate Limiter z Guava? Wprowadzili tę klasę w jednym z najnowszych wydań i wydaje się, że częściowo zaspokoiła ona twoje potrzeby.

Z pewnością nie obliczy on limitu stawek dla wielu węzłów w środowisku rozproszonym, ale należy się liczyć z tym, że limit szybkości jest skonfigurowany dynamicznie w zależności od liczby działających węzłów (np. Dla 5 węzłów, których limit ma być 2 żądań API na sekundę)

0

Pracowałem nad projektem open source, aby rozwiązać ten dokładny problem o nazwie Limitd. Chociaż nie mam jeszcze klientów na inne technologie niż węzeł, protokół i pomysł są proste.

Twoja opinia jest bardzo mile widziane.

0

I rozwiązać ten problem, niestety nie dla technologii: bandwidth-throttle/token-bucket

Jeśli chcesz go wdrożyć, oto idea realizacji:

Jest to token bucket algorithm który konwertuje zawierające znaki na znacznik czasu od kiedy to było zupełnie puste. Każde zużycie aktualizuje ten znacznik czasu (zablokowany), aby każdy proces miał ten sam stan.

Powiązane problemy