Звиад Кардава (Google Developer Expert)
Выбор backend для messaging в 2016 году
О докладе
В эпоху микросервисов сервера для обмена сообщениями перестают быть монолитными и разлетаются по разным докер контейнерам. Подход изменился, и сейчас уже можно не писать код с нуля на Си, а воспользоваться готовыми решениями. Но какими? Множество шин данных, протоколов, хранилищ и баз данных конкурируют за ваше внимание друг с другом. Что выбрать? Как собрать вместе? По каким критериям сравнивать и что для каких задач подходит? Последние несколько месяцев я с нуля разрабатывал платформу для месседжинга и поделюсь с вами результатами самых свежих изысканий в этой области.
О спикере
Звиад — разработчик и исследователь распределенных систем, промышленных IoT и высокопроизводительного ПО. Он обожает находиться на острие современных технологий и следить за их практическими и академическими аспектами.
Звиад — магистр МГТУ им Баумана. С 2014 года пишет кандидатскую диссертацию. За этот год выступил уже 21 раз. Обожает вдохновлять и направлять людей на создание сложных и интересных проектов. В свободное время он любит дзюдо, бокс, хоккей и мероприятия на свежем воздухе.
INTERCOM 2016, Москва
Сайт конференции: https://intercomconf.com/
2. Задача
Сделать месседжинг
Быстрый — обработка и доставка сообщений с минимальными задержками
Надежный — гарантированная обработка и доставка сообщений
Безопасный — как для пользователей, так и для системы
Функциональный — поддержка групп, каналов, ботов, передача файлов
3. Задача
Сделать месседжинг
Постоянно доступный — сервис должен быть доступен всегда
Поддерживаемый — не только я должен уметь и понимать как оно работает
Интеграция с существующими решениями
Масштабируемый — во все стороны с минимальными усилиями и затратами
11. XMPP
Extensible Messaging and Presence Protocol
Он же Jabber
Преимущества:
● децентрализация
● открытость
● история
● безопасность
● плагины
Недостатки:
● избыточность
● масштабируемость
● XEP расширения
● формат
● история
Разработан в 1999 г.
XML-based
IM, presence, pub-sub, signaling for VoIP, media transfer, IoT
IETF создает рабочую группу в 2002 и выпускает стандарты
Создание XMPP Standards Foundation
Поддержка плагинов по средствам XEP
13. Whatsapp
Использует XMPP, но:
● сильно кастомизированный сервер ejabberd
● кастомизированный протокол XMPP
Преимущества:
● работает быстро
● поддерживает шифрование по умолчанию
Недостатки:
● привязка к номеру телефона
● нельзя подключить несколько устройств
● отсутствие десктопных клиентов, только Web клиент
● отсутствие нормального API для ботов
14. MQTT
Преимущества:
● простота
● очень легковесный
● масштабируемый
● открытость
Разработан в IBM в 1999 г.
Роялти-фри лицензия
MQTT 3.1.1 был стандартизирован OASIS в 2014
Парадигма publish-subscribe c брокером
Message Queue Telemetry Transport
Недостатки:
● простота
● безопасность
15. MQTT
Message Queue Telemetry Transport
Кто использует:
● Facebook messenger
● IoT, M2M, ...
Реализации:
● Mosquitto
● Eclipse Paho
● emqttd
● Moquette
● m2m.io
● RabbitMQ
● Apache Apollo
● IBM Websphere MQ
● IBM Integration Bus
● IBM MessageSight
● ….
16. Facebook messenger
“One of the problems we experienced was long latency when sending a message.
The method we were using to send was reliable but slow, and there were
limitations on how much we could improve it. With just a few weeks until
launch, we ended up building a new mechanism that maintains a persistent
connection to our servers. To do this without killing battery life, we used a
protocol called MQTT that we had experimented with in Beluga. MQTT is
specifically designed for applications like sending telemetry data to and from
space probes, so it is designed to use bandwidth and batteries sparingly. By
maintaining an MQTT connection and routing messages through our chat pipeline,
we were able to often achieve phone-to-phone delivery in the hundreds of
milliseconds, rather than multiple seconds”
17. AMQP
Advanced Message Queuing Protocol
Преимущества:
● открытость
● большая надежность
● гибкость
● интеропребельность
● безопасность
Недостатки:
● Сложнее MQTT
● Зависят от реализации
● ????
Разработан John O’Hara по заказу JP Morgan Chase & Co в 2003 г.
Бинарный Wire-protocol
Сильная рабочая группа в составе которой: Bank of America,
Barclays, Cisco Systems, Credit Suisse, Deutsche Börse, Goldman
Sachs, INETCO Systems, Informatica, Microsoft, Novell, Red Hat,
Software AG, TWIST VMware….
18. AMQP
Кто использует:
● Банки
● Red Hat
● Google
● Microsoft
● Pivotal
● ….
Реализации:
● RabbitMQ
● Apache ActiveMQ
● Apache Qpid
● StormMQ
Advanced Message Queuing Protocol
19.
20. RabbitMQ
Проект начат LShift и CohesiveFT в 2007 г. Куплен в 2010 SpringSource, VMware.
С мая 2013 г. стал частью Pivotal Software.
Использует возможности Erlang/OTP что обеспечивает:
● надежность и отказоустойчивость
● высокую доступность( Clustering, Federation,
Mirrored Queues)
● гибкую маршрутизацию
● безопасность
● трассировку
● поддеркжку плагинов
● сильное комьюнити
23. RabbitMQ
Типы обменников (exchanges):
● Fanout — всем и сразу
● Direct — связь по ключам маршрутизации
● Topics — связь по составным ключам маршрутизации
● Headers — связь по заголовку сообщения
Опции очередей (queues):
● Durable — сообщения переживают перезагрузки и падения
● Exclusive — строго предназначена для потребителя
● Auto_delete — удаляется если нет активных подключений
● Message TTL, Auto expire, Max length, Max length bytes, Dead letter exchange,
Dead letter routing key, Maximum priority
Гибкая маршрутизация
27. Наше решение
Web SDK
Android SDK
iOS SDK
Gateway
LoadBalancer
Cluster
JavaBackend
DB
DB
Postgres
Redis
Web SDK
Android SDK
iOS SDK
Gateway
Push Notifications Service
Процессинг и
хранение
МаршрутизацияАвторизация Балансировка
28. Наша паранойя
Web SDK
Android SDK
iOS SDK
Gateway
LoadBalancer
Cluster
JavaBackend
DB
DB
Postgres
Redis
Web SDK
Android SDK
iOS SDK
Gateway
Push Notifications Service
TLS/SSLTLS/SSLTLS/SSL TLS/SSL