Ограничение скорости Nginx - динамическое назначение скорости на основе текущей репликации службы докеров

Моя установка состоит из микросервисов, которые работают в контейнерах Docker, организованных с помощью Docker Swarm; Nginx с открытым исходным кодом в качестве шлюза API.

То, что я пробовал - установить ограничение скорости для определенных API, следуя документации Nginx, и все работает нормально. Я использую limit_req_zone, создаю несколько зон, назначаю им разные скорости и использую эти зоны в блоках местоположения - и ограничение скорости работает, как ожидалось.

То, что я ищу - можно ли динамически назначать ограничение скорости для сервисов на основе текущего коэффициента репликации вместо "жесткого кодирования" (как то, что я пробовал выше)? Позволь мне объяснить -

Скажем, у меня есть служба X, для которой я использую 10 контейнеров. В этом состоянии предположим, что ограничение скорости здесь составляет 50 об / с. Затем я решаю уменьшить эту услугу до 5 контейнеров. И соответственно, хотелось бы, чтобы ограничение по скорости было снижено, скажем, до 20р / с.

Если я жестко запрограммирую скорость для каждого API в файле nginx.conf, мне придется вручную обновлять этот файл каждый раз, когда я увеличиваю или уменьшаю масштабы своих служб, что не кажется хорошей идеей.

Решение, которое я думаю, представляет собой что-то вроде сценария, который запускается в Nginx (например, по расписанию с использованием таймера Nginx), который выполняет HTTP-запросы с использованием API-интерфейсов Docker к узлу диспетчера докеров для получения текущего списка служб и его репликации. Затем используйте эту информацию, чтобы назначить ограничение скорости (по существу, r/s) для каждого API, соответствующим образом обновив блок местоположения в nginx.conf и перезагрузив Nginx.

  1. Будет ли это возможным решением? Если нет, есть ли лучшие / более простые способы добиться этого?

  2. Имея в виду вышеуказанное решение, я проверял модуль lua-resty-http. У меня очень мало опыта работы с Nginx Lua. Я наткнулся на этот вопрос, но не совсем понял, как https://github.com/ledgetech/lua-resty-http используется с пакетом openresty. Может ли кто-нибудь здесь указать мне на любую документацию по этому поводу, особенно на его установку, и, если возможно, на любые примеры, в которых этот пакет используется для выполнения HTTP-запросов от Nginx?

Цените помощь!

0 ответов

Другие вопросы по тегам