SlideShare ist ein Scribd-Unternehmen logo
1 von 71
Downloaden Sie, um offline zu lesen
Пара слов про 
MoscowJS, июль 2014 Константин Буркалёв, @KSDaemon
WAMP 
≠ 
Windows, Apache, 
MySQL, PHP
WAMP 
= 
Протокол прикладного уровня, 1 
реализует 2 паттерна: 
• Publish/Subscribe (PubSub)1 
• Remote Procedure Calls (RPC)
Основные компоненты и понятия 
• Идентификаторы ресурсов 
• Транспорт 
• Сериализатор 
• Сессия 
• Realm - домен, namespace 
• Peer — узел 
• Клиент 
• Роутер 
• Роль
Архитектура
Идентификаторы ресурсов 
Необходимы для: 
• Подписок 
• Процедур 
• Ошибок 
Представляют собой URI 
• system.send.file 
• chat.message 
• users.admins.message 
• user.profile.updated
Сериализация и типы данных 
Поддерживаемые сериализаторы: 
• JSON • MsgPack 
Поддерживаемые типы данных: 
Обязательные: Дополнительно: 
• integer 
• string 
• bool 
• list (array) 
• dict 
любые, зависит 
от поддержки в 
сериализаторе
Сообщения и полезная нагрузка 
• [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 
ABORT 
GOODBYE
Транспорт и сессия 
Клиент Роутер 
HELLO 
WELCOME 
ABORT 
GOODBYE 
GOODBYE
Транспорт и сессия 
Клиент Роутер 
HELLO 
WELCOME 
ABORT 
GOODBYE 
GOODBYE 
GOODBYE
Транспорт и сессия 
Клиент Роутер 
HELLO 
WELCOME 
ABORT 
GOODBYE 
GOODBYE 
GOODBYE 
GOODBYE
Publish / Subscribe 
Publisher Broker Subscriber
Publish / Subscribe 
Publisher Broker Subscriber 
SUBSCRIBE
Publish / Subscribe 
Publisher Broker Subscriber 
SUBSCRIBE 
SUBSCRIBED
Publish / Subscribe 
Publisher Broker Subscriber 
SUBSCRIBE 
SUBSCRIBED 
ERROR
Publish / Subscribe 
Publisher Broker Subscriber 
SUBSCRIBE 
SUBSCRIBED 
ERROR 
PUBLISH
Publish / Subscribe 
Publisher Broker Subscriber 
SUBSCRIBE 
SUBSCRIBED 
ERROR 
PUBLISH 
PUBLISHED
Publish / Subscribe 
Publisher Broker Subscriber 
SUBSCRIBE 
SUBSCRIBED 
ERROR 
PUBLISH 
PUBLISHED 
ERROR
Publish / Subscribe 
Publisher Broker Subscriber 
SUBSCRIBE 
SUBSCRIBED 
ERROR 
PUBLISH 
PUBLISHED 
ERROR 
EVENT
Publish / Subscribe 
Publisher Broker Subscriber 
SUBSCRIBE 
SUBSCRIBED 
ERROR 
UNSUBSCRIBE 
PUBLISH 
PUBLISHED 
ERROR 
EVENT
Publish / Subscribe 
Publisher Broker Subscriber 
SUBSCRIBE 
SUBSCRIBED 
ERROR 
UNSUBSCRIBE 
UNSUBSCRIBED 
PUBLISH 
PUBLISHED 
ERROR 
EVENT
Publish / Subscribe 
Publisher Broker Subscriber 
SUBSCRIBE 
SUBSCRIBED 
ERROR 
UNSUBSCRIBE 
UNSUBSCRIBED 
ERROR 
PUBLISH 
PUBLISHED 
ERROR 
EVENT
Remote Procedure Calls 
Caller Dealer Callee
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER 
REGISTERED
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER 
REGISTERED 
ERROR
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER 
REGISTERED 
ERROR 
CALL
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER 
REGISTERED 
ERROR 
CALL 
INVOCATION
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER 
REGISTERED 
ERROR 
CALL 
INVOCATION 
YIELD
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER 
REGISTERED 
ERROR 
CALL 
INVOCATION 
YIELD 
ERROR
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER 
REGISTERED 
ERROR 
CALL 
RESULT 
INVOCATION 
YIELD 
ERROR
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER 
REGISTERED 
ERROR 
CALL 
RESULT 
INVOCATION 
YIELD 
ERROR 
ERROR
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER 
REGISTERED 
ERROR 
UNREGISTER 
CALL 
RESULT 
INVOCATION 
YIELD 
ERROR 
ERROR
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER 
REGISTERED 
ERROR 
UNREGISTER 
UNREGISTERED 
CALL 
RESULT 
INVOCATION 
YIELD 
ERROR 
ERROR
Remote Procedure Calls 
Caller Dealer Callee 
REGISTER 
REGISTERED 
ERROR 
UNREGISTER 
UNREGISTERED 
ERROR 
CALL 
RESULT 
INVOCATION 
YIELD 
ERROR 
ERROR
Профили 
Набор функциональных возможностей 
в рамках каждого паттерна (PubSub, RPC) 
• Basic profile 
• Advanced profile
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 
SUBSCRIBE to TOPICs 
REGISTER RPC 
REGISTER RPC 
REGISTER RPC 
SUBSCRIBE to TOPICs 
Internal 
service 1 
Internal 
service 2 
Internal 
service 3 
Frontoffice 
app 
client 
Frontoffice 
app 
client 
CRUD 
Nginx / HAProxy 
CRUD 
CRUD 
Backoffice 
app 
client SUBSCRIBE to TOPICs 
PUBLISH Event 
PUBLISH Event 
CALL RPCs 
Nginx / HAProxy 
Backoffice 
app 
client 
DB 
CRUD 
CRUD 
Backoffice app 
serverside 
Frontoffice app 
serverside
Consumer 1 Consumer 2 Consumer 3 Consumer 4 Consumer 5 
Provides RPC 
Call RPC 
Publish events 
Subscribe to topics 
Call RPC 
Provides 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, ....) 
Subscribe to topics 
Publish events 
Применение 
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

