Некоторые твердые ответы здесь. Я думаю, что больше оборудования - это путь. Слишком много клиентов или трафик обычно хорошая проблема.
Однако, если вы абсолютно должны дросселировать клиентов, есть некоторые варианты.
Наиболее масштабируемые решения, которые я видел, вращаются вокруг распределенной системы кэширования, например Memcached, и используют целые числа для учета количества.
Укажите скорость, с которой ваша система может обрабатывать трафик. Либо в целом, либо на каждого клиента. Затем поместите счет в memcached, который представляет эту скорость. Каждый раз, когда вы получаете запрос, уменьшайте значение. Периодически увеличивайте счетчик, чтобы увеличить пропуск трафика.
Например, если вы можете обрабатывать 10 запросов в секунду, поместите счет 50 в каждые 5 секунд, максимум до 50. Таким образом, вы не заправляете его все время, но можете также обрабатывать немного разрыва, ограниченного окном. Вам нужно будет поэкспериментировать, чтобы найти хорошую частоту обновления. Ключом для этого счетчика может быть либо глобальный ключ, либо на основе идентификатора пользователя, если вам нужно ограничить этот путь.
Приятная вещь в этой системе заключается в том, что она работает во всем кластере И механизм, который заправляет счетчики, не обязательно должен находиться на одном из ваших текущих серверов. Вы можете выделить для него отдельный процесс. Загруженным серверам нужно только проверить это и уменьшить его.
Все, что касается меня, я сначала изучу другие варианты. Дросселирование ваших клиентов обычно является хорошим способом их раздражать. Скорее всего, НЕ лучшая идея. :)
Бросьте больше оборудования на него. –
Пока все запросы действительны, я соглашаюсь с Anon, бросаю больше аппаратных средств (проще всего) или оптимизирую ваш сервлет Java. Если запросы являются спамом, то вы можете заблокировать их на более низком уровне, используя что-то вроде iptables или блока уровня apache. – Nick
Его вопрос действительно. Всегда может быть больше запросов, чем может обрабатывать оборудование. Серверу нужен способ ограничить запросы и теперь вывести систему во время чрезмерных нагрузок. –