Upload
voximplant
View
53
Download
2
Embed Size (px)
Citation preview
Zviad Kardava
Google Developer Expert IoTVoximplant Lead Software Engineer
Выбор backend для messaging в 2016 году
Задача
Сделать месседжинг
Быстрый — обработка и доставка сообщений с минимальными задержками
Надежный — гарантированная обработка и доставка сообщений
Безопасный — как для пользователей, так и для системы
Функциональный — поддержка групп, каналов, ботов, передача файлов
Задача
Сделать месседжинг
Постоянно доступный — сервис должен быть доступен всегда
Поддерживаемый — не только я должен уметь и понимать как оно работает
Интеграция с существующими решениями
Масштабируемый — во все стороны с минимальными усилиями и затратами
Нельзя просто так взять
и запилить хороший месседжинг
Протоколы, фреймворки, брокеры
XKCD
Архитектура
Современные методологии
Архитектура
Protocols, Frameworks, Brokers
XMPP
Extensible Messaging and Presence Protocol Он же Jabber
Преимущества: ● децентрализация● открытость● история● безопасность● плагины
Недостатки:● избыточность ● масштабируемость● XEP расширения● формат● история
Разработан в 1999 г.XML-basedIM, presence, pub-sub, signaling for VoIP, media transfer, IoTIETF создает рабочую группу в 2002 и выпускает стандарты Создание XMPP Standards FoundationПоддержка плагинов по средствам XEP
XMPP
Реализации: ejabberdCommuniGate ProOpenfireProsodyjabberd2Tigase
Кто использует:Whatsapp Google TalkLivejournalOkRiot games...
Extensible Messaging and Presence Protocol Он же Jabber
Использует XMPP, но: ● сильно кастомизированный сервер ejabberd● кастомизированный протокол XMPP
Преимущества:● работает быстро ● поддерживает шифрование по умолчанию
Недостатки:● привязка к номеру телефона ● нельзя подключить несколько устройств ● отсутствие десктопных клиентов, только Web клиент● отсутствие нормального API для ботов
MQTT
Преимущества: ● простота● очень легковесный● масштабируемый● открытость
Разработан в IBM в 1999 г.Роялти-фри лицензияMQTT 3.1.1 был стандартизирован OASIS в 2014 Парадигма publish-subscribe c брокером
Message Queue Telemetry Transport
Недостатки:● простота● безопасность
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● ….
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”
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….
AMQP
Кто использует:● Банки● Red Hat● Google● Microsoft● Pivotal● ….
Реализации:● RabbitMQ● Apache ActiveMQ● Apache Qpid● StormMQ
Advanced Message Queuing Protocol
RabbitMQ
Проект начат LShift и CohesiveFT в 2007 г. Куплен в 2010 SpringSource, VMware.С мая 2013 г. стал частью Pivotal Software.
Использует возможности Erlang/OTP что обеспечивает:
● надежность и отказоустойчивость● высокую доступность( Clustering, Federation,
Mirrored Queues)● гибкую маршрутизацию● безопасность● трассировку● поддеркжку плагинов● сильное комьюнити
Почему RabbitMQ ???
Клиенты:● C/C++● Java● Erlang● Javascript● PHP● Python● etc… даже haskell, lisp, ocaml and COBOL (O_o)
Мультипрокрольный: ● AMQP● MQTT● XMPP● HTTP● STOMP
Простой пример
Publisher ConsumerExchange QueueRoute RouteRoute
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
Гибкая маршрутизация
Другие примеры
Ещё примеры
Over 9000!!!
Наше решение
Web SDK
Android SDK
iOS SDK
Gat
eway
Load
Bal
ance
r
Cluster
Java
Bac
kend
DB
DB
Postgres
Redis
Web SDK
Android SDK
iOS SDK
Gat
eway
Push Notifications Service
Процессинг и хранение
МаршрутизацияАвторизация Балансировка
Наша паранойя
Web SDK
Android SDK
iOS SDK
Gat
eway
Load
Bal
ance
r
Cluster
Java
Bac
kend
DB
DB
Postgres
Redis
Web SDK
Android SDK
iOS SDK
Gat
eway
Push Notifications Service
TLS/SSLTLS/SSLTLS/SSL TLS/SSL
Enterprise service bus
Enterprise Service Bus
Service
Service
Service
Service
Service
Logs
twitter: @zviadkardavatelegram: @zviadkardava
Thank You!
facebook: Zviad Kardavagoogle+: +zviadkardava