Обмен сообщениями для мобильных потребителей

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

Я думаю использовать обмен сообщениями с помощью темы (для каждого чата): Kafka или RabbitMQ. Пожалуйста, дайте советы, что хорошо для мобильных потребителей.

Честно говоря, моя рекомендация в том, что вы не пытаетесь построить это самостоятельно. Есть тонна подводных камней, с которыми вы столкнетесь – намного больше, прежде чем вы даже нажмете масштаб. Вам нужно беспокоиться о таких вещах, как обработка сетевых подключений, синхронизация, загрузка данных, обработка сообщений с большим количеством сообщений – список продолжается. Кстати, моя предыдущая компания, которая строила приложение и имела более 500 инженеров, тоже пыталась его построить – и потерпела неудачу.

Я знаю, потому что мы его построили – это называется «Магнитное сообщение». Посмотрите, что у нас есть на http://developer.magnet.com . Мы создали концепцию каналов именно для того, о чем вы говорите, и способов надежно доставлять эти сообщения.

Дайте мне знать, как это происходит для вас.

Kafka и RabbitMQ – совсем другие подходы. Kafka – это система хранения журналов (то есть упорядоченная последовательность сообщений), а RabbitMQ – просто очередность и маршрутизация.

Я разрабатываю систему поиска событий. Я использую:

  1. Кафка в бэкэнд
  2. RabbitMQ (или другие платформы, такие как XMPP) для подключения клиентов

RabbitMQ хорошо масштабируется на тысячах очередей и позволяет клиенту определять частные очереди (неназванные, временные, отдельные потребители, исключить), которые необходимы для RPC и простой безопасности. Клиенты обычно должны выполнять определенные функции в кластере или только читать отфильтрованный набор событий (не все события) из-за их ограничения в пропускной способности. Теоретически, kafka можно было использовать, но сейчас есть несколько проблем (например, ограничения по темам, эксклюзивные очереди, автоустановка и т. Д.).

Kafka (+ samza) – очень хороший инструмент для поиска событий (например, для навигации по истории сообщений) и обработки потока в реальном времени (автоматическое воспроизведение, перезапуск процессов и т. Д.). Масштабирование не является необходимостью, так как это интеграция, высокая степень совместимости и восстановление.

MQTT кажется хорошим решением вашей проблемы. В основном он небольшой, легкий, эффективный и очень хороший для работы от батареи (см. MQTT, используемый facebook messenger ).

Кроме того, MQTT является стандартом OASIS и существует множество совместимых брокеров, некоторые из которых позволяют управлять несколькими миллионами одновременных подключений (например, JoramMQ используется в очень масштабируемых приложениях ).

Intereting Posts