Веб-сокет Nodejs

Я работаю над приложением nodejs, и требуется отправлять около 10 тыс. запросов в секунду на каждое соединение. Клиентское приложение должно открыть одно соединение через веб-сокет для отправки этих запросов, а на стороне сервера оно должно просто получать и отправлять данные в очередь. Количество соединений сокетов на стороне сервера не так уж и много, может быть около 1k. У меня есть несколько вопросов по этому поводу, и любая помощь очень ценится.

  • Во-первых, возможно ли добиться этой настройки с помощью одного главного процесса? Поскольку я не могу совместно использовать соединения веб-сокетов с дочерними процессами, мне нужно получить пропускную способность от основного процесса.
  • Когда я пытался протестировать библиотеку nodejs ws, я смог отправить только около 1 тыс. запросов в секунду по 9 КБ каждый. Как увеличить пропускную способность?
  • Есть ли какие-нибудь примеры того, как добиться максимальной пропускной способности, поскольку я могу найти сообщения только о том, как добиться максимального количества подключений?

Спасибо.


person Neoster    schedule 04.11.2016    source источник


Ответы (1)


В конечном итоге вам нужно масштабировать

Во-первых, возможно ли добиться этой настройки с помощью одного главного процесса?

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

Поскольку я не могу совместно использовать соединения веб-сокетов с дочерними процессами, мне нужно получить пропускную способность от основного процесса.

Я уверен, что вы будете рады узнать о существовании socket.io-redis.

С его помощью вы сможете отправлять/получать события (общие клиенты) между несколькими экземплярами вашего кода (процессами или серверами). Подробнее: socket.io-redis (Github)

Я знаю, что вы говорите о ws, но, возможно, стоит перейти на socket.io. Статья об источнике изображения сравнение сокетов

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

Когда я пытался протестировать библиотеку nodejs ws, я смог отправить только около 1 тыс. запросов в секунду по 9 КБ каждый. Как увеличить пропускную способность?

Я бы посоветовал попробовать socket.io + socket.io-redis

  1. создать мастер с количеством рабочих, равным количеству ядер ЦП. (вертикальное масштабирование)
  2. разверните свой мастер на 2 или более машинах (горизонтальное масштабирование)
  3. узнать о балансировке нагрузки и выполнить тесты.

Есть ли какие-нибудь примеры того, как добиться максимальной пропускной способности, поскольку я могу найти сообщения только о том, как добиться максимального количества подключений?

Вы увеличите общую пропускную способность, если увеличите количество экземпляров, взаимодействующих с клиентами. (Горизонтальное + вертикальное масштабирование)

Это тоже может быть интересно почитать:

Надеюсь, это помогло.

person EMX    schedule 26.07.2017