2016-11-15 3 views
0

Я хотел бы использовать nginx для загрузки баланса между несколькими экземплярами моего приложения-узла, работающим на разных портах. Что я хотел знать - возможно ли, что разные экземпляры, запущенные на разных портах, могут взаимодействовать друг с другом. Например, если у меня есть чат на одном экземпляре, люди могут общаться с другим экземпляром моего приложения, работающим на другом порту из-за баланса нагрузки? Если да, то как? и если нет, то как я могу сделать эту работу. Я очень благодарен вам за помощь.nginx nodejs информация о распределении баланса нагрузки

+0

Если вы используете AWS или подобные веб-сервисы, я думаю, вы можете. –

+0

Вам нужно будет иметь общий бэкэнд между вашими экземплярами, которые будут поддерживать некоторую форму передачи сообщений, например. redis pubsub. – cejast

ответ

0

Ну у вас есть две группы решений здесь (заметьте, что во втором подходе нет никакого обмена информацией, вы просто балансировать нагрузку в «умнее» способом):

  1. На прикладном уровне. Вам нужно настроить приложение или node.js (я не знаю, поддерживает ли узел его другой сервер приложений), чтобы иметь доступ к общему бэкэнду в качестве @cejast, упомянутого в комментарии. У вас есть несколько подходов к достижению этого, и в каждом из них целью является каждый экземпляр вашего приложения, независимо от того, где он находится, чтобы иметь доступ ко всей информации о пользователях.
  2. С методом балансировки нагрузки. Вы можете решить эту проблему с помощью специального метода балансировки нагрузки nginx поддерживает ip_hash (см. here для ip_has и других методов балансировки нагрузки, поддерживаемых nginx.) С ip_hash nginx будет отправлять тот же ip (/ 24 подсеть фактически) всегда в один и тот же экземпляр, чтобы вы не будет беспокоиться о том, что экземпляр должен будет обрабатывать сеанс, который не знает.

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

Например, nginx ip_hash, который я упоминал ранее, создает хеш, который используется для липкости с первых 3 октетов с IPv4, что означает, что если ваше приложение получает большую часть своего трафика из определенного класса C, то балансировка нагрузки подсети не будет балансировать это хорошо. В этом случае вы должны использовать переменную remote_addr.

Это хорошая ссылка для nginx load balancing.

Смежные вопросы