#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 Я мог бы порекомендовать какую-то конкретную структуру, но в целом она немного расплывчата.