Docker рой без балансировки нагрузки для быстрых запросов - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь настроить автоматизацию / тестирование для моего веб-приложения, используя docker swarm. Экземпляры приложений должны иметь возможность общаться друг с другом, что является частью того, что мы тестируем, поэтому мы хотим, чтобы как можно больше таких автоматизированных тестов работали и работали одновременно. Чтобы увеличить это, я хочу загрузить запросы баланса для тестовых прогонов экземпляра приложения по контейнерам / машинам. У меня есть простой nodejs образ контейнера веб-сервера, настроенный для приема запроса с некоторыми параметрами через http и запуска тестового запуска с этими параметрами. Можно выполнить несколько тестовых прогонов в одном и том же контейнере одновременно, но мы не хотим, чтобы вся нагрузка была в одном контейнере. У меня есть несколько реплик на нескольких узлах / машинах, на которых запущен этот образ. Я надеялся использовать встроенную в Swarm балансировку нагрузки на основе IPVS docker для распределения тестовых прогонов без необходимости установки какого-либо другого прокси-решения. В идеальном мире мне действительно нужна только круговая балансировка, так что каждый раз, когда я делаю запрос в рой, случайный узел принимает запрос и запускает задачу.

Вот странная часть . Балансировка нагрузки, кажется, работает, но только если я жду> 3 секунды между отправкой запросов. Если я отправлю запросы в быстрой последовательности, все эти запросы будут go в один и тот же контейнер! Например, если в моем рое 3 контейнера (с1, с2, с3), и я быстро отправляю 3 http-запроса на http://localhost: 8080 / starttest? Params = foo , просматривая журналы, которые я мог бы увидеть, что на c1 выполняется 3 тестовых прогона. Однако, если я подожду несколько секунд между отправкой http-запросов, я увижу, что прогоны распределены по c1, c2 и c3.

Это поведение действительно странное и не идеальное для нашего сценария. Кто-нибудь видел это / знает, как настроить вещи так, чтобы запросы были правильно сбалансированы по нагрузке?

Я уже пытался найти ответ на этот вопрос в SO / Google, но большинство существующих вопросов касаются чего-то другого, кроме этого конкретное c поведение. Я мог бы попробовать использовать другой балансировщик нагрузки или настроить k8s, чтобы справиться с этим позже, но было бы здорово, если бы это было возможно без настройки даже большего количества инфраструктуры, чем у меня уже есть.

...