30
Zviad Kardava Google Developer Expert IoT Voximplant Lead Software Engineer Выбор backend для messaging в 2016 году

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

Embed Size (px)

Citation preview

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

Zviad Kardava

Google Developer Expert IoTVoximplant Lead Software Engineer

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

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

Задача

Сделать месседжинг

Быстрый — обработка и доставка сообщений с минимальными задержками

Надежный — гарантированная обработка и доставка сообщений

Безопасный — как для пользователей, так и для системы

Функциональный — поддержка групп, каналов, ботов, передача файлов

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

Задача

Сделать месседжинг

Постоянно доступный — сервис должен быть доступен всегда

Поддерживаемый — не только я должен уметь и понимать как оно работает

Интеграция с существующими решениями

Масштабируемый — во все стороны с минимальными усилиями и затратами

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

Нельзя просто так взять

и запилить хороший месседжинг

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

Протоколы, фреймворки, брокеры

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

XKCD

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

Архитектура

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

Современные методологии

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

Архитектура

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

Protocols, Frameworks, Brokers

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

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

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

XMPP

Реализации: ejabberdCommuniGate ProOpenfireProsodyjabberd2Tigase

Кто использует:Whatsapp Google TalkLivejournalOkRiot games...

Extensible Messaging and Presence Protocol Он же Jabber

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

Whatsapp

Использует XMPP, но: ● сильно кастомизированный сервер ejabberd● кастомизированный протокол XMPP

Преимущества:● работает быстро ● поддерживает шифрование по умолчанию

Недостатки:● привязка к номеру телефона ● нельзя подключить несколько устройств ● отсутствие десктопных клиентов, только Web клиент● отсутствие нормального API для ботов

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

MQTT

Преимущества: ● простота● очень легковесный● масштабируемый● открытость

Разработан в IBM в 1999 г.Роялти-фри лицензияMQTT 3.1.1 был стандартизирован OASIS в 2014 Парадигма publish-subscribe c брокером

Message Queue Telemetry Transport

Недостатки:● простота● безопасность

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

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● ….

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

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”

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

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….

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

AMQP

Кто использует:● Банки● Red Hat● Google● Microsoft● Pivotal● ….

Реализации:● RabbitMQ● Apache ActiveMQ● Apache Qpid● StormMQ

Advanced Message Queuing Protocol

Page 19: Выбор backend для messaging в 2016 году
Page 20: Выбор backend для messaging в 2016 году

RabbitMQ

Проект начат LShift и CohesiveFT в 2007 г. Куплен в 2010 SpringSource, VMware.С мая 2013 г. стал частью Pivotal Software.

Использует возможности Erlang/OTP что обеспечивает:

● надежность и отказоустойчивость● высокую доступность( Clustering, Federation,

Mirrored Queues)● гибкую маршрутизацию● безопасность● трассировку● поддеркжку плагинов● сильное комьюнити

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

Почему RabbitMQ ???

Клиенты:● C/C++● Java● Erlang● Javascript● PHP● Python● etc… даже haskell, lisp, ocaml and COBOL (O_o)

Мультипрокрольный: ● AMQP● MQTT● XMPP● HTTP● STOMP

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

Простой пример

Publisher ConsumerExchange QueueRoute RouteRoute

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

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

Гибкая маршрутизация

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

Другие примеры

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

Ещё примеры

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

Over 9000!!!

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

Наше решение

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

Процессинг и хранение

МаршрутизацияАвторизация Балансировка

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

Наша паранойя

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

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

Enterprise service bus

Enterprise Service Bus

Service

Service

Service

Service

Service

Logs

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

twitter: @zviadkardavatelegram: @zviadkardava

Thank You!

facebook: Zviad Kardavagoogle+: +zviadkardava