Передача полученных данных в режиме реального времени 10 000 пользователям?

#architecture #concurrency #node.js #server-side #low-latency

#архитектура #параллелизм #node.js #на стороне сервера #низкая задержка

Вопрос:

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

Данные поступают через HTTP Push, и мой текущий план заключается в использовании Node.js для получения этих данных, которые затем прогоняют данные через алгоритм перед обновлением связанных данных в какой-либо базе данных. Наконец, обновления отправляются всем подключенным пользователям веб-сайта через websocket.

Теперь я пытаюсь сделать это масштабируемым для одновременной обработки более 10 000 подключенных пользователей, все из которых подключены через websocket и отправляют обновления примерно раз в 3 секунды. Учитывая, что затем каждый пользователь может взаимодействовать с веб-приложением во время этого, это приведет к множеству запросов туда и обратно.

Теперь, помимо базовой идеи высокого уровня, которая у меня есть, с решением использовать Ruby on Rails в качестве фреймворка веб-сайта и node js для обеспечения «живучести» всего этого — я немного застрял. Я не знаю, какую базу данных использовать (я предполагаю, что это будет нереляционная база данных для быстрого хранения), и я не знаю особенностей того, как спроектировать такую настройку, а также как реализовать логику.

Итак, мой вопрос таков: учитывая мою цель, как мне структурировать такое приложение и что мне нужно знать, чтобы оно было масштабируемым и работало в режиме реального времени на желаемом уровне?

Большое спасибо за любую помощь.

Ответ №1:

Я бы порекомендовал посмотреть на несколько библиотек.

  • now удаленный RPC стал тривиальным.
  • cradle абстракция базы данных couchdb для постоянного хранения.
  • ‘node_redis’ абстракция базы данных redis для межмашинной связи
  • cluster расширьте свою программу на несколько процессов.

Комментарии:

1. Спасибо за ответ, там есть отличные ссылки.

2. @ChasingPavements Я мог бы порекомендовать какую-то конкретную структуру, но в целом она немного расплывчата.