2016-11-04 3 views
0

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

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

Спасибо.

ответ

1

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

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

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

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

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

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

Я знаю, что вы говорите о WS но, возможно, его стоит переход к socket.io. Image Source Article socket comparison

Специально зная, что вы можете масштабировать как вертикально (увеличить число нитей на машине) и горизонтально (развернуть больше «мастеров» accross более машин) с относительной легкостью. (И я повторюсь: делитесь своим клиентам сокетов & связи accross все экземпляры)

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

Я бы предложил попробовать Socket.io + гнездо.IO-Redis

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

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

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

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

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