Weitere ähnliche Inhalte

Ähnlich wie Пара слов про WAMP

Как мы поддерживаем 100 разных версий клиентов в Badoo / Ярослав Голуб (Badoo)
Как мы поддерживаем 100 разных версий клиентов в Badoo / Ярослав Голуб (Badoo)Как мы поддерживаем 100 разных версий клиентов в Badoo / Ярослав Голуб (Badoo)
Как мы поддерживаем 100 разных версий клиентов в Badoo / Ярослав Голуб (Badoo)Ontico
 
Ivideon - умное облачное видеонаблюдение через Интернет
Ivideon - умное облачное видеонаблюдение через ИнтернетIvideon - умное облачное видеонаблюдение через Интернет
Ivideon - умное облачное видеонаблюдение через ИнтернетIvideon
 
JPoint 2017 - Where is my service, dude?
JPoint 2017 - Where is my service, dude?JPoint 2017 - Where is my service, dude?
JPoint 2017 - Where is my service, dude?Viet Nguyen
 
Igor Karpenko "Development of multi-process runtime applications in PHP"
Igor Karpenko "Development of multi-process runtime applications in PHP"Igor Karpenko "Development of multi-process runtime applications in PHP"
Igor Karpenko "Development of multi-process runtime applications in PHP"Fwdays
 
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...Ontico
 
CallbackHELPER презентация сервиса
CallbackHELPER презентация сервисаCallbackHELPER презентация сервиса
CallbackHELPER презентация сервисаCallBackHELPER
 
KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RAD...
KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RAD...KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RAD...
KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RAD...SIPLABS Communications
 
Новые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGНовые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGCisco Russia
 
AdRiver для агентств и рекламодателей 2015
AdRiver для агентств и рекламодателей 2015AdRiver для агентств и рекламодателей 2015
AdRiver для агентств и рекламодателей 2015AdRiver
 
Опыт разработки сервиса с асинхронным API на kafka
Опыт разработки сервиса с асинхронным API на kafkaОпыт разработки сервиса с асинхронным API на kafka
Опыт разработки сервиса с асинхронным API на kafkaSergey Zaika
 
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системыОмские ИТ-субботники
 
Cisco Meeting Server
Cisco Meeting ServerCisco Meeting Server
Cisco Meeting ServerCisco Russia
 
Queue metrics решение для мониторинга колл-центров на базе asterisk
Queue metrics   решение для мониторинга колл-центров на базе asteriskQueue metrics   решение для мониторинга колл-центров на базе asterisk
Queue metrics решение для мониторинга колл-центров на базе asteriskVladimir Dudchenko
 
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...Mail.ru Group
 
Изоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабированиеИзоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабированиеDenis Izmaylov
 
Клиентские приложения под нагрузкой, Андрей Смирнов
Клиентские приложения под нагрузкой, Андрей СмирновКлиентские приложения под нагрузкой, Андрей Смирнов
Клиентские приложения под нагрузкой, Андрей СмирновOntico
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Andrey Smirnov
 
РИФ 2016, Программатик-симбиоз площадки и рекламодателя: как получить максиму...
РИФ 2016, Программатик-симбиоз площадки и рекламодателя: как получить максиму...РИФ 2016, Программатик-симбиоз площадки и рекламодателя: как получить максиму...
РИФ 2016, Программатик-симбиоз площадки и рекламодателя: как получить максиму...Тарасов Константин
 
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Mail.ru Group
 
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest
 

Ähnlich wie Пара слов про WAMP (20)

Как мы поддерживаем 100 разных версий клиентов в Badoo / Ярослав Голуб (Badoo)
Как мы поддерживаем 100 разных версий клиентов в Badoo / Ярослав Голуб (Badoo)Как мы поддерживаем 100 разных версий клиентов в Badoo / Ярослав Голуб (Badoo)
Как мы поддерживаем 100 разных версий клиентов в Badoo / Ярослав Голуб (Badoo)
 
Ivideon - умное облачное видеонаблюдение через Интернет
Ivideon - умное облачное видеонаблюдение через ИнтернетIvideon - умное облачное видеонаблюдение через Интернет
Ivideon - умное облачное видеонаблюдение через Интернет
 
JPoint 2017 - Where is my service, dude?
JPoint 2017 - Where is my service, dude?JPoint 2017 - Where is my service, dude?
JPoint 2017 - Where is my service, dude?
 
Igor Karpenko "Development of multi-process runtime applications in PHP"
Igor Karpenko "Development of multi-process runtime applications in PHP"Igor Karpenko "Development of multi-process runtime applications in PHP"
Igor Karpenko "Development of multi-process runtime applications in PHP"
 
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
 
CallbackHELPER презентация сервиса
CallbackHELPER презентация сервисаCallbackHELPER презентация сервиса
CallbackHELPER презентация сервиса
 
KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RAD...
KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RAD...KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RAD...
KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RAD...
 
Новые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGНовые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNG
 
AdRiver для агентств и рекламодателей 2015
AdRiver для агентств и рекламодателей 2015AdRiver для агентств и рекламодателей 2015
AdRiver для агентств и рекламодателей 2015
 
Опыт разработки сервиса с асинхронным API на kafka
Опыт разработки сервиса с асинхронным API на kafkaОпыт разработки сервиса с асинхронным API на kafka
Опыт разработки сервиса с асинхронным API на kafka
 
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
 
Cisco Meeting Server
Cisco Meeting ServerCisco Meeting Server
Cisco Meeting Server
 
Queue metrics решение для мониторинга колл-центров на базе asterisk
Queue metrics   решение для мониторинга колл-центров на базе asteriskQueue metrics   решение для мониторинга колл-центров на базе asterisk
Queue metrics решение для мониторинга колл-центров на базе asterisk
 
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...
 
Изоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабированиеИзоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабирование
 
Клиентские приложения под нагрузкой, Андрей Смирнов
Клиентские приложения под нагрузкой, Андрей СмирновКлиентские приложения под нагрузкой, Андрей Смирнов
Клиентские приложения под нагрузкой, Андрей Смирнов
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)
 
РИФ 2016, Программатик-симбиоз площадки и рекламодателя: как получить максиму...
РИФ 2016, Программатик-симбиоз площадки и рекламодателя: как получить максиму...РИФ 2016, Программатик-симбиоз площадки и рекламодателя: как получить максиму...
РИФ 2016, Программатик-симбиоз площадки и рекламодателя: как получить максиму...
 
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
 
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
 

