2017-01-01 8 views
1

Предположим, что у меня есть служба обслуживания X с API getName (String id). Мой код развертывается на 5 машинах, которые находятся за балансировщиком нагрузки. Тот же клиентский код работает на этих машинах, и где-то он вызывает вызов службы X для getName (String) api. Служба поставила ограничение на то, что она будет обрабатывать максимум 3 вызова в секунду. Предположим, что время обращения к запросу составляет 200 мс, как я могу обеспечить, чтобы мои клиенты не превзошли 3 лимита TPS сервера? У меня нет механизма для общения моих клиентов. Как избежать дросселирования на стороне сервера. Что, если я увеличу свой флот до 10 или 15 с 5? Есть ли что-то, что я могу сделать?Как обеспечить верхний предел служебных вызовов, когда клиентский код работает на нескольких машинах?

Будет ли что-то вроде усеченного экспоненциального отклика работать для меня?

+0

Экспоненциальная отсрочка действительно для случаев, когда клиент повторно пытается воспользоваться вашим сервисом .... и предотвратить частые повторные попытки, подавляющие ваш сервис ... в вашем случае вам нужно запретить больше, чем звонков в секунду полностью право .... не развлекать более 3 вызовов в секунду от любого ip ?? – prashant

+0

Я забочусь о стороне клиента. Как я собираюсь обеспечить, чтобы я не делал больше 3 вызовов в секунду, это мой вопрос, почему вы спрашиваете его об этом. Я не знаю, как обеспечить это, вот что я спрашиваю –

+0

Что произойдет, если вы делаете более 3 звонков в секунду? Вы получаете сообщение об ошибке, которое может возникнуть, и повторите попытку позже? Происходит ли запрос с запросом на 3 вызова в секунду? –

ответ

0

Вам нужно только сохранить запрос времени прибытия из последних 3 запросов в сеансе. Затем проверьте, находится ли 4-й запрос в этом 1-секундном окне или нет.

Предполагая, что t0 является четвёртым запрос в этой временной шкале (время в миллисекундах),

...-- t3 ----- t2 ----- t1 ---- t0 ----

if ((t0 - 1000) > t3) { 
    //4th req within 1 sec, so process the request 
} else { 
    //return HTTP status code 502(service temporarily overloaded) 
} 

Если вы хотите, чтобы душить через балансировку нагрузки: Одним из решений будут использовать некоторый API/хранение, общее для всех экземпляров API.