Nano Hash - криптовалюты, майнинг, программирование

Socket.io и публикация/подписка Redis

Я хочу использовать socket.io, но я буду запускать несколько экземпляров своего приложения, так что тут все становится интереснее.

  • Мне нужно запустить несколько экземпляров на разных портах. Здесь нет проблем.

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

  • Учитывая, что будет несколько экземпляров, не все из них не смогут общаться друг с другом напрямую (пользователь A подключается к экземпляру X, если пользователь B подключен к экземпляру Y, они не могут общаться, поскольку серверы независимы друг от друга. ), поэтому мне нужно использовать механизм публикации/подписки Redis в качестве оболочки, чтобы имитировать функции отправки и вещания socketio. Таким образом, даже если у меня есть несколько экземпляров приложения или я запускаю его на разных серверах, все смогут общаться друг с другом, если они подключены к одному и тому же серверу Redis. Для этого мне понадобятся модули socket.io-redis и socket.io-emitter.

Я правильно понял, что-то не так с этим подходом?

01.05.2016

Ответы:


1

Звучит примерно так, наверное, за исключением того, что вы уверены, что вам нужно несколько экземпляров вашего приложения Node на разных портах? Потому что вы можете справиться с большей нагрузкой, чем вы предполагаете, с одним сервером, и есть способы разделить разные каналы связи с помощью socket.io.

01.05.2016
  • Я хочу использовать все ЦП, кажется, что есть два способа добиться этого: использовать кластерный модуль (собственное решение) или создать несколько экземпляров (равных количеству ядер), используя Redis для pub/sub для связи сокетов (поскольку они могут не разговаривайте друг с другом напрямую, если они не находятся на одном сервере) и позволяя Nginx обрабатывать балансировку нагрузки между этими экземплярами. Это также должно работать для нескольких серверов, на которых запущено несколько экземпляров. Это правильно? 01.05.2016
  • Я думаю, что то, что вы говорите, сработает, просто подумал, что вы, возможно, захотите перепроверить, действительно ли вы так привязаны к процессору. Конечно, хорошо иметь масштабируемое решение, если вы столкнетесь с проблемами ЦП/Ввода-вывода в будущем только с одним процессом, но это не гарантирует, что вы столкнетесь с этим узким местом. 01.05.2016
  • Я, вероятно, не столкнусь с этим узким местом в ближайшее время (возможно, никогда), но я хочу иметь масштабируемое решение, которое использует столько ресурсов, сколько может. Спасибо! 01.05.2016
  • @salep, я использую Redis 3 для публикации и подписки с помощью специального плагина вывода C++11, который буферизует сообщения авионики в отсортированном STL std::list, который сбрасывается, когда достигает длины 5000, и отключается, когда redis.conf жестко достигнуты лимиты буфера вывода программного клиента REDIS. Как я могу использовать вашу идею создания нескольких экземпляров (равных количеству ядер, используя Redis для pub/sub для связи через сокеты, чтобы справиться с нагрузкой 0,4 миллиона байт в секунду? Спасибо. 01.02.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..