Пара слов про WAMP

  • 1. Пара слов про MoscowJS, июль 2014 Константин Буркалёв, @KSDaemon
  • 2. WAMP ≠ Windows, Apache, MySQL, PHP
  • 3. WAMP = Протокол прикладного уровня, 1 реализует 2 паттерна: • Publish/Subscribe (PubSub)1 • Remote Procedure Calls (RPC)
  • 4. Основные компоненты и понятия • Идентификаторы ресурсов • Транспорт • Сериализатор • Сессия • Realm - домен, namespace • Peer — узел • Клиент • Роутер • Роль
  • 6. Идентификаторы ресурсов Необходимы для: • Подписок • Процедур • Ошибок Представляют собой URI • system.send.file • chat.message • users.admins.message • user.profile.updated
  • 7. Сериализация и типы данных Поддерживаемые сериализаторы: • JSON • MsgPack Поддерживаемые типы данных: Обязательные: Дополнительно: • integer • string • bool • list (array) • dict любые, зависит от поддержки в сериализаторе
  • 8. Сообщения и полезная нагрузка • [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
  • 9. Транспорт • В основе лежат сообщения • Сообщения упорядочены • Двунаправленный обмен сообщениями • Websocket • Raw TCP • HTTP long-polling (в разработке) • Unix sockets
  • 10. Транспорт и сессия Клиент Роутер
  • 11. Транспорт и сессия Клиент Роутер HELLO
  • 12. Транспорт и сессия Клиент Роутер HELLO WELCOME
  • 13. Транспорт и сессия Клиент Роутер HELLO WELCOME ABORT
  • 14. Транспорт и сессия Клиент Роутер HELLO WELCOME ABORT GOODBYE
  • 15. Транспорт и сессия Клиент Роутер HELLO WELCOME ABORT GOODBYE GOODBYE
  • 16. Транспорт и сессия Клиент Роутер HELLO WELCOME ABORT GOODBYE GOODBYE GOODBYE
  • 17. Транспорт и сессия Клиент Роутер HELLO WELCOME ABORT GOODBYE GOODBYE GOODBYE GOODBYE
  • 18. Publish / Subscribe Publisher Broker Subscriber
  • 19. Publish / Subscribe Publisher Broker Subscriber SUBSCRIBE
  • 20. Publish / Subscribe Publisher Broker Subscriber SUBSCRIBE SUBSCRIBED
  • 21. Publish / Subscribe Publisher Broker Subscriber SUBSCRIBE SUBSCRIBED ERROR
  • 22. Publish / Subscribe Publisher Broker Subscriber SUBSCRIBE SUBSCRIBED ERROR PUBLISH
  • 23. Publish / Subscribe Publisher Broker Subscriber SUBSCRIBE SUBSCRIBED ERROR PUBLISH PUBLISHED
  • 24. Publish / Subscribe Publisher Broker Subscriber SUBSCRIBE SUBSCRIBED ERROR PUBLISH PUBLISHED ERROR
  • 25. Publish / Subscribe Publisher Broker Subscriber SUBSCRIBE SUBSCRIBED ERROR PUBLISH PUBLISHED ERROR EVENT
  • 26. Publish / Subscribe Publisher Broker Subscriber SUBSCRIBE SUBSCRIBED ERROR UNSUBSCRIBE PUBLISH PUBLISHED ERROR EVENT
  • 27. Publish / Subscribe Publisher Broker Subscriber SUBSCRIBE SUBSCRIBED ERROR UNSUBSCRIBE UNSUBSCRIBED PUBLISH PUBLISHED ERROR EVENT
  • 28. Publish / Subscribe Publisher Broker Subscriber SUBSCRIBE SUBSCRIBED ERROR UNSUBSCRIBE UNSUBSCRIBED ERROR PUBLISH PUBLISHED ERROR EVENT
  • 29. Remote Procedure Calls Caller Dealer Callee
  • 30. Remote Procedure Calls Caller Dealer Callee REGISTER
  • 31. Remote Procedure Calls Caller Dealer Callee REGISTER REGISTERED
  • 32. Remote Procedure Calls Caller Dealer Callee REGISTER REGISTERED ERROR
  • 33. Remote Procedure Calls Caller Dealer Callee REGISTER REGISTERED ERROR CALL
  • 34. Remote Procedure Calls Caller Dealer Callee REGISTER REGISTERED ERROR CALL INVOCATION
  • 35. Remote Procedure Calls Caller Dealer Callee REGISTER REGISTERED ERROR CALL INVOCATION YIELD
  • 36. Remote Procedure Calls Caller Dealer Callee REGISTER REGISTERED ERROR CALL INVOCATION YIELD ERROR
  • 37. Remote Procedure Calls Caller Dealer Callee REGISTER REGISTERED ERROR CALL RESULT INVOCATION YIELD ERROR
  • 38. Remote Procedure Calls Caller Dealer Callee REGISTER REGISTERED ERROR CALL RESULT INVOCATION YIELD ERROR ERROR
  • 39. Remote Procedure Calls Caller Dealer Callee REGISTER REGISTERED ERROR UNREGISTER CALL RESULT INVOCATION YIELD ERROR ERROR
  • 40. Remote Procedure Calls Caller Dealer Callee REGISTER REGISTERED ERROR UNREGISTER UNREGISTERED CALL RESULT INVOCATION YIELD ERROR ERROR
  • 41. Remote Procedure Calls Caller Dealer Callee REGISTER REGISTERED ERROR UNREGISTER UNREGISTERED ERROR CALL RESULT INVOCATION YIELD ERROR ERROR
  • 42. Профили Набор функциональных возможностей в рамках каждого паттерна (PubSub, RPC) • Basic profile • Advanced profile
  • 43. Advanced profile • Управление сессией • Аутентификация • Heartbeat
  • 44. Advanced profile • Publish / Subscribe • белый и черный списки • идентификация издателя • подписки по паттернам • метасобытия • список подписчиков • список событий
  • 45. Advanced profile • Remote Procedure Calls • белый и черный списки • идентификация вызывающего • регистрация RPC по паттернам • отмена выполнения • прогрессивное выполнение
  • 46. Применение Онлайн-консультант 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)
  • 47. Применение Онлайн-консультант 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)
  • 48. Применение Онлайн-консультант 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’
  • 49. Применение Онлайн-консультант 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)
  • 50. Применение Онлайн-консультант 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)
  • 51. Применение Онлайн-консультант 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)
  • 52. Применение Онлайн-консультант 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)
  • 53. Применение Онлайн-консультант 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)
  • 54. Применение Онлайн-консультант 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)
  • 55. Применение Онлайн-консультант 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)
  • 56. Применение Онлайн-консультант 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)
  • 57. Применение Онлайн-консультант 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)
  • 58. Применение Онлайн-консультант 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)
  • 59. Применение Онлайн-консультант 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)
  • 60. Применение Онлайн-консультант 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)
  • 61. Применение Онлайн-консультант 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)
  • 62. Применение Онлайн-консультант 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)
  • 63. Применение Онлайн-консультант 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)
  • 64. Применение Browser Browser Большое интеграционное решение Server side infrastructure WAMP Router Mobile Desktop SUBSCRIBE to TOPICs REGISTER RPC REGISTER RPC REGISTER RPC SUBSCRIBE to TOPICs Internal service 1 Internal service 2 Internal service 3 Frontoffice app client Frontoffice app client CRUD Nginx / HAProxy CRUD CRUD Backoffice app client SUBSCRIBE to TOPICs PUBLISH Event PUBLISH Event CALL RPCs Nginx / HAProxy Backoffice app client DB CRUD CRUD Backoffice app serverside Frontoffice app serverside
  • 65. Consumer 1 Consumer 2 Consumer 3 Consumer 4 Consumer 5 Provides RPC Call RPC Publish events Subscribe to topics Call RPC Provides 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, ....) Subscribe to topics Publish events Применение WAMP как основа композитных SOA решений
  • 66. Применение WAMP как основа композитных SOA решений • Унифицированная сервисная шина • Асинхронное выполнение процедур • Стандартизация интерфейсов взаимодействия • Минимальные накладные расходы • Гибкая инфраструктура • Изолированность и слабая связанность сервисов • Легкость подключения новых сервисов
  • 67. Существующие реализации • 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
  • 68. Итоги • Простой и открытый протокол • RPC + PubSub из коробки • Унифицированная маршрутизация • Транспорт и сериализация на любой вкус • Минимальные накладные расходы • Нативное использование в веб-приложениях • Позволяет строить распределенные приложения со слабым связыванием компонентов • Множество реализаций на разных языках • Open source & комьюнити
  • 69. Полезные ссылки • http://wamp.wsA • Описание • Спецификация • Реализации • https://groups.google.com/group/wampws • http://autobahn.ws • https://github.com/crossbario/crossbar/wiki • Crossbar.io • Примеры клиентов на разных языках
  • 70. Вот и все!1 Но, возможно, есть вопросы ?
  • 71. Спасибо за внимание! Константин Буркалёв • Mail: kostik@ksdaemon.ru • Twitter: @KSDaemon • GitHub: KSDaemon • Blog: blog.ksdaemon.ru