Выбор backend для messaging в 2016 году

Preview:

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

Whatsapp

Использует 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

Recommended