WAMP как основа композитных SOA-приложений и его имплементация на Lua

Konstantin Burkalev
Konstantin BurkalevSoftware Architect - Atlantis communications
WAMP как основа
композитных
SOA-приложений и
его реализация на Lua
Константин Буркалёв
@KSDaemon
Пара	слов	о	себе…
2
• Системный	архитектор	
• 15+	лет	опыта	в	ИТ	
• Автор	и	ведущий	подкастов	о	разработке:	SDCast	&	RadioJS	
• Активный	участник	группы	разработки	самого	протокола	WAMP	
• Автор	и	мейнтейнер	нескольких	реализаций	WAMP,	в	том	числе	
и	на	Lua
План	доклада
Пример	системы	с	применением	WAMP	
Что	такое	протокол	WAMP,	и	как	он	устроен	
WAMP	как	основа	SOA-решений	
Сферы	применения	
WAMP-клиент	на	Lua	
WAMP-роутер	на	Nginx/Lua
3
Задача:	Система	«Умный	дом»
4
Комната
Задача:	Система	«Умный	дом»
4
Комната
Задача:	Система	«Умный	дом»
4
Комната
Задача:	Система	«Умный	дом»
4
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Датчик	температуры	фиксирует	
превышение	температуры
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Оповещается	клиент	
Логируется	в	базу
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Оповещается	клиент	
Логируется	в	базу
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Система	включает	
кондиционер
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Температура	в	комнате	снижается
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Система	выключает	кондиционер
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Система	выключает	кондиционер
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Влажность	в	ванной	поднимается
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Оповещается	клиент	
Логируется	в	базу
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Оповещается	клиент	
Логируется	в	базу
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Система	включает	
вентилятор
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Система	включает	
вентилятор
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Влажность	в	ванной	снижается
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Система	выключает	вентилятор
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Система	выключает	вентилятор
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Админ
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Админ
Админ	настраивает		
пороговые	значения
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Админ
Админ	производит	поиск		
новых	устройств
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Админ
Система	информирует	о		
найденных	устройствах
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Админ
Система	информирует	о		
найденных	устройствах
Ванная
Комната
Задача:	Система	«Умный	дом»
4
Пользователь
Админ
Что	такое	WAMP
5
Что	такое	WAMP
• Расшифровывается	как	«Web	Application	Messaging	Protocol»
5
Что	такое	WAMP
• Расшифровывается	как	«Web	Application	Messaging	Protocol»
• Предназначен	для	коммуникации	между	программными	
компонентами	практически	в	режиме	реального	времени
5
Что	такое	WAMP
• Расшифровывается	как	«Web	Application	Messaging	Protocol»
• Предназначен	для	коммуникации	между	программными	
компонентами	практически	в	режиме	реального	времени
• Предоставляет	два	механизма:	
• Publish/Subscribe	(PubSub)	
• Remote	Procedure	Calls	(RPC)
5
Что	такое	WAMP
• Расшифровывается	как	«Web	Application	Messaging	Protocol»
• Предназначен	для	коммуникации	между	программными	
компонентами	практически	в	режиме	реального	времени
• Предоставляет	два	механизма:	
• Publish/Subscribe	(PubSub)	
• Remote	Procedure	Calls	(RPC)
• Двунаправленный,	упорядоченный	
5
Что	такое	WAMP
• Расшифровывается	как	«Web	Application	Messaging	Protocol»
• Предназначен	для	коммуникации	между	программными	
компонентами	практически	в	режиме	реального	времени
• Предоставляет	два	механизма:	
• Publish/Subscribe	(PubSub)	
• Remote	Procedure	Calls	(RPC)
• Двунаправленный,	упорядоченный	
• Для	общения	клиентов	требуется	WAMP-роутер
5
Почему	WAMP?
6
Почему	WAMP?
•Открытая	спецификация
6
Почему	WAMP?
•Открытая	спецификация
• Продуманный	Publish/Subscribe
6
Почему	WAMP?
•Открытая	спецификация
• Продуманный	Publish/Subscribe
• Продуманный	Remote	Procedure	Calls
6
Почему	WAMP?
•Открытая	спецификация
• Продуманный	Publish/Subscribe
• Продуманный	Remote	Procedure	Calls
• Роутинг	сообщений
6
Почему	WAMP?
•Открытая	спецификация
• Продуманный	Publish/Subscribe
• Продуманный	Remote	Procedure	Calls
• Роутинг	сообщений
• Кроссплатформенность
6
Почему	WAMP?
•Открытая	спецификация
• Продуманный	Publish/Subscribe
• Продуманный	Remote	Procedure	Calls
• Роутинг	сообщений
• Кроссплатформенность
• Есть	реализации	более	чем	на	15	языках
6
Альтернативы	WAMP
7
Technology PubSub RPC
Routed
RPC
Web native
Cross
Language
Open
Standard
WAMP ✔ ✔ ✔ ✔ ✔ ✔
AJAX - ✔ - ✔ ✔ -
AMQP ✔ (✔) - - ✔ ✔
Java JMS ✔ - - - - ✔
JSON-RPC - ✔ - ✔ ✔ ✔
MQTT ✔ - - - ✔ ✔
REST - ✔ - ✔ ✔ -
SOAP - ✔ - ✔ ✔ ✔
socket.io ✔ - - ✔ - -
XMPP ✔ - - ✔ ✔ ✔
ZMQ ✔ - - - ✔ -
WAMP:	Пример	сообщений
8
Архитектура	WAMP
9
Архитектура	WAMP
10
Клиент.		
Может	предоставлять		
или	потреблять		
ресурсы,	такие	как		
подписки	и	RPC.
Архитектура	WAMP
11
Роутер.		
Занимается		
авторизацией	и		
маршрутизацией		
сообщений		
между	клиентами.
Архитектура	WAMP
12
Peer,	узел.		
Может	быть	клиентом		
или	роутером,		
должен	обладать		
хотя	бы	одной	ролью.
Архитектура	WAMP
13
Роль.		
Определяет		
возможности	узла.		
Есть	4	клиентских		
роли	и	2	роли	роутера.
Архитектура	WAMP
14
Сессия.		
Необходима	для		
идентификации	и		
авторизации	клиентов,		
анонса	ролей	узлов.
Архитектура	WAMP
15
Realm.		
Домен,	namespace,		
единое	пространство	
в	рамках	которого		
определены	ресурсы	
и	происходит	роутинг		
сообщений.
Архитектура	WAMP
16
Транспорт.		
Можно	использовать:		
WebSockets,	Raw	TCP,		
Unix	sockets	и	даже		
HTTP	Long	poll.
Архитектура	WAMP
17
Сериализатор.		
Все	сообщения		
сериализуются		
с	помощью		
JSON/MessagePack/	
CBOR.
message
Архитектура	WAMP
18
Идентификаторы	
ресурсов,	URI.	
Необходимы	для		
топиков,	процедур		
и	ошибок.	
Например:	
Topic:	«sensor.events»	
RPC:	«discover.devices»
message
Основные	понятия	WAMP
19
Основные	понятия	WAMP
• Клиент.	Может	предоставлять	или	потреблять	ресурсы,	такие	как	подписки	и	RPC.	
• Роутер.	Занимается	авторизацией	и	маршрутизацией	сообщений	между	клиентами.	
• Peer,	узел.	Может	быть	клиентом	или	роутером,	должен	обладать	хотя	бы	одной	ролью.	
• Роль.	Определяет	возможности	узла.	Есть	4	клиентских	роли	и	2	роли	роутера.
• Сессия.	Необходима	для	идентификации	и	авторизации	клиентов,	анонса	ролей	узлов.
• Realm.	Домен,	namespace,	в	рамках	которого	происходит	роутинг	сообщений.
• Транспорт.	Можно	использовать:	WebSockets,	Raw	TCP,	Unix	sockets	и	даже	HTTP	Long	poll.
• Сериализатор.	Cообщения	сериализуются	с	помощью	JSON/MessagePack/CBOR
• Идентификаторы	ресурсов,	URI.	Необходимы	для	топиков,	процедур	и	ошибок.	
19
WAMP:	Features
20
WAMP:	Features
• Basic	profile:	базовые	возможности	RPC	и	PubSub
20
WAMP:	Features
• Basic	profile:	базовые	возможности	RPC	и	PubSub
• Advanced	profile:
20
WAMP:	Features
• Basic	profile:	базовые	возможности	RPC	и	PubSub
• Advanced	profile:
• Challenge-Response	Authentication
• Progressive	call	results,	call	timeout,	call	canceling
• Publication	/	call	trust	levels
• Caller	/	publisher	identification
• Pattern	based	registration	/	subscription
• Shared	registration,	sharded	registration	/	subscription
• Event	history
• Meta	API	&	Procedure	/	topic	reflection
20
WAMP:	установка	сессии
21
Клиент Роутер
Realm
WAMP:	установка	сессии
21
HELLO
Клиент Роутер
Realm
[1,	"homeapp",	{	"roles":	{	"publisher":	{},	"subscriber":	{}	}	}]
WAMP:	установка	сессии
21
HELLO
WELCOME
Клиент Роутер
Realm
[2,	9129137332,	{	"roles":	{	"broker":	{}	}	}]
WAMP:	установка	сессии
21
HELLO
WELCOME
ABORT
Клиент Роутер
Realm
[3,	{"message":	"The	realm	does	not	exist."},	"wamp.error.no_such_realm"]
WAMP:	установка	сессии
21
HELLO
WELCOME
GOODBYE (init by client)
ABORT
Клиент Роутер
Realm
[6,	{"message":	"The	host	is	shutting	down	now."},	"wamp.error.system_shutdown"]
WAMP:	установка	сессии
21
HELLO
WELCOME
GOODBYE (init by client)
ABORT
GOODBYE
Клиент Роутер
Realm
[6,	{},	"wamp.error.goodbye_and_out"]
WAMP:	установка	сессии
21
HELLO
WELCOME
GOODBYE (init by client)
ABORT
GOODBYE
GOODBYE (init by router)
Клиент Роутер
Realm
[6,	{},	"wamp.error.close_realm"]
WAMP:	установка	сессии
21
HELLO
WELCOME
GOODBYE (init by client)
ABORT
GOODBYE
GOODBYE
GOODBYE (init by router)
Клиент Роутер
Realm
[6,	{},	"wamp.error.goodbye_and_out"]
WAMP:	установка	сессии
21
HELLO
WELCOME
GOODBYE (init by client)
ABORT
GOODBYE
GOODBYE
GOODBYE (init by router)
Клиент Роутер
Realm
WAMP:	Publish	/	Subscribe
22
Publisher Broker Subscriber
Realm
WAMP:	Publish	/	Subscribe
22
SUBSCRIBE
Publisher Broker Subscriber
Realm
[32,	713845233,	{},	"sensor.events"]
WAMP:	Publish	/	Subscribe
22
SUBSCRIBE
SUBSCRIBED
Publisher Broker Subscriber
Realm
	[33,	713845233,	5512315355]
