Nginx

Nginx ― это веб-сервер, который можно использовать как сервер для раздачи статического контента, почтовый-сервер или обратный прокси-сервер. Nginx считается самым высокопроизводительным.

У nginx есть один главный и несколько рабочих процессов. Основная задача главного процесса — чтение и проверка конфигурации и управление рабочими процессами. Рабочие процессы выполняют фактическую обработку запросов. Количество рабочих процессов задаётся в конфигурационном файле и может быть фиксированным для данной конфигурации или автоматически устанавливаться равным числу доступных процессорных ядер

Настраивается это с помощью дирректив limit_req_zone и limit_req модуля ngx_http_limit_req_module. Если указать rate=1000r/m, то nginx берет 1 миннут (60 секунд) и делит ее на 1000 запросов и тем самым получаем 60 секунд * 1000 милисекнд / 1000 запросов = 60 милисекунд на 1 запрос, тем самым nginx может обрабатывать запросы только пришедшие с частотностью 1 запрос в 60 милисекнд остальные запросы будут отбиваться по ошибке. Для разрешения этого ограничения можно добавить параметр burst=x, который позволяет обрабатывать всплески запросов равные количеству x. Запросы которые превысили значение x будут работать также что и без burst, то есть отдавать ошибки при превышении частотности запросов. Для того чтобы запросы все таки проходили нужно добавить параметр delay=y, который позволит при всплеске запросов x+y запросы x обработать сразу, а запросы y поставить в очередь и обрабатывать с интервалом 60 секунд * 1000 милисекнд / 1000 запросов = 60 милисекунд. Причем если nginx не получает в какие-нибудь из 60 мс запроса, то будет постепенно накапливать счетчик burst/delay, который потом позволит обработать всплеск равный накопленному.