Управление очередью запросов на стороне шлюза - действительно сложная задача, и, вероятно, главная причина, почему она не реализована в этих шлюзах, заключается в том, что это действительно трудно сделать правильно. Вы должны обрабатывать все случаи распределенной системы, и, кроме того, это делает ее «безопасной», поскольку «медленные» клиенты быстро потребляют ресурсы компьютера.
Такой шаблон обычно выгружается в клиентские библиотеки, поэтому, когда клиент достигает кода состояния ограничения скорости, он использует что-то вроде экспоненциального отката для повторения запросов. Это гораздо проще масштабировать и внедрять.
Не могу сказать о Конге, но Tyk в этом случае предоставляет два основных числа, которыми вы можете управлять: квота - максимальное количество запросов, которые клиент может сделать за данный период времени, и ограничения скорости - защита безопасности. Вы можете установить ограничение скорости 1) для «политики», например, для группы потребителей (например, если у вас несколько уровней обслуживания, с разными допустимыми ограничениями использования / скорости), 2) для отдельного ключа 3) Глобально для API (работает вместе с ключевыми предельными ставками). Так, например, вы можете установить некоторые умеренные ограничения скорости клиента и ограничить общий лимит с помощью глобальной настройки API.
Если вы хотите полностью динамическую схему и пересчитать пределы на основе нагрузки кластера, это должно быть возможно. Вам нужно будет где-то написать и запустить этот планировщик, время от времени он будет выполнять перерасчет на основе текущего общего использования (которое рассчитывает Tyk для вас, а вы получаете его из Redis) и будет общаться с Tyk API, перебирая через все ключи (или политики) и динамически обновлять их ограничения скорости.
Надеюсь, это имеет смысл:)