Публикация данных с высоким трафиком с Redis - PullRequest
0 голосов
/ 23 декабря 2018

Я ищу практическое решение для следующего варианта использования:

У меня более 500 устройств GPS-отслеживания, отправляющих сообщения на сервер.Каждое устройство отправляет 1 сообщение каждые 5–60 секунд.И тогда у меня есть веб-сервер, который должен предоставить местоположение устройства отслеживания.Если пользователь владеет 4 устройствами, он или она должен видеть местоположение всех 4 устройств.

Мое решение в настоящее время использует комбинацию асинхронного сервера сокетов, написанного на Perl6, Redis и MongoDB.Сервер сокетов прослушивает 500+ устройств и передает полученное сообщение в Redis и одновременно публикует его.А затем у меня есть отдельный скрипт, который запускается каждые 2 часа, чтобы выгрузить данные Redis в файл .rdb, проанализировать файл в формате JSON и выгрузить его в MongoDB.Причина этого заключается в том, чтобы избежать узких мест в MongoDB.Веб-сервер подписывается на канал Redis, выполняет поиск единственного сообщения, необходимого пользователю, и отправляет его в браузер с помощью Websocket.Но я предполагаю, что это не очень хорошая идея, чтобы выделять только несколько сообщений из большого пула сообщений.

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

Другой вопрос, для этого вида трафика, долженЯ использую кластер Redis вместо автономного Redis?Или я не должен использовать Redis вообще и использовать хорошо известную очередь сообщений, такую ​​как RabbitMQ или 0MQ?

Мой текущий сервер имеет 2-ядерный ЦП и 4 ГБ ОЗУ.

Спасибо!

...