Докерные контейнеры и кластеры Node.js

У меня есть сервер api с Node.js, который использовал его кластерный модуль, и тестирование выглядело довольно неплохим. Теперь наш ИТ-отдел хочет перейти на использование контейнеров Docker, которым я доволен, но я никогда не использовал его иначе, чем просто играть. Но у меня возникла мысль, что приложение Node.js работает в рамках одного процесса Docker, поэтому модуль кластера не будет действительно лучшим, поскольку одиночный процесс Docker может быть медленной точкой установки до тех пор, пока запрос не будет разделен внутри этот процесс с помощью кластерного модуля.

Итак, действительно ли кластер контейнеров Docker, запускаемый для запуска и остановки их на лету, более важен, чем правильно использовать модуль кластера Node.js?

Если у меня есть кластер контейнеров, будет ли с помощью кластерного модуля Node.js получить что-нибудь? Конечные точки api берут меньше 0,5 сек для возврата (обычно немного меньше).

Я использую MySQL (полагаю, что это единственный сервер, в настоящее время ничего нет), поэтому не должно быть никаких оснований использовать решение для обеспечения целостности данных.

Ответы

Ответ 1

Вы должны быть уверены, но моя догадка будет работать с кластерным модулем node. Это приведет к увеличению загрузки процессора с наименьшим количеством дополнительных накладных расходов. Никаких дополнительных контейнеров для управления (запуск, остановка, мониторинг). Кроме того, у сотрудников кластера есть эффективный механизм коммуникации. Мне кажется, что самая разумная эволюция (не пропустить шаги) мне показалась:

  • 1 контейнер, 1 node процесс
  • 1 контейнер, несколько кластерных node работников
  • несколько контейнеров, каждый из которых имеет несколько рабочих node

Ответ 2

То, что я видел как лучшее решение при использовании Docker, заключается в том, чтобы сохранить как можно меньше процессов на один контейнер, поскольку контейнеры легкие; вы не хотите, чтобы процессы пытались использовать более одного процессора. Таким образом, запуск кластера в контейнере не добавит никакого значения и может ухудшить время ожидания.

Здесь https://medium.com/@CodeAndBiscuits/understanding-nodejs-clustering-in-docker-land-64ce2306afef#.9x6j3b8vw Чад Робинсон объясняет идею в общих чертах.

Kubernetes, Rancher, Mesos и другие уровни управления контейнерами обрабатывают балансировку нагрузки. Они обеспечивают "планирование" (перемещение этих срезов контейнера Docker вокруг разных процессоров и машин, чтобы обеспечить хорошее использование в кластере) и "сетевое взаимодействие" (выравнивание нагрузки на входящие запросы к этим контейнерам) внутри.