Пара слов про WAMP — Константин Буркалев — MoscowJS 13

71
Пара слов про Константин Буркалёв, @KSDaemon MoscowJS, июль 2014

description

Небольшой доклад о протоколе WAMP, его устройстве и архитектуре. А так же о применении в современных веб-приложениях.

Transcript of Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Page 1: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Пара слов про

Константин Буркалёв, @KSDaemonMoscowJS, июль 2014

Page 2: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

≠WAMP

Windows, Apache, MySQL, PHP

Page 3: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Протокол прикладного уровня, 1реализует 2 паттерна:

• Publish/Subscribe (PubSub)1• Remote Procedure Calls (RPC)

=WAMP

Page 4: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Основные компоненты и понятия

• Идентификаторы ресурсов • Транспорт • Сериализатор • Сессия • Realm - домен, namespace • Peer, узел • Клиент • Роутер • Роль

Page 5: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Архитектура

Page 6: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Идентификаторы ресурсов

• Подписок • Процедур • Ошибок

Необходимы для:

Представляют собой URI• system.send.file • chat.message • users.admins.message • user.profile.updated

Page 7: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Сериализация и типы данных

• integer • string • bool • list (array) • dict

Поддерживаемые сериализаторы:• JSON • MsgPack

Поддерживаемые типы данных:Обязательные: Дополнительно:

любые, зависит от поддержки в сериализаторе

Page 8: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Сообщения и полезная нагрузка• [HELLO,  Realm|uri,  Details|dict]  1

• [PUBLISH,  Request|id,  Options|dict,  Topic|uri]  • [PUBLISH,  Request|id,  Options|dict,  Topic|uri,  Arguments|list]  • [PUBLISH,  Request|id,  Options|dict,  Topic|uri,  Arguments|list,  ArgumentsKw|dict]  1

• [CALL,  Request|id,  Options|dict,  Procedure|uri]  • [CALL,  Request|id,  Options|dict,  Procedure|uri,  Arguments|list]  • [CALL,  Request|id,  Options|dict,  Procedure|uri,  Arguments|list,  ArgumentsKw|dict]  1

• [RESULT,  CALL.Request|id,  Details|dict]  • [RESULT,  CALL.Request|id,  Details|dict,  YIELD.Arguments|list]  • [RESULT,  CALL.Request|id,  Details|dict,  YIELD.Arguments|list,  YIELD.ArgumentsKw|dict]

• Массивов | Array | List • Словарей | Hash-table | Dictionary

Параметры-данные могут быть в виде:

Page 9: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Транспорт

• Websocket • Raw TCP • HTTP long-polling (в разработке) • Unix sockets

• В основе лежат сообщения • Сообщения упорядочены • Двунаправленный обмен сообщениями

Page 10: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Транспорт и сессияКлиент Роутер

Page 11: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Транспорт и сессия

HELLO

Клиент Роутер

Page 12: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Транспорт и сессия

HELLO

WELCOME

Клиент Роутер

Page 13: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Транспорт и сессия

HELLO

WELCOME

ABORT

Клиент Роутер

Page 14: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Транспорт и сессия

HELLO

WELCOME

GOODBYE

ABORT

Клиент Роутер

Page 15: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Транспорт и сессия

HELLO

WELCOME

GOODBYE

ABORT

GOODBYE

Клиент Роутер

Page 16: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Транспорт и сессия

HELLO

WELCOME

GOODBYE

ABORT

GOODBYE

GOODBYE

Клиент Роутер

Page 17: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Транспорт и сессия

HELLO

WELCOME

GOODBYE

ABORT

GOODBYE

GOODBYE

GOODBYE

Клиент Роутер

Page 18: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Publish / SubscribePublisher Broker Subscriber

Page 19: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Publish / Subscribe

SUBSCRIBE

Publisher Broker Subscriber

Page 20: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

Publisher Broker Subscriber

Page 21: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

ERROR

Publisher Broker Subscriber

Page 22: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

ERROR

PUBLISH

Publisher Broker Subscriber

Page 23: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

ERROR

PUBLISH

PUBLISHED

Publisher Broker Subscriber

Page 24: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

ERROR

PUBLISH

PUBLISHED

ERROR

Publisher Broker Subscriber

Page 25: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

ERROR

PUBLISH

PUBLISHED

ERROR

EVENT

Publisher Broker Subscriber

Page 26: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

UNSUBSCRIBE

ERROR

PUBLISH

PUBLISHED

ERROR

EVENT

Publisher Broker Subscriber

Page 27: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

UNSUBSCRIBE

UNSUBSCRIBED

ERROR

PUBLISH

PUBLISHED

ERROR

EVENT

Publisher Broker Subscriber

Page 28: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

UNSUBSCRIBE

UNSUBSCRIBED

ERROR

ERROR

PUBLISH

PUBLISHED

ERROR

EVENT

Publisher Broker Subscriber

Page 29: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure CallsCaller Dealer Callee

Page 30: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

Caller Dealer Callee

Page 31: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

REGISTERED

Caller Dealer Callee

Page 32: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

Caller Dealer Callee

Page 33: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

Caller Dealer Callee

Page 34: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

INVOCATION

Caller Dealer Callee

Page 35: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

INVOCATION

YIELD

Caller Dealer Callee

Page 36: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

INVOCATION

YIELD

ERROR

Caller Dealer Callee

Page 37: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

RESULT

INVOCATION

YIELD

ERROR

Caller Dealer Callee

Page 38: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

RESULT

INVOCATION

YIELD

ERROR

ERROR

Caller Dealer Callee

Page 39: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

REGISTERED

UNREGISTER

ERROR

CALL

RESULT

INVOCATION

YIELD

ERROR

