2015-11-19 4 views
0

Я использую ws библиотеку в Node.JS. Когда у меня более 100 клиентов, сервер WebSocket не может обрабатывать весь трафик, сервер отстает, но если пользователи отключены, сервер работает правильно. Я использую Heroku для хост-серверов. Что я могу сделать для оптимизации моих серверов/приложений? Должен ли я использовать другую услугу, кроме Heroku? Как обрабатывать огромный трафик на сервере WebSocket в Node.JS?

EDIT: Я использую платную версию Heroku (Хобби). Мой скрипт не длинный (около 140 строк).

EDIT: У меня есть 3 x VPS Cloud 3 из OVH.

  • OpenStack KVM
  • 99.99% ОАС
  • 4 vCores
  • 3,1 ГГц
  • 8 ГБ ОЗУ
  • 100 ГБ
  • Высокая доступность NVMe (Ceph)
  • Пропускная способность 100 Мбит
  • Ubuntu Server 15
  • 17 IP-адреса на сервере

Клиент -> VPS 1 -> ((VPS-2 -> example.com) + (VPS-3 -> example.com)) -> VPS 1 -> Client

+0

Используете ли вы бесплатные экземпляры герою или добавляете ли вы «оплаченные» ресурсы на свой экземпляр? Предполагая, что у вас есть пользовательская база, которая вызывает такую ​​сильную нагрузку на сервер, они должны получать достаточный доход, чтобы гарантировать добавление ресурсов. – Brant

+0

Ваш вопрос очень широк и трудно ответить ... нам нужна дополнительная информация о вашем приложении ... В общем, ** Javascript однопоточный ** - это означает, что если ваш код длинный или блокирующий, ваш сервер выиграл ' t быть в состоянии ответить на многие клиенты. Чтобы решить эту проблему, ** используйте больше обратных вызовов **, это позволяет механизму Javascript чаще переключаться между задачами и реагировать на ожидающие клиенты между обратными вызовами. Ваши ответы могут занять больше времени, но вы будете оптимизировать свои существующие ресурсы, и вы сможете отвечать на другие запросы. – Myst

ответ

3

Этот вопрос не содержит достаточной информации для правильного ответа на вопрос. Есть много факторов, которые могут способствовать этому. Для того, чтобы назвать несколько:

  • машина SPEC (в память, процессор и т.д.)
  • IO (скорость HDD)
  • Дескрипторы файлов
  • Код (многоядерные, нитки и т.д.)
  • Bandwidth
  • Сетевые ограничения

Как указано в другом месте, Node.JS обычно работает на одном ядре с асинхронный IO. Параллелизм, как я уже говорил со многими людьми в прошлом, не параллелизм. Это огромная разница. Это не означает, что Node не может использоваться для поддержки большего числа пользователей, но это также зависит от того, как вы его реализовали, и всех других факторов, лежащих под ним. Подумайте о машине, которая просто не начнется. Вы не можете просто сказать: «Эй, моя машина не запустится - почему бы и нет?» В то же время вы не можете просто сказать: «Эй, моя машина начинается, но иногда во время вождения она вибрирует плохо и вызывает смешные шумы».

Можете ли вы поместить код веб-сокета Node.JS, который вы используете на пастебин, а также включить информацию о сервере, на котором он работает? Некоторые хорошая информация оттуда будет:

кота/Proc/MemInfo кота/Proc/CPUInfo ULIMIT -a

Кроме того, пропускная способность у вас есть

Те были бы (100mb 10mb?) хорошие начальные основания, чтобы посмотреть на проблему и попытаться определить, где узкое место.

О, если вы на хосте OpenVZ, было бы полезно, если бы вы могли предоставить информацию счетчика компонентов.

+0

Хмм ... Heroku не дает мне информации о серверах. Что VPS вы предпочитаете? –

+0

Лично я использую intovps и vpscheap.net для быстрых небольших серверов. intovps является одним из лучших из аспектов цены и технической поддержки. Эти ребята ДЕЙСТВИТЕЛЬНО знают свои вещи. По умолчанию они немного строгие на счетчиках бобов ... Но они будут настраиваться так, как вам нужно. Это контейнеры OpenVZ. –

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