Масштабирование приложения nodejs при назначении уникальных портов

Я пытаюсь масштабировать свои игровые серверы (nodejs), где экземпляры должны иметь уникальные порты, назначенные им, и где экземпляры являются отдельными (без какой-либо балансировки нагрузки) и знают, какой порт им назначен (в идеале с помощью переменной env?) . Я пытался использовать docker swarm, но у него нет возможности указать диапазон портов, и я не смог найти никакого способа выделить или передать выделенный порт экземпляру, чтобы он знал о порте, на котором он работает, например, через переменную env.

Идеальное решение будет выглядеть так:

Instance 1: hostIP:1000
Instance 2: hostIP:1001
Instance 3: hostIP:1002
... etc

Теперь мне удалось выполнить эту работу, используя обычный Docker (не swarm), привязавшись к хост-сети и передав переменную env PORT, но таким образом мне пришлось бы вручную запускать столько игровых серверов, сколько мне нужно. .

Приложение моего узла использует «process.env.PORT» для привязки к IP-адресу хоста: порт

Любое мнение о том, какие решения я мог бы использовать для масштабирования своего приложения?


person J0k3r    schedule 17.02.2020    source источник


Ответы (2)


Не уверен, что вы имеете в виду там? Не могли бы вы предоставить более подробную информацию?

person Josh    schedule 17.02.2020
comment
все подробности там, если вы не знаете, что я имею в виду, то зачем публиковать «Не уверен, что вы имеете в виду»? очевидно, что ты понятия не имеешь - person J0k3r; 17.02.2020

Вы можете попробовать разные подходы.

  • Используйте docker compose и внешнюю службу для извлечения данных из docker.sock, как предлагается здесь Как получить порты, сопоставленные докеру, из приложения node.js?
  • Используйте Redis или любой другой сервис хранения ключей и значений для хранения информации о порте и получения ее при каждом запуске нового экземпляра. Самое простое решение — использовать команду redis incr для получения следующего бесплатного номера, но оно имеет некоторые ограничения.
person Evgenii Malikov    schedule 17.02.2020
comment
но, как я уже сказал в вопросе выше, предоставленный вами ответ не будет работать для роя докеров, потому что он не может назначать случайные порты или может? - person J0k3r; 17.02.2020
comment
Я не использую рой, но он, вероятно, должен работать и с роем. В этом случае вы не должны назначать порты самостоятельно, docker сделает это за вас, если вы. На самом деле все ваши рабочие контейнеры будут использовать один и тот же внутренний порт, сопоставленный со случайным внешним портом. - person Evgenii Malikov; 18.02.2020