SlideShare une entreprise Scribd logo
1  sur  204
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Опыт использования IPv6 год спустя
Опыт использования IPv6 год спустяОпыт использования IPv6 год спустя
Опыт использования IPv6 год спустяPhilipp Kulin
 
РИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использованияРИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использованияТарасов Константин
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Ontico
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Ontico
 
2020.10.13 HA Redis is simple. FWDays Highload
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
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsqlAnatoly Popov
 
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...Ontico
 
Брокер сообщений Kafka в условиях повышенной нагрузки
Брокер сообщений Kafka в условиях повышенной нагрузкиБрокер сообщений Kafka в условиях повышенной нагрузки
Брокер сообщений Kafka в условиях повышенной нагрузкиArtyom Vybornov
 
Внедрение IPv6
Внедрение IPv6Внедрение IPv6
Внедрение IPv6Philipp Kulin
 
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереBadoo Development
 
Курс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. WebКурс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. Web7bits
 
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...Ontico
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Ontico
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, BadooOntico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Ontico
 
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Ontico
 

Tendances (20)

Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Опыт использования IPv6 год спустя
Опыт использования IPv6 год спустяОпыт использования IPv6 год спустя
Опыт использования IPv6 год спустя
 
РИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использованияРИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использования
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
 
2020.10.13 HA Redis is simple. FWDays Highload
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
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsql
 
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...
 
Брокер сообщений Kafka в условиях повышенной нагрузки
Брокер сообщений Kafka в условиях повышенной нагрузкиБрокер сообщений Kafka в условиях повышенной нагрузки
Брокер сообщений Kafka в условиях повышенной нагрузки
 
Внедрение IPv6
Внедрение IPv6Внедрение IPv6
Внедрение IPv6
 
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Курс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. WebКурс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. Web
 
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
 
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
 

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

WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...
WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...
WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...Ontico
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 
облачные вычисления и сервисы
облачные вычисления и сервисыоблачные вычисления и сервисы
облачные вычисления и сервисыValeriya Kulikova
 
облачные вычисления и сервисы
облачные вычисления и сервисыоблачные вычисления и сервисы
облачные вычисления и сервисыValeriya Kulikova
 
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"Expolink
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Эпохи в разработке программного обеспечения
Эпохи в разработке программного обеспеченияЭпохи в разработке программного обеспечения
Эпохи в разработке программного обеспеченияVitebsk Miniq
 
Марат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная системаМарат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная системаYandex
 
DevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and ContainersDevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and ContainersStas Pavlov
 
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...CodeFest
 
лекция №7
лекция №7лекция №7
лекция №7student_kai
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС 2ГИС Технологии
 
Облачные вычисления и сервисы: классификация, основные функции и недостатки
Облачные вычисления и сервисы: классификация, основные функции и недостаткиОблачные вычисления и сервисы: классификация, основные функции и недостатки
Облачные вычисления и сервисы: классификация, основные функции и недостаткиТранслируем.бел
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформуVadim Kruchkov
 
Построение облачных процессов с помощью Mistral
Построение облачных процессов с помощью MistralПостроение облачных процессов с помощью Mistral
Построение облачных процессов с помощью MistralCodeFest
 
InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems
 
Экспорт алгоритмов и создание независимых приложений
Экспорт алгоритмов и создание независимых приложенийЭкспорт алгоритмов и создание независимых приложений
Экспорт алгоритмов и создание независимых приложенийMATLAB
 

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

WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...
WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...
WAMP[-proto] как основа композитных SOA-приложений и его имплементация на Lua...
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
облачные вычисления и сервисы
облачные вычисления и сервисыоблачные вычисления и сервисы
облачные вычисления и сервисы
 
облачные вычисления и сервисы
облачные вычисления и сервисыоблачные вычисления и сервисы
облачные вычисления и сервисы
 
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Эпохи в разработке программного обеспечения
Эпохи в разработке программного обеспеченияЭпохи в разработке программного обеспечения
Эпохи в разработке программного обеспечения
 
Марат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная системаМарат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная система
 
DevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and ContainersDevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and Containers
 
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
 
лекция №7
лекция №7лекция №7
лекция №7
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
 
Облачные вычисления и сервисы: классификация, основные функции и недостатки
Облачные вычисления и сервисы: классификация, основные функции и недостаткиОблачные вычисления и сервисы: классификация, основные функции и недостатки
Облачные вычисления и сервисы: классификация, основные функции и недостатки
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформу
 
Построение облачных процессов с помощью Mistral
Построение облачных процессов с помощью MistralПостроение облачных процессов с помощью Mistral
Построение облачных процессов с помощью Mistral
 
InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015
 
Экспорт алгоритмов и создание независимых приложений
Экспорт алгоритмов и создание независимых приложенийЭкспорт алгоритмов и создание независимых приложений
Экспорт алгоритмов и создание независимых приложений
 

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