WAMP:	Publish	/	Subscribe
22
SUBSCRIBE
SUBSCRIBED
ERROR
Publisher Broker Subscriber
Realm
[8,	32,	713845233,	{},	"wamp.error.not_authorized"]
WAMP:	Publish	/	Subscribe
22
SUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
Publisher Broker Subscriber
Realm
[16,	239714735,	{},	"sensor.events",	[],	{"sensorId	":	25,	"temp":	27}]
WAMP:	Publish	/	Subscribe
22
SUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
PUBLISHED
Publisher Broker Subscriber
Realm
[17,	239714735,	4429313566]
WAMP:	Publish	/	Subscribe
22
SUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
PUBLISHED
ERROR
Publisher Broker Subscriber
Realm
[8,	16,	239714735,	{},	"wamp.error.not_authorized"]
WAMP:	Publish	/	Subscribe
22
SUBSCRIBE
SUBSCRIBED
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publisher Broker Subscriber
Realm
[36,	5512315355,	4429313566,	{},	[],	{"sensorId	":	25,	"temp":	27}]
WAMP:	Publish	/	Subscribe
22
SUBSCRIBE
SUBSCRIBED
UNSUBSCRIBE
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publisher Broker Subscriber
Realm
[34,	85346237,	5512315355]
WAMP:	Publish	/	Subscribe
22
SUBSCRIBE
SUBSCRIBED
UNSUBSCRIBE
UNSUBSCRIBED
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publisher Broker Subscriber
Realm
[35,	85346237]
WAMP:	Publish	/	Subscribe
22
SUBSCRIBE
SUBSCRIBED
UNSUBSCRIBE
UNSUBSCRIBED
ERROR
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publisher Broker Subscriber
Realm
[8,	34,	85346237,	{},	"wamp.error.no_such_subscription"]
WAMP:	Publish	/	Subscribe
22
SUBSCRIBE
SUBSCRIBED
UNSUBSCRIBE
UNSUBSCRIBED
ERROR
ERROR
PUBLISH
PUBLISHED
ERROR
EVENT
Publisher Broker Subscriber
Realm
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
Realm
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTERRealm
[64,	25349185,	{},	"dcs.fan.control"]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
Realm
[65,	25349185,	2103333224]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
ERROR
Realm
[8,	64,	25349185,	{},	"wamp.error.procedure_already_exists"]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
ERROR
CALL
Realm
[48,	7814135,	{},	"dcs.fan.control",	[true]]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
ERROR
CALL
INVOCATION
Realm
[68,	6131533,	9823528,	{},	[true]]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
ERROR
CALL
INVOCATION
YIELD
Realm
[70,	6131533,	{}]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
ERROR
CALL
RESULT
INVOCATION
YIELD
Realm
[50,	7814135,	{}]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
Realm
[8,	68,	6131533,	{},	"homeapp.error.hardware_not_found"]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Realm
[8,	48,	7814135,	{},	"homeapp.error.hardware_not_found"]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
UNREGISTER
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Realm
[66,	788923562,	2103333224]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
UNREGISTER
UNREGISTERED
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Realm
[67,	788923562]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
UNREGISTER
UNREGISTERED
ERROR
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Realm
[8,	66,	788923562,	{},	"wamp.error.no_such_registration"]
WAMP:	Remote	Procedure	Calls
23
Caller Dealer Callee
REGISTER
REGISTERED
UNREGISTER
UNREGISTERED
ERROR
ERROR
CALL
RESULT
INVOCATION
YIELD
ERROR
ERROR
Realm
WAMP	как	основа	SOA-решений
24
WAMP	как	основа	SOA-решений
Распределённая	архитектура
24
WAMP	как	основа	SOA-решений
Распределённая	архитектура
Слабая	связанность	компонентов
24
WAMP	как	основа	SOA-решений
Распределённая	архитектура
Слабая	связанность	компонентов
Простой	и	понятный	интерфейс	взаимодействия
24
WAMP	как	основа	SOA-решений
Распределённая	архитектура
Слабая	связанность	компонентов
Простой	и	понятный	интерфейс	взаимодействия
Унифицированная	маршрутизация
24
WAMP	как	основа	SOA-решений
Распределённая	архитектура
Слабая	связанность	компонентов
Простой	и	понятный	интерфейс	взаимодействия
Унифицированная	маршрутизация
Независимость	от	языка	программирования
24
WAMP	как	основа	SOA-решений
Распределённая	архитектура
Слабая	связанность	компонентов
Простой	и	понятный	интерфейс	взаимодействия
Унифицированная	маршрутизация
Независимость	от	языка	программирования
Переиспользуемость	компонентов
24
WAMP	как	основа	SOA-решений
Распределённая	архитектура
Слабая	связанность	компонентов
Простой	и	понятный	интерфейс	взаимодействия
Унифицированная	маршрутизация
Независимость	от	языка	программирования
Переиспользуемость	компонентов
WAMP	удовлетворяет	требованиям	SOA
24
WAMP	в	качестве	ESB
25
WAMP	
Router
Service	
Providers
Service	
Providers
Service	
Providers
Service	
Providers
Service	
Providers
Consumers
Consumers
Consumers
Consumers
Consumers
Вызывают	RPC
Подписываются		
на	топики
Регистрируют	RPC
Публикуют	события
Подписываются		
на	топики
Публикуют	события
Сервер
Сервер
Сервер
WAMP	в	гетерогенных	системах
26
WAMP	
Router
File	
uploader	
(python)
Web	
Client	
(js)
Backoffice	
Client	
(c#)
Video	
processing	
(c++)
Image	
processing	
(go)
Logger	
(ruby)
External	
API	
Gateway
Client	
REST	API	
(nodejs)
Mobile	
Client	
(swift)
Backoffice	
REST	API	
(Java)
DB
Mobile	
Client	
(java)
Realm
Realm
Realm
Сервер
Сервер
Сервер
Сферы	применения	WAMP
27
Сферы	применения	WAMP
27
Распределённые	приложения	с	большим	количеством	сервисов
Сферы	применения	WAMP
27
Распределённые	приложения	с	большим	количеством	сервисов
Smart	homes,	Smart	cities,	Интернет	вещей	в	целом
Сферы	применения	WAMP
27
Распределённые	приложения	с	большим	количеством	сервисов
Smart	homes,	Smart	cities,	Интернет	вещей	в	целом
Системы	с	долго	выполняющимися	процессами
Сферы	применения	WAMP
27
Распределённые	приложения	с	большим	количеством	сервисов
Smart	homes,	Smart	cities,	Интернет	вещей	в	целом
Системы	с	долго	выполняющимися	процессами
Лёгкая	современная	альтернатива	XMPP,	XMLRPC
Сферы	применения	WAMP
27
Распределённые	приложения	с	большим	количеством	сервисов
Smart	homes,	Smart	cities,	Интернет	вещей	в	целом
Системы	с	долго	выполняющимися	процессами
Лёгкая	современная	альтернатива	XMPP,	XMLRPC
Сетевые	игры
Применение	WAMP:	реальные	проекты
28
Применение	WAMP:	реальные	проекты
• Kadecot	API	Server.	Sony	Computer	Science	Laboratories
28
Применение	WAMP:	реальные	проекты
• Kadecot	API	Server.	Sony	Computer	Science	Laboratories
• ParaView.	Parallel	Data	Analysis	and	Visualization	Application,	Kitware
28
Применение	WAMP:	реальные	проекты
• Kadecot	API	Server.	Sony	Computer	Science	Laboratories
• ParaView.	Parallel	Data	Analysis	and	Visualization	Application,	Kitware
• Record.Evolution.	Data-warehouse	and	Business	Intelligence
28
Применение	WAMP:	реальные	проекты
• Kadecot	API	Server.	Sony	Computer	Science	Laboratories
• ParaView.	Parallel	Data	Analysis	and	Visualization	Application,	Kitware
• Record.Evolution.	Data-warehouse	and	Business	Intelligence
• SmartME	smart	city	project.	MDS	Lab	at	the	University	of	Messina
28
Применение	WAMP:	реальные	проекты
• Kadecot	API	Server.	Sony	Computer	Science	Laboratories
• ParaView.	Parallel	Data	Analysis	and	Visualization	Application,	Kitware
• Record.Evolution.	Data-warehouse	and	Business	Intelligence
• SmartME	smart	city	project.	MDS	Lab	at	the	University	of	Messina
• ButterflyDNS.	Web	UI	frontend	for	BIND	DLZ
• Подсистема	управления	серверами	Gollard	VISION
28
Health	monitor
Nginx
Подсистема	управления	сервером
29
WAMP	
Router
Admin	
App	
(c#)
Shaman
RPC:	set.network
RPC:	get.network Publish:	status.change
RPC:	get.status
RPC:	get.time
RPC:	set.time
Loowy:	WAMP-клиент	на	Lua
30
Loowy:	WAMP-клиент	на	Lua
30
• Работает	в	Lua/Luajit	на	базе	lua-ev
Loowy:	WAMP-клиент	на	Lua
30
• Работает	в	Lua/Luajit	на	базе	lua-ev
• Поддерживает	JSON-	и	Msgpack-сериализаторы
Loowy:	WAMP-клиент	на	Lua
30
• Работает	в	Lua/Luajit	на	базе	lua-ev
• Поддерживает	JSON-	и	Msgpack-сериализаторы
• Поддерживает	ряд	фич	из	Advanced	Profile
Loowy:	WAMP-клиент	на	Lua
30
• Работает	в	Lua/Luajit	на	базе	lua-ev
• Поддерживает	JSON-	и	Msgpack-сериализаторы
• Поддерживает	ряд	фич	из	Advanced	Profile
• Автоматическое	переподключение	и	переподписка
Loowy:	WAMP-клиент	на	Lua
30
• Работает	в	Lua/Luajit	на	базе	lua-ev
• Поддерживает	JSON-	и	Msgpack-сериализаторы
• Поддерживает	ряд	фич	из	Advanced	Profile
• Автоматическое	переподключение	и	переподписка
• TODO:	Raw	socket	transport
• TODO:	Meta	API
• TODO:	Challenge-Response	Authorization	(WAMP-CRA)
• TODO:	работа	на	основе	сопрограмм	(coroutines)
Loowy:	примеры	вызовов
31
client = loowy.new("ws://localhost/ws/", { realm = "gv" })
client:publish('sensor.events', { sensorId = 12, temperature = 27})
client:subscribe('sensor.events', function(event)
-- process received event
end)
client:call('dcs.fan.control', true, {
onSuccess = function()
-- fan turned on successfully
end,
onError = function(err)
-- error occurred
end
})
Loowy:	Стек	технологий
32
Loowy:	Стек	технологий
32
• Lua	5.1+,	Luajit	2.0
• lua-websockets	(который	работает	через	luasocket)
• lua-ev
• lua-rapidjson
• lua-MessagePack	(опционально)
Wiola:	WAMP	роутер	на	Lua
33
Wiola:	WAMP	роутер	на	Lua
• Работает	на	базе	Nginx/Lua	module
33
Wiola:	WAMP	роутер	на	Lua
• Работает	на	базе	Nginx/Lua	module
• Использует	Redis	для	runtime	storage
33
Wiola:	WAMP	роутер	на	Lua
• Работает	на	базе	Nginx/Lua	module
• Использует	Redis	для	runtime	storage
• Поддерживает	JSON-	и	MessagePack-сериализаторы
33
Wiola:	WAMP	роутер	на	Lua
• Работает	на	базе	Nginx/Lua	module
• Использует	Redis	для	runtime	storage
• Поддерживает	JSON-	и	MessagePack-сериализаторы
• Поддерживает	ряд	фич	из	Advanced	Profile
33
Wiola:	WAMP	роутер	на	Lua
• Работает	на	базе	Nginx/Lua	module
• Использует	Redis	для	runtime	storage
• Поддерживает	JSON-	и	MessagePack-сериализаторы
• Поддерживает	ряд	фич	из	Advanced	Profile
• TODO:	Raw	socket	transport
• TODO:	Meta	API
• TODO:	lua-resty-postgres
33
Wiola:	стек	технологий
34
Wiola:	стек	технологий
34
• Nginx	или	OpenResty,	проще	говоря	lua-nginx-module
• lua-resty-websocket
• lua-resty-redis
• Redis	Server
• lua-rapidjson
• lua-resty-hmac	(опционально,	нужен	для	WAMP-CRA)
• lua-MessagePack	(опционально)
Wiola:	конфиг	Nginx
35
location /ws/ {
set $wiola_socket_timeout 10;
set $wiola_max_payload_len 65535;
lua_check_client_abort on;
header_filter_by_lua_file /lib/wiola/headers.lua;
content_by_lua_file /lib/wiola/handler.lua;
}
Nginx
Wiola:	Общая	схема
36
Web	
Client
init_by_lua
headers_filter_by_lua
content_by_lua
Redis	
Server
Wiola:	Особенности.	JSON
37
Wiola:	Особенности.	JSON
• cJSON
37
Wiola:	Особенности.	JSON
• cJSON
• нельзя	указать	способ	сериализации	пустых	таблиц
37
Wiola:	Особенности.	JSON
• cJSON
• нельзя	указать	способ	сериализации	пустых	таблиц
• lua-resty-libcjson
37
Wiola:	Особенности.	JSON
• cJSON
• нельзя	указать	способ	сериализации	пустых	таблиц
• lua-resty-libcjson
• не	умеет	работать	с	большими	числами	(int	>	32bit)
37
Wiola:	Особенности.	JSON
• cJSON
• нельзя	указать	способ	сериализации	пустых	таблиц
• lua-resty-libcjson
• не	умеет	работать	с	большими	числами	(int	>	32bit)
lua-rapidjson
37
Wiola:	Особенности.	JSON
• cJSON
• нельзя	указать	способ	сериализации	пустых	таблиц
• lua-resty-libcjson
• не	умеет	работать	с	большими	числами	(int	>	32bit)
lua-rapidjson
• пока	новых	проблем	не	нашлось	:)
37
Wiola:	Особенности.	Runtime-хранилище
38
Wiola:	Особенности.	Runtime-хранилище
38
• Глобальные	переменные	в	памяти
Wiola:	Особенности.	Runtime-хранилище
38
• Глобальные	переменные	в	памяти
• Создаются	каждый	раз	на	request	handler
Wiola:	Особенности.	Runtime-хранилище
38
• Глобальные	переменные	в	памяти
• Создаются	каждый	раз	на	request	handler
• проблемы	с	concurrent	requests
Wiola:	Особенности.	Runtime-хранилище
38
• Глобальные	переменные	в	памяти
• Создаются	каждый	раз	на	request	handler
• проблемы	с	concurrent	requests
• Переменные	модуля,	загружаемого	в	init_by_lua
Wiola:	Особенности.	Runtime-хранилище
38
• Глобальные	переменные	в	памяти
• Создаются	каждый	раз	на	request	handler
• проблемы	с	concurrent	requests
• Переменные	модуля,	загружаемого	в	init_by_lua
• Читать	можно	во	всех	воркерах
Wiola:	Особенности.	Runtime-хранилище
38
• Глобальные	переменные	в	памяти
• Создаются	каждый	раз	на	request	handler
• проблемы	с	concurrent	requests
• Переменные	модуля,	загружаемого	в	init_by_lua
• Читать	можно	во	всех	воркерах
• Но	запись,	спасибо	CoW,	создаст	свою	копию	модуля	для	VM
Wiola:	Особенности.	Runtime-хранилище
38
• Глобальные	переменные	в	памяти
• Создаются	каждый	раз	на	request	handler
• проблемы	с	concurrent	requests
• Переменные	модуля,	загружаемого	в	init_by_lua
• Читать	можно	во	всех	воркерах
• Но	запись,	спасибо	CoW,	создаст	свою	копию	модуля	для	VM
• ngx.shared.DICT
Wiola:	Особенности.	Runtime-хранилище
38
• Глобальные	переменные	в	памяти
• Создаются	каждый	раз	на	request	handler
• проблемы	с	concurrent	requests
• Переменные	модуля,	загружаемого	в	init_by_lua
• Читать	можно	во	всех	воркерах
• Но	запись,	спасибо	CoW,	создаст	свою	копию	модуля	для	VM
• ngx.shared.DICT
• Размер	каждого	словаря	задаётся	в	конфиге	и	не	может	изменяться
Wiola:	Особенности.	Runtime-хранилище
38
• Глобальные	переменные	в	памяти
• Создаются	каждый	раз	на	request	handler
• проблемы	с	concurrent	requests
• Переменные	модуля,	загружаемого	в	init_by_lua
• Читать	можно	во	всех	воркерах
• Но	запись,	спасибо	CoW,	создаст	свою	копию	модуля	для	VM
• ngx.shared.DICT
• Размер	каждого	словаря	задаётся	в	конфиге	и	не	может	изменяться
Внешнее	хранилище:	Redis,	Memcache,	PostgreSQL,	MySQL	и	прочие
Wiola:	Особенности.	lua_code_cache
39
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• удобно	отлаживать	код
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• удобно	отлаживать	код
• каждый	require()	выполняется	заново	в	каждом	запросе
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• удобно	отлаживать	код
• каждый	require()	выполняется	заново	в	каждом	запросе
• даже	модули,	загруженные	в	init_by_lua,	выполняются	заново
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• удобно	отлаживать	код
• каждый	require()	выполняется	заново	в	каждом	запросе
• даже	модули,	загруженные	в	init_by_lua,	выполняются	заново
• lua_code_cache	on;
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• удобно	отлаживать	код
• каждый	require()	выполняется	заново	в	каждом	запросе
• даже	модули,	загруженные	в	init_by_lua,	выполняются	заново
• lua_code_cache	on;
• для	production-окружения
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• удобно	отлаживать	код
• каждый	require()	выполняется	заново	в	каждом	запросе
• даже	модули,	загруженные	в	init_by_lua,	выполняются	заново
• lua_code_cache	on;
• для	production-окружения
• каждый	require()	выполняется	один	раз	и	кэшируется
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• удобно	отлаживать	код
• каждый	require()	выполняется	заново	в	каждом	запросе
• даже	модули,	загруженные	в	init_by_lua,	выполняются	заново
• lua_code_cache	on;
• для	production-окружения
• каждый	require()	выполняется	один	раз	и	кэшируется
• при	любом	изменении	кода	необходимо	перегружать	nginx
Wiola:	Публикация	в	luarocks,	opm
40
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
- 	lua-resty-websocket
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
- 	lua-resty-websocket
- 	lua-resty-redis
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	с	точностью	до	
«наоборот»:
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	с	точностью	до	
«наоборот»:
✓	lua-resty-websocket
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	с	точностью	до	
«наоборот»:
✓	lua-resty-websocket
✓	lua-resty-redis
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	с	точностью	до	
«наоборот»:
✓	lua-resty-websocket
✓	lua-resty-redis
- 	rapidjson
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	с	точностью	до	
«наоборот»:
✓	lua-resty-websocket
✓	lua-resty-redis
- 	rapidjson
✓	lua-resty-hmac
Wiola:	Публикация	в	luarocks,	opm
40
• luarocks:	есть	одна	часть	
зависимостей,																							
нет	другой:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	с	точностью	до	
«наоборот»:
✓	lua-resty-websocket
✓	lua-resty-redis
- 	rapidjson
✓	lua-resty-hmac
- 	lua-messagepack
Полезные	ссылки	про	WAMP
41
Полезные	ссылки	про	WAMP
• Основной	сайт	про	WAMP:	http://wamp-proto.org/
• Спека	WAMP	на	github:	github.com/wamp-proto/wamp-proto
• Mailing	list:	https://groups.google.com/forum/#!forum/wampws
• Wiola:	https://github.com/KSDaemon/wiola
• Loowy:	https://github.com/KSDaemon/Loowy
• Wampy.js:	https://github.com/KSDaemon/wampy.js
• Wiola	docker	image:	https://hub.docker.com/r/421p/wiola/
• Crossbar	Router:	https://crossbar.io/	и	https://demo.crossbar.io/
41
WAMP:	Заключение
42
WAMP:	Заключение
• Простой	и	открытый	протокол
42
WAMP:	Заключение
• Простой	и	открытый	протокол
• RPC	и	PubSub	в	одном	транспорте/протоколе
42
WAMP:	Заключение
• Простой	и	открытый	протокол
• RPC	и	PubSub	в	одном	транспорте/протоколе
• Любой	транспорт	и	сериализация
42
WAMP:	Заключение
• Простой	и	открытый	протокол
• RPC	и	PubSub	в	одном	транспорте/протоколе
• Любой	транспорт	и	сериализация
• Позволяет	строить	распределённые	приложения	
со	слабосвязанными	компонентами
42
WAMP:	Заключение
• Простой	и	открытый	протокол
• RPC	и	PubSub	в	одном	транспорте/протоколе
• Любой	транспорт	и	сериализация
• Позволяет	строить	распределённые	приложения	
со	слабосвязанными	компонентами
• Есть	реализации	во	многих	языках
42
WAMP:	Заключение
• Простой	и	открытый	протокол
• RPC	и	PubSub	в	одном	транспорте/протоколе
• Любой	транспорт	и	сериализация
• Позволяет	строить	распределённые	приложения	
со	слабосвязанными	компонентами
• Есть	реализации	во	многих	языках
• Open	source
42
WAMP:	Заключение
• Простой	и	открытый	протокол
• RPC	и	PubSub	в	одном	транспорте/протоколе
• Любой	транспорт	и	сериализация
• Позволяет	строить	распределённые	приложения	
со	слабосвязанными	компонентами
• Есть	реализации	во	многих	языках
• Open	source
• Небольшое,	но	дружелюбное	сообщество
42
WAMP:	Заключение
43
WAMP:	Заключение
• Полезное	архитектурное	решение
43
WAMP:	Заключение
• Полезное	архитектурное	решение
• Отличный	вариант	для	IoT-проекта!	(имхо:	лучше	чем	MQTT)
43
WAMP:	Заключение
• Полезное	архитектурное	решение
• Отличный	вариант	для	IoT-проекта!	(имхо:	лучше	чем	MQTT)
• Попробуйте	WAMP:
43
WAMP:	Заключение
• Полезное	архитектурное	решение
• Отличный	вариант	для	IoT-проекта!	(имхо:	лучше	чем	MQTT)
• Попробуйте	WAMP:
• Есть	nginx/openresty?	—	попробуйте	Wiola	(bit.ly/wiola-router)
43
WAMP:	Заключение
• Полезное	архитектурное	решение
• Отличный	вариант	для	IoT-проекта!	(имхо:	лучше	чем	MQTT)
• Попробуйте	WAMP:
• Есть	nginx/openresty?	—	попробуйте	Wiola	(bit.ly/wiola-router)
• Используете	docker?
43
WAMP:	Заключение
• Полезное	архитектурное	решение
• Отличный	вариант	для	IoT-проекта!	(имхо:	лучше	чем	MQTT)
• Попробуйте	WAMP:
• Есть	nginx/openresty?	—	попробуйте	Wiola	(bit.ly/wiola-router)
• Используете	docker?
• docker	pull	421p/wiola
43
WAMP:	Заключение
• Полезное	архитектурное	решение
• Отличный	вариант	для	IoT-проекта!	(имхо:	лучше	чем	MQTT)
• Попробуйте	WAMP:
• Есть	nginx/openresty?	—	попробуйте	Wiola	(bit.ly/wiola-router)
• Используете	docker?
• docker	pull	421p/wiola
• docker	pull	crossbario/crossbar
43
WAMP:	Заключение
• Полезное	архитектурное	решение
• Отличный	вариант	для	IoT-проекта!	(имхо:	лучше	чем	MQTT)
• Попробуйте	WAMP:
• Есть	nginx/openresty?	—	попробуйте	Wiola	(bit.ly/wiola-router)
• Используете	docker?
• docker	pull	421p/wiola
• docker	pull	crossbario/crossbar
• WAMP-клиент	на	любой	вкус	и	цвет	(wamp-proto.org/implementations/)
43
Спасибо	за	внимание!
И	ваши	вопросы	:)
44
Константин Буркалёв
• Mail: kostik@ksdaemon.ru
• Twitter: @KSDaemon
• GitHub: KSDaemon
• Blog: blog.ksdaemon.ru
• SDCast: sdcast.ksdaemon.ru
1 of 204

