Эта статья устарела, так как в ClusterWS многое изменилось. К сожалению, у меня недостаточно времени (на данный момент) для поддержки средних статей.

Всем доброго времени суток, надеюсь у вас отличный день. Если вы не слышали о ClusterWS, вам, вероятно, следует его проверить (и дело не только в том, что я разработчик и пытаюсь сделать свою библиотеку более популярной, но и в том, что она решает большую проблему с масштабированием приложений WebSocket в Node.js)



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

Вероятно, многие люди сразу же спросят, каковы преимущества использования ClusterWS в вашем следующем приложении Real Time. Ответ довольно прост: эта платформа уменьшит масштабирование Websocket (что, вероятно, является самой большой проблемой, которая существует с приложениями Websocket).

Так как же ClusterWS масштабирует Websocket между машинами и ядрами процессора?

Надеюсь, вы слышали о кластере Node.js, если нет, пожалуйста, ознакомьтесь с ним, прежде чем продолжить, потому что это действительно утомительно объяснять здесь.

В основном для масштабирования Websocket между процессорами вашего сервера мы используем кластер Node.js. Который, к сожалению, не имеет общего состояния, поэтому мы разработали брокерский сервер, который работает в фоновом режиме как отдельный рабочий процесс и передает сообщения от одного рабочего процесса другим.

Я знаю ужасную картину (причина художника, а может я немного 😄). Эта схема отображает базовое соединение клиент-сервер. Так, например, если я хочу отправить сообщение от Боба Анне, нам нужно перейти от одного ребенка к другому, и для этого мы должны использовать брокера. Это будет работать так:

Боб => Ребенок 2 => Ребенок 1 Брокер => [Ребенок 3, Ребенок 4] => Анна

Да, сообщение будет отправлено всем дочерним элементам, и каждый дочерний сервер решит, должно ли сообщение идти дальше или должно быть удалено.

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

Эта штука вызывает Pub/Sub, и это именно то, что вам нужно использовать при построении связи между клиентами в ClusterWS. Также в ClusterWS вы можете использовать связь клиент => сервер, но эта вещь не очень хорошо масштабируется 😃 (но в любом случае есть много вариантов использования для клиента => сервер), поэтому вам придется использовать систему Pub/Sub (которая предоставляется в ClusterWS) для отправки сообщения с сервера на клиенты или с клиента на клиент.

Это часть 1, и в следующей статье я объясню, как мы масштабируемся между машинами. Надеюсь, вам это понравится.