2016-01-27 2 views
4

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

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

ответ

2

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

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

Сообщите мне, как это делается для вас.

1

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

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

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

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

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

0

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

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

Смежные вопросы