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

Post on 23-Aug-2014

259 Views

Category:

Internet

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Пара слов про

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

≠WAMP

Windows, Apache, MySQL, PHP

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

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

=WAMP

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

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

Архитектура

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

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

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

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

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

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

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

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

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

Сообщения и полезная нагрузка• [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

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

Транспорт

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

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

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

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

HELLO

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

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

HELLO

WELCOME

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

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

HELLO

WELCOME

ABORT

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

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

HELLO

WELCOME

GOODBYE

ABORT

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

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

HELLO

WELCOME

GOODBYE

ABORT

GOODBYE

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

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

HELLO

WELCOME

GOODBYE

ABORT

GOODBYE

GOODBYE

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

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

HELLO

WELCOME

GOODBYE

ABORT

GOODBYE

GOODBYE

GOODBYE

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

Publish / SubscribePublisher Broker Subscriber

Publish / Subscribe

SUBSCRIBE

Publisher Broker Subscriber

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

Publisher Broker Subscriber

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

ERROR

Publisher Broker Subscriber

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

ERROR

PUBLISH

Publisher Broker Subscriber

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

ERROR

PUBLISH

PUBLISHED

Publisher Broker Subscriber

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

ERROR

PUBLISH

PUBLISHED

ERROR

Publisher Broker Subscriber

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

ERROR

PUBLISH

PUBLISHED

ERROR

EVENT

Publisher Broker Subscriber

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

UNSUBSCRIBE

ERROR

PUBLISH

PUBLISHED

ERROR

EVENT

Publisher Broker Subscriber

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

UNSUBSCRIBE

UNSUBSCRIBED

ERROR

PUBLISH

PUBLISHED

ERROR

EVENT

Publisher Broker Subscriber

Publish / Subscribe

SUBSCRIBE

SUBSCRIBED

UNSUBSCRIBE

UNSUBSCRIBED

ERROR

ERROR

PUBLISH

PUBLISHED

ERROR

EVENT

Publisher Broker Subscriber

Remote Procedure CallsCaller Dealer Callee

Remote Procedure Calls

REGISTER

Caller Dealer Callee

Remote Procedure Calls

REGISTER

REGISTERED

Caller Dealer Callee

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

Caller Dealer Callee

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

Caller Dealer Callee

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

INVOCATION

Caller Dealer Callee

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

INVOCATION

YIELD

Caller Dealer Callee

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

INVOCATION

YIELD

ERROR

Caller Dealer Callee

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

RESULT

INVOCATION

YIELD

ERROR

Caller Dealer Callee

Remote Procedure Calls

REGISTER

REGISTERED

ERROR

CALL

RESULT

INVOCATION

YIELD

ERROR

ERROR

Caller Dealer Callee

Remote Procedure Calls

REGISTER

REGISTERED

UNREGISTER

ERROR

CALL

RESULT

INVOCATION

YIELD

ERROR

ERROR

Caller Dealer Callee

Remote Procedure Calls

REGISTER

REGISTERED

UNREGISTER

UNREGISTERED

ERROR

CALL

RESULT

INVOCATION

YIELD

ERROR

ERROR

Caller Dealer Callee

Remote Procedure Calls

REGISTER

REGISTERED

UNREGISTER

UNREGISTERED

ERROR

ERROR

CALL

RESULT

INVOCATION

YIELD

ERROR

ERROR

Caller Dealer Callee

Профили

• Basic profile • Advanced profile

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

Advanced profile

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

Advanced profile

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

Advanced profile

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

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)

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

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)

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

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’

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

Применение

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

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

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 решений

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

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

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

• 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

Итоги

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

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

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

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

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

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

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

?

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

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

• Mail: kostik@ksdaemon.ru • Twitter: @KSDaemon • GitHub: KSDaemon • Blog: blog.ksdaemon.ru

top related