Recommended

Высоконагруженная отправка push-уведомлений / Алексей Акулович by
Высоконагруженная отправка push-уведомлений / Алексей АкуловичВысоконагруженная отправка push-уведомлений / Алексей Акулович
Высоконагруженная отправка push-уведомлений / Алексей АкуловичOntico
1.4K views12 slides
2021.11.10 Dots Platform. Serverless. Vapor by
2021.11.10 Dots Platform. Serverless. Vapor2021.11.10 Dots Platform. Serverless. Vapor
2021.11.10 Dots Platform. Serverless. VaporYehor Herasymchuk
28 views199 slides
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t... by
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...Yehor Herasymchuk
216 views195 slides
Zero Downtime PHP Deployment with Envoyer And Forge by
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
70 views93 slides
Опыт внедрения IPv6 и статистика by
Опыт внедрения IPv6 и статистикаОпыт внедрения IPv6 и статистика
Опыт внедрения IPv6 и статистикаPhilipp Kulin
754 views10 slides
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U... by
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...Ontico
1.5K views173 slides

More Related Content

What's hot

Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft) by
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
1.3K views24 slides
Опыт использования IPv6 год спустя by
Опыт использования IPv6 год спустяОпыт использования IPv6 год спустя
Опыт использования IPv6 год спустяPhilipp Kulin
491 views16 slides
РИФ 2016, Tarantool – кейсы использования by
РИФ 2016, Tarantool – кейсы использованияРИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использованияТарасов Константин
124 views36 slides
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (... by
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Ontico
1.2K views41 slides
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl... by
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Ontico
1.2K views70 slides
2020.10.13 HA Redis is simple. FWDays Highload by
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays HighloadYehor Herasymchuk
423 views100 slides

What's hot(20)

Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft) by Ontico
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico1.3K views
Опыт использования IPv6 год спустя by Philipp Kulin
Опыт использования IPv6 год спустяОпыт использования IPv6 год спустя
Опыт использования IPv6 год спустя
Philipp Kulin491 views
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (... by Ontico
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Ontico1.2K views
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl... by Ontico
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Ontico1.2K views
2020.10.13 HA Redis is simple. FWDays Highload by Yehor Herasymchuk
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload
Yehor Herasymchuk423 views
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей... by Ontico
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...
Ontico932 views
Брокер сообщений Kafka в условиях повышенной нагрузки by Artyom Vybornov
Брокер сообщений Kafka в условиях повышенной нагрузкиБрокер сообщений Kafka в условиях повышенной нагрузки
Брокер сообщений Kafka в условиях повышенной нагрузки
Artyom Vybornov172 views
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H... by Ontico
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Ontico823 views
Ровная балансировка нагрузки на фронтенд-кластере by Badoo Development
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
Badoo Development16.4K views
Курс Java-2016. Занятие 09. Web by 7bits
Курс Java-2016. Занятие 09. WebКурс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. Web
7bits337 views
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р... by Ontico
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Ontico679 views
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group) by Ontico
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Ontico714 views
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура... by SECON
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON523 views
Юрий Насретдинов, Badoo by Ontico
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
Ontico1.5K views
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский... by Ontico
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico440 views
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware) by Ontico
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Ontico1.3K views
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS... by Ontico
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Ontico1.2K views

