Нажмите полученные данные в реальном времени для 10000 пользователей? - PullRequest
1 голос
/ 10 мая 2011

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

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

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

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

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

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

1 Ответ

3 голосов
/ 10 мая 2011

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

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