ERROR

Caller Dealer Callee

Page 40: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

REGISTERED

UNREGISTER

UNREGISTERED

ERROR

CALL

RESULT

INVOCATION

YIELD

ERROR

ERROR

Caller Dealer Callee

Page 41: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Remote Procedure Calls

REGISTER

REGISTERED

UNREGISTER

UNREGISTERED

ERROR

ERROR

CALL

RESULT

INVOCATION

YIELD

ERROR

ERROR

Caller Dealer Callee

Page 42: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Профили

• Basic profile • Advanced profile

Набор функциональных возможностей в рамках каждого паттерна (PubSub, RPC)

Page 43: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Advanced profile

• Управление сессией • Аутентификация • Heartbeat

Page 44: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Advanced profile

• Publish / Subscribe • белый и черный списки • идентификация издателя • подписки по паттернам • метасобытия • список подписчиков • список событий

Page 45: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Advanced profile

• Remote Procedure Calls • белый и черный списки • идентификация вызывающего • регистрация RPC по паттернам • отмена выполнения • прогрессивное выполнение

Page 46: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 47: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

subscribe to ‘ready.for.chat’

subscribe to ‘ready.for.chat’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 48: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

subscribe to ‘chat.taken’

subscribe to ‘chat.taken’

Page 49: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

subscribe to ‘user.chat.id1235’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 50: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

publish event to ‘ready.for.chat’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 51: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

receive event in ‘ready.for.chat’

receive event in ‘ready.for.chat’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 52: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

publish event to ‘chat.taken’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 53: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

receive event in ‘chat.taken’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 54: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

publish event to ‘user.chat.id1235’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 55: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

receive event in ‘user.chat.id1235’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 56: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

subscribe to ‘user.chat.id2425’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 57: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

publish event to ‘ready.for.chat’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 58: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

receive event in ‘ready.for.chat’

receive event in ‘ready.for.chat’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 59: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

publish event to ‘chat.taken’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 60: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

receive event in ‘chat.taken’WAMP Router

(realm 2)

ПрименениеОнлайн-консультант

Page 61: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

publish event to ‘user.chat.id2425’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 62: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

receive event in ‘user.chat.id2425’

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 63: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Browser

Embedded app

client

Browser

Embedded app

client

Browser

Backoffice app

client

Browser

Backoffice app

client

WAMP Router(realm 1)

Browser

Embedded app

client

Browser

Embedded app

client

WAMP Router(realm 2)

ПрименениеОнлайн-консультант

Page 64: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Применение

Browser

Browser

Server side infrastructure

WAMP Router

Mobile

Desktop

REGI

STER

RPC

REG

ISTE

R RP

C REGISTER RPC

SUBSCRIBE to TOPICs

Internal service 1

SUBSCRIBE to TOPICs

Internal service 2

Internal service 3

Frontoffice app

client

Frontoffice app

client

CRUDN

gin

x /

HAPr

oxy

CRUD

CRUDBackoffice

appclient

SUBSCRIBE to TOPICs

PUBLISH Event PUBL

ISH

Even

t

CALL RPCs

Ngin

x /

HAPr

oxy

Backoffice app

client

DB

CRUD CRUD

Backoffice appserverside

Frontoffice appserverside

Большое интеграционное решение

Page 65: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Prov

ides R

PC

Publ

ish e

vent

s

Subscribe to topicsProv

ides

RPC

Publish events

Service Provider 1

Service Provider 2

Service Provider 3

Service Provider 4

Service Provider 5

Publish events

WAMP Router(realm 1, realm 2, realm 3, ....)

Call R

PC

Call RPC

Subs

cribe

to to

pics

Publ

ish e

vent

s

Consumer 1 Consumer 2 Consumer 3 Consumer 4 Consumer 5

ПрименениеWAMP как основа композитных SOA решений

Page 66: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

ПрименениеWAMP как основа композитных SOA решений

• Унифицированная сервисная шина • Асинхронное выполнение процедур • Стандартизация интерфейсов взаимодействия • Минимальные накладные расходы • Гибкая инфраструктура • Изолированность и слабая связанность сервисов • Легкость подключения новых сервисов

Page 67: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Существующие реализации

• JavaScriptA• Autobahn|JS (browser, node.js) • Wampy.js (browser)

• JavaA• Autobahn|Android (скоро)

• .NETA• WampSharp (в процессе)

• PHPA• Thurway

Клиентские библиотеки• PythonA

• Autobahn|Python • C++A

• Autobahn|Cpp • ErlangA

• Erwa • Objective-CA

• MDWamp • Lua (в процессе)

Роутеры• PythonA

• Autobahn|Python • Crossbar.io

• ErlangA• Erwa

• PHPA• Thurway

• LuaA• Wiola

Page 68: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Итоги

• Простой и открытый протокол • RPC + PubSub из коробки • Унифицированная маршрутизация • Транспорт и сериализация на любой вкус • Минимальные накладные расходы • Нативное использование в веб-приложениях • Позволяет строить распределенные приложения со слабым связыванием компонентов

• Множество реализаций на разных языках • Open source & комьюнити

Page 69: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Полезные ссылки

• http://wamp.wsA• Описание • Спецификация • Реализации

• https://groups.google.com/group/wampws • http://autobahn.ws • https://github.com/crossbario/crossbar/wiki

• Crossbar.io • Примеры клиентов на разных языках

Page 70: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Вот и все!1Но, возможно, есть вопросы

?

Page 71: Пара слов про WAMP — Константин Буркалев — MoscowJS 13

Константин Буркалёв

Спасибо за внимание!

• Mail: [email protected] • Twitter: @KSDaemon • GitHub: KSDaemon • Blog: blog.ksdaemon.ru