Similar to WAMP как основа композитных SOA-приложений и его имплементация на Lua

WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua... by
WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...
WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...Ontico
247 views44 slides
Павел Брылов, Skype by
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
1.5K views43 slides
облачные вычисления и сервисы by
облачные вычисления и сервисыоблачные вычисления и сервисы
облачные вычисления и сервисыValeriya Kulikova
2.6K views18 slides
облачные вычисления и сервисы by
облачные вычисления и сервисыоблачные вычисления и сервисы
облачные вычисления и сервисыValeriya Kulikova
1.7K views18 slides
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации" by
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"Expolink
1.2K views11 slides
Максим Пугачев by
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
248 views35 slides

Similar to WAMP как основа композитных SOA-приложений и его имплементация на Lua(20)

WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua... by Ontico
WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...
WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...
Ontico247 views
Павел Брылов, Skype by Ontico
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
Ontico1.5K views
облачные вычисления и сервисы by Valeriya Kulikova
облачные вычисления и сервисыоблачные вычисления и сервисы
облачные вычисления и сервисы
Valeriya Kulikova2.6K views
облачные вычисления и сервисы by Valeriya Kulikova
облачные вычисления и сервисыоблачные вычисления и сервисы
облачные вычисления и сервисы
Valeriya Kulikova1.7K views
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации" by Expolink
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"
Expolink1.2K views
Максим Пугачев by CodeFest
Максим ПугачевМаксим Пугачев
Максим Пугачев
CodeFest248 views
Фронтенд в Яндексе by Yandex
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
Yandex527 views
Фронтенд в Яндексе by Yandex
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
Yandex342 views
Фронтенд в Яндексе by Yandex
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
Yandex845 views
Эпохи в разработке программного обеспечения by Vitebsk Miniq
Эпохи в разработке программного обеспеченияЭпохи в разработке программного обеспечения
Эпохи в разработке программного обеспечения
Vitebsk Miniq180 views
Марат Мавлютов - Современный веб как сложная система by Yandex
Марат Мавлютов - Современный веб как сложная системаМарат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная система
Yandex986 views
DevCon School. Azure Microservices and Containers by Stas Pavlov
DevCon School. Azure Microservices and ContainersDevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and Containers
Stas Pavlov222 views
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс... by CodeFest
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest355 views
лекция №7 by student_kai
лекция №7лекция №7
лекция №7
student_kai129 views
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС by 2ГИС Технологии
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
Облачные вычисления и сервисы: классификация, основные функции и недостатки by Транслируем.бел
Облачные вычисления и сервисы: классификация, основные функции и недостаткиОблачные вычисления и сервисы: классификация, основные функции и недостатки
Облачные вычисления и сервисы: классификация, основные функции и недостатки
Как превратить приложение в платформу by Vadim Kruchkov
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформу
Vadim Kruchkov469 views
Построение облачных процессов с помощью Mistral by CodeFest
Построение облачных процессов с помощью MistralПостроение облачных процессов с помощью Mistral
Построение облачных процессов с помощью Mistral
CodeFest952 views
InterSystems Community and Projects in CIS November 2015 by InterSystems
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015
InterSystems486 views
Экспорт алгоритмов и создание независимых приложений by MATLAB
Экспорт алгоритмов и создание независимых приложенийЭкспорт алгоритмов и создание независимых приложений
Экспорт алгоритмов и создание независимых приложений
MATLAB1.6K views

WAMP как основа композитных SOA-приложений и его имплементация на Lua