WAMP as a platform for composite SOA applications and its implementation on Lua

Konstantin Burkalev
Konstantin BurkalevSoftware Architect - Atlantis communications
WAMP as a platform
for composite SOA
applications and its
implementation on Lua
Konstantin Burkalev
@KSDaemon
Few	words	about	me…
2
• Software	architect	
• 15+	years	in	IT	
• Author	and	host	of	podcasts:	SDCast	&	RadioJS	
• Active	member	of	WAMP	protocol	development	group	
• Author	and	maintainer	of	a	few	WAMP	implementations,											
some	of	them	are	written	in	Lua
Talk	plan
Example	of	system	using	WAMP	
What	is	WAMP	and	how	it	works	
WAMP	as	basis	for	SOA	applications	
Application	fields	
WAMP	client	in	Lua	
WAMP	router	in	Nginx/Lua
3
Task:	Smart	Home	System
4
Living	room
Task:	Smart	Home	System
4
Living	room
Task:	Smart	Home	System
4
Living	room
Task:	Smart	Home	System
4
Bath	room
Living	room
Task:	Smart	Home	System
4
Bath	room
Living	room
Task:	Smart	Home	System
4
Bath	room
Living	room
Task:	Smart	Home	System
4
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	temperature	sensor	detects	
the	temperature	raise
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	client	is	notified	
Logged	in	database
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	client	is	notified	
Logged	in	database
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	system	turns	on	air	conditioning
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	temperature	in	the	room	decreases
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	system	turns	off	the	air	conditioning
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	system	turns	off	the	air	conditioning
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	humidity	in	the	bathroom	rises
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	client	is	notified	
Logged	in	database
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	client	is	notified	
Logged	in	database
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	system	turns	on	a	fan
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	system	turns	on	a	fan
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	humidity	in	the	bathroom	drops
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	system	turns	off	the	fan
Bath	room
Living	room
Task:	Smart	Home	System
4
User
The	system	turns	off	the	fan
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Admin
Admin	configures	threshold	values
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Admin
Admin	searches	new	devices
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Admin
The	system	informs	about		
found	devices
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Admin
The	system	informs	about		
found	devices
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Admin
Bath	room
Living	room
Task:	Smart	Home	System
4
User
Admin
What	is	WAMP
5
What	is	WAMP
• It	stands	for	"Web	Application	Messaging	Protocol"
5
What	is	WAMP
• It	stands	for	"Web	Application	Messaging	Protocol"
• Is	intended	for	communication	between	software	components	in	
near	real-time
5
What	is	WAMP
• It	stands	for	"Web	Application	Messaging	Protocol"
• Is	intended	for	communication	between	software	components	in	
near	real-time
• Provides	two	mechanisms:	
• Publish/Subscribe	(PubSub)	
• Remote	Procedure	Calls	(RPC)
5
What	is	WAMP
• It	stands	for	"Web	Application	Messaging	Protocol"
• Is	intended	for	communication	between	software	components	in	
near	real-time
• Provides	two	mechanisms:	
• Publish/Subscribe	(PubSub)	
• Remote	Procedure	Calls	(RPC)
• Bi-directional,	ordered
5
What	is	WAMP
• It	stands	for	"Web	Application	Messaging	Protocol"
• Is	intended	for	communication	between	software	components	in	
near	real-time
• Provides	two	mechanisms:	
• Publish/Subscribe	(PubSub)	
• Remote	Procedure	Calls	(RPC)
• Bi-directional,	ordered
• For	communication	between	clients	is	required	WAMP-router
5
Why	WAMP?
6
Why	WAMP?
• Open	specification
6
Why	WAMP?
• Open	specification
• Thoughtful	Publish	/	Subscribe
6
Why	WAMP?
• Open	specification
• Thoughtful	Publish	/	Subscribe
• Thoughtful	Remote	Procedure	Calls
6
Why	WAMP?
• Open	specification
• Thoughtful	Publish	/	Subscribe
• Thoughtful	Remote	Procedure	Calls
• Message	routing
6
Why	WAMP?
• Open	specification
• Thoughtful	Publish	/	Subscribe
• Thoughtful	Remote	Procedure	Calls
• Message	routing
• Cross-platform
6
Why	WAMP?
• Open	specification
• Thoughtful	Publish	/	Subscribe
• Thoughtful	Remote	Procedure	Calls
• Message	routing
• Cross-platform
• There	are	implementations	in	more	than	15	languages
6
WAMP	alternatives
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:	message	examples
8
WAMP	architecture
9
WAMP	architecture
10
Client.		
Can	provide	
or	consume	
resources	such	as	
subscriptions	and	RPC.
WAMP	architecture
11
Router.		
Deals	with	
authorization	and		
routing		
messages		
between	clients.
WAMP	architecture
12
Peer.		
Can	be	a	client	
or	a	router,	
must	have	
at	least	one	role.
WAMP	architecture
13
Role.		
Defines	
features	of	the	node.	
There	are	4	client	roles	
and	2	roles	of	the	router.
WAMP	architecture
14
Session.		
It	is	necessary	for	
identification	and	
authorization	of	clients,	
announce	the	roles		
of	nodes.
WAMP	architecture
15
Realm.		
domain,	namespace,	
single	space	
within	which	
resources	
and	message	routing		
takes	place.
WAMP	architecture
16
Transport.		
You	can	use:		
Websocket,	Raw	TCP,		
Unix	sockets	and	even		
HTTP	Long	poll.
WAMP	architecture
17
Serializer.		
All	messages	are	
serialized	using		
JSON/MessagePack/	
CBOR.
message
WAMP	architecture
18
Resource		
identifiers,	URI.	
Required	for	
topics,	procedures	
and	errors.	
For	example:	
Topic:	«sensor.events»	
RPC:	«discover.devices»
message
Basic	WAMP	concepts
19
Basic	WAMP	concepts
• Client.	Can	provide	or	consume	resources,	such	as	subscriptions	and	RPC.
• Router.	Deals	with	authorization	and	message	routing	between	clients.
• Peer.	Can	be	a	client	or	a	router,	must	have	at	least	one	role.
• Role.	Determines	the	capabilities	of	the	node.	There	are	4	client	roles	and	2	router	roles.
• Session.	It	is	necessary	to	identify	and	authorize	clients,	announce	the	role	of	nodes.
• Realm.	Domain,	namespace,	within	which	messages	are	routed.
• Transport.	You	can	use:	WebSockets,	Raw	TCP,	Unix	sockets	and	even	HTTP	Long	poll.
• Serializer.	Messages	are	serialized	using	JSON	/	MessagePack	/	CBOR	/	etc.
• Resource	identifiers,	URIs.	Required	for	topics,	procedures	and	errors.
19
WAMP:	Features
20
WAMP:	Features
• Basic	profile:	basic	features	of	RPC	and	PubSub
20
WAMP:	Features
• Basic	profile:	basic	features	of	RPC	and	PubSub
• Advanced	profile:
20
WAMP:	Features
• Basic	profile:	basic	features	of	RPC	and	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:	session	establishment
21
Client Router
Realm
WAMP:	session	establishment
21
HELLO
Client Router
Realm
[1,	"homeapp",	{	"roles":	{	"publisher":	{},	"subscriber":	{}	}	}]
WAMP:	session	establishment
21
HELLO
WELCOME
Client Router
Realm
[2,	9129137332,	{	"roles":	{	"broker":	{}	}	}]
WAMP:	session	establishment
21
HELLO
WELCOME
ABORT
Client Router
Realm
[3,	{"message":	"The	realm	does	not	exist."},	"wamp.error.no_such_realm"]
WAMP:	session	establishment
21
HELLO
WELCOME
GOODBYE (init by client)
ABORT
Client Router
Realm
[6,	{"message":	"The	host	is	shutting	down	now."},	"wamp.error.system_shutdown"]
WAMP:	session	establishment
21
HELLO
WELCOME
GOODBYE (init by client)
ABORT
GOODBYE
Client Router
Realm
[6,	{},	"wamp.error.goodbye_and_out"]
WAMP:	session	establishment
21
HELLO
WELCOME
GOODBYE (init by client)
ABORT
GOODBYE
GOODBYE (init by router)
Client Router
Realm
[6,	{},	"wamp.error.close_realm"]
WAMP:	session	establishment
21
HELLO
WELCOME
GOODBYE (init by client)
ABORT
GOODBYE
GOODBYE
GOODBYE (init by router)
Client Router
Realm
[6,	{},	"wamp.error.goodbye_and_out"]
WAMP:	session	establishment
21
HELLO
WELCOME
GOODBYE (init by client)
ABORT
GOODBYE
GOODBYE
GOODBYE (init by router)
Client 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	as	a	basis	for	SOA	applications
24
WAMP	as	a	basis	for	SOA	applications
Distributed	architecture
24
WAMP	as	a	basis	for	SOA	applications
Distributed	architecture
Loose	coupling	of	components
24
WAMP	as	a	basis	for	SOA	applications
Distributed	architecture
Loose	coupling	of	components
A	simple	and	intuitive	interface	for	interaction
24
WAMP	as	a	basis	for	SOA	applications
Distributed	architecture
Loose	coupling	of	components
A	simple	and	intuitive	interface	for	interaction
Unified	Routing
24
WAMP	as	a	basis	for	SOA	applications
Distributed	architecture
Loose	coupling	of	components
A	simple	and	intuitive	interface	for	interaction
Unified	Routing
Independence	from	programming	language
24
WAMP	as	a	basis	for	SOA	applications
Distributed	architecture
Loose	coupling	of	components
A	simple	and	intuitive	interface	for	interaction
Unified	Routing
Independence	from	programming	language
Re-usability	of	components
24
WAMP	as	a	basis	for	SOA	applications
Distributed	architecture
Loose	coupling	of	components
A	simple	and	intuitive	interface	for	interaction
Unified	Routing
Independence	from	programming	language
Re-usability	of	components
WAMP	satisfies	the	requirements	of	SOA
24
WAMP	as	ESB
25
WAMP	
Router
Service	
Providers
Service	
Providers
Service	
Providers
Service	
Providers
Service	
Providers
Consumers
Consumers
Consumers
Consumers
Consumers
call	RPC
Subscribe	to	topics
Register	RPC
Publish	events
Subscribe	to	topics
Publish	events
Сервер
Сервер
Server
WAMP	in	heterogeneous	systems
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
Сервер
Сервер
Server
WAMP	Application	fields
27
WAMP	Application	fields
27
Distributed	applications	with	a	large	number	of	services
WAMP	Application	fields
27
Distributed	applications	with	a	large	number	of	services
Smart	homes,	Smart	cities,	Internet	of	things	in	General
WAMP	Application	fields
27
Distributed	applications	with	a	large	number	of	services
Smart	homes,	Smart	cities,	Internet	of	things	in	General
Systems	with	long-running	processes
WAMP	Application	fields
27
Distributed	applications	with	a	large	number	of	services
Smart	homes,	Smart	cities,	Internet	of	things	in	General
Systems	with	long-running	processes
Easy	modern	alternative	to	XMPP,	XMLRPC
WAMP	Application	fields
27
Distributed	applications	with	a	large	number	of	services
Smart	homes,	Smart	cities,	Internet	of	things	in	General
Systems	with	long-running	processes
Easy	modern	alternative	to	XMPP,	XMLRPC
Network	multiplayer	games
WAMP:	real	projects
28
WAMP:	real	projects
• Kadecot	API	Server.	Sony	Computer	Science	Laboratories
28
WAMP:	real	projects
• Kadecot	API	Server.	Sony	Computer	Science	Laboratories
• ParaView.	Parallel	Data	Analysis	and	Visualization	Application,	Kitware
28
WAMP:	real	projects
• Kadecot	API	Server.	Sony	Computer	Science	Laboratories
• ParaView.	Parallel	Data	Analysis	and	Visualization	Application,	Kitware
• Record.Evolution.	Data-warehouse	and	Business	Intelligence
28
WAMP:	real	projects
• 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:	real	projects
• 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	Server	Management	Subsystem
28
Health	monitor
Nginx
Server	Management	Subsystem
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	client	in	Lua
30
Loowy:	WAMP	client	in	Lua
30
• Works	in	Lua/Luajit	environment	on	top	of	lua-ev
Loowy:	WAMP	client	in	Lua
30
• Works	in	Lua/Luajit	environment	on	top	of	lua-ev
• Supports	JSON	and	Msgpack	serializers
Loowy:	WAMP	client	in	Lua
30
• Works	in	Lua/Luajit	environment	on	top	of	lua-ev
• Supports	JSON	and	Msgpack	serializers
• Supports	a	number	of	features	from	Advanced	Profile
Loowy:	WAMP	client	in	Lua
30
• Works	in	Lua/Luajit	environment	on	top	of	lua-ev
• Supports	JSON	and	Msgpack	serializers
• Supports	a	number	of	features	from	Advanced	Profile
• Automatic	reconnection	and	re-subscription
Loowy:	WAMP	client	in	Lua
30
• Works	in	Lua/Luajit	environment	on	top	of	lua-ev
• Supports	JSON	and	Msgpack	serializers
• Supports	a	number	of	features	from	Advanced	Profile
• Automatic	reconnection	and	re-subscription
• TODO:	Raw	socket	transport
• TODO:	Meta	API
• TODO:	Challenge-Response	Authorization	(WAMP-CRA)
• TODO:	work	on	the	basis	of	coroutines
Loowy:	api	calls	examples
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:	Technology	stack
32
Loowy:	Technology	stack
32
• Lua	5.1+,	Luajit	2.0
• lua-websockets	(which	uses	luasocket	under	the	hood)
• lua-ev
• lua-rapidjson
• lua-MessagePack	(optional)
Wiola:	WAMP	router	in	Lua
33
Wiola:	WAMP	router	in	Lua
• Works	on	top	of	Nginx/Lua	module
33
Wiola:	WAMP	router	in	Lua
• Works	on	top	of	Nginx/Lua	module
• Uses	Redis	for	runtime	storage
33
Wiola:	WAMP	router	in	Lua
• Works	on	top	of	Nginx/Lua	module
• Uses	Redis	for	runtime	storage
• Supports	JSON	and	Msgpack	serializers
33
Wiola:	WAMP	router	in	Lua
• Works	on	top	of	Nginx/Lua	module
• Uses	Redis	for	runtime	storage
• Supports	JSON	and	Msgpack	serializers
• Supports	a	number	of	features	from	Advanced	Profile
33
Wiola:	WAMP	router	in	Lua
• Works	on	top	of	Nginx/Lua	module
• Uses	Redis	for	runtime	storage
• Supports	JSON	and	Msgpack	serializers
• Supports	a	number	of	features	from	Advanced	Profile
• TODO:	Raw	socket	transport
• TODO:	Meta	API
• TODO:	lua-resty-postgres
33
Wiola:	Technology	stack
34
Wiola:	Technology	stack
34
• Nginx	or	OpenResty,	simply	put	lua-nginx-module
• lua-resty-websocket
• lua-resty-redis
• Redis	Server
• lua-rapidjson
• lua-resty-hmac	(optional,	is	required	for	WAMP-CRA)
• lua-MessagePack	(optional)
Wiola:	Nginx	config
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:	Common	scheme
36
Web	
Client
init_by_lua
headers_filter_by_lua
content_by_lua
Redis	
Server
Wiola:	JSON	caveats	and	limitations
37
Wiola:	JSON	caveats	and	limitations
• cJSON
37
Wiola:	JSON	caveats	and	limitations
• cJSON
• you	cannot	specify	how	to	serialize	empty	tables
37
Wiola:	JSON	caveats	and	limitations
• cJSON
• you	cannot	specify	how	to	serialize	empty	tables
• lua-resty-libcjson
37
Wiola:	JSON	caveats	and	limitations
• cJSON
• you	cannot	specify	how	to	serialize	empty	tables
• lua-resty-libcjson
• not	able	to	work	with	large	numbers	(int	>	32bit)
37
Wiola:	JSON	caveats	and	limitations
• cJSON
• you	cannot	specify	how	to	serialize	empty	tables
• lua-resty-libcjson
• not	able	to	work	with	large	numbers	(int	>	32bit)
lua-rapidjson
37
Wiola:	JSON	caveats	and	limitations
• cJSON
• you	cannot	specify	how	to	serialize	empty	tables
• lua-resty-libcjson
• not	able	to	work	with	large	numbers	(int	>	32bit)
lua-rapidjson
• So	far,	no	new	problems	have	been	found	:)
37
Wiola:	Runtime	storage	options
38
Wiola:	Runtime	storage	options
38
• Global	variables	in	memory
Wiola:	Runtime	storage	options
38
• Global	variables	in	memory
• are	created	every	time	on	request	handler
Wiola:	Runtime	storage	options
38
• Global	variables	in	memory
• are	created	every	time	on	request	handler
• problems	with	concurrent	requests
Wiola:	Runtime	storage	options
38
• Global	variables	in	memory
• are	created	every	time	on	request	handler
• problems	with	concurrent	requests
• Module	variables	loaded	in	init_by_lua
Wiola:	Runtime	storage	options
38
• Global	variables	in	memory
• are	created	every	time	on	request	handler
• problems	with	concurrent	requests
• Module	variables	loaded	in	init_by_lua
• You	can	read	in	all	workers
Wiola:	Runtime	storage	options
38
• Global	variables	in	memory
• are	created	every	time	on	request	handler
• problems	with	concurrent	requests
• Module	variables	loaded	in	init_by_lua
• You	can	read	in	all	workers
• But	the	write,	thanks	to	CoW,	will	create	a	copy	of	the	module	for	the	VM
Wiola:	Runtime	storage	options
38
• Global	variables	in	memory
• are	created	every	time	on	request	handler
• problems	with	concurrent	requests
• Module	variables	loaded	in	init_by_lua
• You	can	read	in	all	workers
• But	the	write,	thanks	to	CoW,	will	create	a	copy	of	the	module	for	the	VM
• ngx.shared.DICT
Wiola:	Runtime	storage	options
38
• Global	variables	in	memory
• are	created	every	time	on	request	handler
• problems	with	concurrent	requests
• Module	variables	loaded	in	init_by_lua
• You	can	read	in	all	workers
• But	the	write,	thanks	to	CoW,	will	create	a	copy	of	the	module	for	the	VM
• ngx.shared.DICT
• The	size	of	each	dictionary	is	specified	in	the	config	file	and	can	not	be	changed
Wiola:	Runtime	storage	options
38
• Global	variables	in	memory
• are	created	every	time	on	request	handler
• problems	with	concurrent	requests
• Module	variables	loaded	in	init_by_lua
• You	can	read	in	all	workers
• But	the	write,	thanks	to	CoW,	will	create	a	copy	of	the	module	for	the	VM
• ngx.shared.DICT
• The	size	of	each	dictionary	is	specified	in	the	config	file	and	can	not	be	changed
External	storage:	Redis,	Memcache,	PostgreSQL,	MySQL	and	others
Wiola:	Особенности.	lua_code_cache
39
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• it	is	convenient	to	debug	the	code
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• it	is	convenient	to	debug	the	code
• every	require()	is	executed	again	in	each	request
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• it	is	convenient	to	debug	the	code
• every	require()	is	executed	again	in	each	request
• Even	the	modules	loaded	into	init_by_lua	are	re-executed
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• it	is	convenient	to	debug	the	code
• every	require()	is	executed	again	in	each	request
• Even	the	modules	loaded	into	init_by_lua	are	re-executed
• lua_code_cache	on;
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• it	is	convenient	to	debug	the	code
• every	require()	is	executed	again	in	each	request
• Even	the	modules	loaded	into	init_by_lua	are	re-executed
• lua_code_cache	on;
• for	production	environment
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• it	is	convenient	to	debug	the	code
• every	require()	is	executed	again	in	each	request
• Even	the	modules	loaded	into	init_by_lua	are	re-executed
• lua_code_cache	on;
• for	production	environment
• each	require()	is	executed	once	and	is	cached
Wiola:	Особенности.	lua_code_cache
39
• lua_code_cache	off;
• it	is	convenient	to	debug	the	code
• every	require()	is	executed	again	in	each	request
• Even	the	modules	loaded	into	init_by_lua	are	re-executed
• lua_code_cache	on;
• for	production	environment
• each	require()	is	executed	once	and	is	cached
• whenever	you	change	the	code,	you	need	to	reload	nginx
Wiola:	Publication	in	luarocks,	opm
40
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
- 	lua-resty-websocket
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
- 	lua-resty-websocket
- 	lua-resty-redis
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	accurate	to	
"reverse":
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	accurate	to	
"reverse":
✓	lua-resty-websocket
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	accurate	to	
"reverse":
✓	lua-resty-websocket
✓	lua-resty-redis
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	accurate	to	
"reverse":
✓	lua-resty-websocket
✓	lua-resty-redis
- 	rapidjson
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	accurate	to	
"reverse":
✓	lua-resty-websocket
✓	lua-resty-redis
- 	rapidjson
✓	lua-resty-hmac
Wiola:	Publication	in	luarocks,	opm
40
• luarocks:	there	is	one	part	of	
the	dependencies,	there	is	no	
other:
- 	lua-resty-websocket
- 	lua-resty-redis
✓	rapidjson
✓	lua-resty-hmac
✓	lua-messagepack
• opm	(OpenResty	Package	
Manager):	accurate	to	
"reverse":
✓	lua-resty-websocket
✓	lua-resty-redis
- 	rapidjson
✓	lua-resty-hmac
- 	lua-messagepack
Useful	links	about	WAMP
41
Useful	links	about	WAMP
• WAMP	main	site:	http://wamp-proto.org/
• WAMP	spec	on	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:	Conclusion
42
WAMP:	Conclusion
• A	simple	and	open	Protocol
42
WAMP:	Conclusion
• A	simple	and	open	Protocol
• RPC	and	PubSub	in	one	transport/protocol
42
WAMP:	Conclusion
• A	simple	and	open	Protocol
• RPC	and	PubSub	in	one	transport/protocol
• Any	transport	and	serialization
42
WAMP:	Conclusion
• A	simple	and	open	Protocol
• RPC	and	PubSub	in	one	transport/protocol
• Any	transport	and	serialization
• Allows	you	to	build	distributed	applications	with	loosely	coupled	
components
42
WAMP:	Conclusion
• A	simple	and	open	Protocol
• RPC	and	PubSub	in	one	transport/protocol
• Any	transport	and	serialization
• Allows	you	to	build	distributed	applications	with	loosely	coupled	
components
• There	are	implementations	in	many	languages
42
WAMP:	Conclusion
• A	simple	and	open	Protocol
• RPC	and	PubSub	in	one	transport/protocol
• Any	transport	and	serialization
• Allows	you	to	build	distributed	applications	with	loosely	coupled	
components
• There	are	implementations	in	many	languages
• Open	source
42
WAMP:	Conclusion
• A	simple	and	open	Protocol
• RPC	and	PubSub	in	one	transport/protocol
• Any	transport	and	serialization
• Allows	you	to	build	distributed	applications	with	loosely	coupled	
components
• There	are	implementations	in	many	languages
• Open	source
• A	small	but	friendly	community
42
WAMP:	Conclusion
43
WAMP:	Conclusion
• Useful	architectural	solution
43
WAMP:	Conclusion
• Useful	architectural	solution
• A	great	option	for	your	IoT	project!	(IMHO:	better	than	MQTT)
43
WAMP:	Conclusion
• Useful	architectural	solution
• A	great	option	for	your	IoT	project!	(IMHO:	better	than	MQTT)
• Try	WAMP:
43
WAMP:	Conclusion
• Useful	architectural	solution
• A	great	option	for	your	IoT	project!	(IMHO:	better	than	MQTT)
• Try	WAMP:
• Already	have	nginx/openresty?	—	try	Wiola	(bit.ly/wiola-router)
43
WAMP:	Conclusion
• Useful	architectural	solution
• A	great	option	for	your	IoT	project!	(IMHO:	better	than	MQTT)
• Try	WAMP:
• Already	have	nginx/openresty?	—	try	Wiola	(bit.ly/wiola-router)
• Are	you	using	a	docker?
43
WAMP:	Conclusion
• Useful	architectural	solution
• A	great	option	for	your	IoT	project!	(IMHO:	better	than	MQTT)
• Try	WAMP:
• Already	have	nginx/openresty?	—	try	Wiola	(bit.ly/wiola-router)
• Are	you	using	a	docker?
• docker	pull	421p/wiola
43
WAMP:	Conclusion
• Useful	architectural	solution
• A	great	option	for	your	IoT	project!	(IMHO:	better	than	MQTT)
• Try	WAMP:
• Already	have	nginx/openresty?	—	try	Wiola	(bit.ly/wiola-router)
• Are	you	using	a	docker?
• docker	pull	421p/wiola
• docker	pull	crossbario/crossbar
43
WAMP:	Conclusion
• Useful	architectural	solution
• A	great	option	for	your	IoT	project!	(IMHO:	better	than	MQTT)
• Try	WAMP:
• Already	have	nginx/openresty?	—	try	Wiola	(bit.ly/wiola-router)
• Are	you	using	a	docker?
• docker	pull	421p/wiola
• docker	pull	crossbario/crossbar
• WAMP	client	for	every	taste	and	color	(wamp-proto.org/implementations/)
43
Thank	you	for	attention!
And	your	questions	:)
44
Konstantin Burkalev
• Mail: kostik@ksdaemon.ru
• Twitter: @KSDaemon
• GitHub: KSDaemon
• Blog: blog.ksdaemon.ru
• SDCast: sdcast.ksdaemon.ru
1 of 204

Recommended

HTTP/2: What's new? by
HTTP/2: What's new? HTTP/2: What's new?
HTTP/2: What's new? Piet van Dongen
58 views62 slides
Stream processing in python with Apache Samza and Beam by
Stream processing in python with Apache Samza and BeamStream processing in python with Apache Samza and Beam
Stream processing in python with Apache Samza and BeamHai Lu
832 views30 slides
OSDC 2019 | Terraform best practices with examples and arguments by Anton Bab... by
OSDC 2019 | Terraform best practices with examples and arguments by Anton Bab...OSDC 2019 | Terraform best practices with examples and arguments by Anton Bab...
OSDC 2019 | Terraform best practices with examples and arguments by Anton Bab...NETWAYS
176 views81 slides
Advanced Internet of Things firmware engineering with Thingsquare and Contiki... by
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...Advanced Internet of Things firmware engineering with Thingsquare and Contiki...
Advanced Internet of Things firmware engineering with Thingsquare and Contiki...Adam Dunkels
8.5K views54 slides
Monitorama 2015 Netflix Instance Analysis by
Monitorama 2015 Netflix Instance AnalysisMonitorama 2015 Netflix Instance Analysis
Monitorama 2015 Netflix Instance AnalysisBrendan Gregg
34.8K views69 slides
Samza portable runner for beam by
Samza portable runner for beamSamza portable runner for beam
Samza portable runner for beamHai Lu
164 views37 slides

More Related Content

What's hot

Building the Internet of Things with Thingsquare and Contiki - day 1, part 2 by
Building the Internet of Things with Thingsquare and Contiki - day 1, part 2Building the Internet of Things with Thingsquare and Contiki - day 1, part 2
Building the Internet of Things with Thingsquare and Contiki - day 1, part 2Adam Dunkels
60.3K views46 slides
Going Beyond UDP Acceleration - SLide Deck by
Going Beyond UDP Acceleration - SLide DeckGoing Beyond UDP Acceleration - SLide Deck
Going Beyond UDP Acceleration - SLide DeckFileCatalyst
616 views12 slides
Rooster Tech Talk by
Rooster Tech TalkRooster Tech Talk
Rooster Tech TalkChris Johnson
627 views30 slides
Can you trust Neutron? by
Can you trust Neutron?Can you trust Neutron?
Can you trust Neutron?salv_orlando
1.4K views25 slides
fast file transfer - FileCatalyst vs FTP by
fast file transfer - FileCatalyst vs FTPfast file transfer - FileCatalyst vs FTP
fast file transfer - FileCatalyst vs FTPFileCatalyst
715 views11 slides
Accelerate file transfers with a software defined media network by
Accelerate file transfers with a software defined media network Accelerate file transfers with a software defined media network
Accelerate file transfers with a software defined media network FileCatalyst
741 views35 slides

What's hot(20)

Building the Internet of Things with Thingsquare and Contiki - day 1, part 2 by Adam Dunkels
Building the Internet of Things with Thingsquare and Contiki - day 1, part 2Building the Internet of Things with Thingsquare and Contiki - day 1, part 2
Building the Internet of Things with Thingsquare and Contiki - day 1, part 2
Adam Dunkels60.3K views
Going Beyond UDP Acceleration - SLide Deck by FileCatalyst
Going Beyond UDP Acceleration - SLide DeckGoing Beyond UDP Acceleration - SLide Deck
Going Beyond UDP Acceleration - SLide Deck
FileCatalyst616 views
Can you trust Neutron? by salv_orlando
Can you trust Neutron?Can you trust Neutron?
Can you trust Neutron?
salv_orlando1.4K views
fast file transfer - FileCatalyst vs FTP by FileCatalyst
fast file transfer - FileCatalyst vs FTPfast file transfer - FileCatalyst vs FTP
fast file transfer - FileCatalyst vs FTP
FileCatalyst715 views
Accelerate file transfers with a software defined media network by FileCatalyst
Accelerate file transfers with a software defined media network Accelerate file transfers with a software defined media network
Accelerate file transfers with a software defined media network
FileCatalyst741 views
How to build a Neutron Plugin (stadium edition) by Salvatore Orlando
How to build a Neutron Plugin (stadium edition)How to build a Neutron Plugin (stadium edition)
How to build a Neutron Plugin (stadium edition)
Salvatore Orlando744 views
How to Reduce Database Load with Sparse Branches by Perforce
How to Reduce Database Load with Sparse BranchesHow to Reduce Database Load with Sparse Branches
How to Reduce Database Load with Sparse Branches
Perforce744 views
From a Kafkaesque Story to The Promised Land at LivePerson by LivePerson
From a Kafkaesque Story to The Promised Land at LivePersonFrom a Kafkaesque Story to The Promised Land at LivePerson
From a Kafkaesque Story to The Promised Land at LivePerson
LivePerson3.2K views
Step-by-Step Introduction to Apache Flink by Slim Baltagi
Step-by-Step Introduction to Apache Flink Step-by-Step Introduction to Apache Flink
Step-by-Step Introduction to Apache Flink
Slim Baltagi22.7K views
Preparing for SRE Interviews by Shivam Mitra
Preparing for SRE InterviewsPreparing for SRE Interviews
Preparing for SRE Interviews
Shivam Mitra6.1K views
Repeating History...On Purpose...with Elixir by Barry Jones
Repeating History...On Purpose...with ElixirRepeating History...On Purpose...with Elixir
Repeating History...On Purpose...with Elixir
Barry Jones2.4K views
Open source tools for optimizing your peering infrastructure @ DE-CIX TechMee... by Daniel Czerwonk
Open source tools for optimizing your peering infrastructure @ DE-CIX TechMee...Open source tools for optimizing your peering infrastructure @ DE-CIX TechMee...
Open source tools for optimizing your peering infrastructure @ DE-CIX TechMee...
Daniel Czerwonk134 views
Introduction to Kafka by Ducas Francis
Introduction to KafkaIntroduction to Kafka
Introduction to Kafka
Ducas Francis1.4K views
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1) by Ahmed El-Arabawy
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Ahmed El-Arabawy862 views
Integrating Funambol with CalDAV and LDAP by Roberto Polli
Integrating Funambol with CalDAV and LDAPIntegrating Funambol with CalDAV and LDAP
Integrating Funambol with CalDAV and LDAP
Roberto Polli1.5K views

Similar to WAMP as a platform for composite SOA applications and its implementation on Lua

Adding Real-time Features to PHP Applications by
Adding Real-time Features to PHP ApplicationsAdding Real-time Features to PHP Applications
Adding Real-time Features to PHP ApplicationsRonny López
2.5K views78 slides
VA Smalltalk Update by
VA Smalltalk UpdateVA Smalltalk Update
VA Smalltalk UpdateESUG
154 views39 slides
Apache Curator: Past, Present and Future by
Apache Curator: Past, Present and FutureApache Curator: Past, Present and Future
Apache Curator: Past, Present and FutureJordan Zimmerman
2.9K views30 slides
Enterprise Messaging with RabbitMQ.pdf by
Enterprise Messaging with RabbitMQ.pdfEnterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdfOrtus Solutions, Corp
90 views52 slides
7 Apache Process Cloudstack Developer Day by
7 Apache Process Cloudstack Developer Day7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer DayKimihiko Kitase
1.1K views17 slides
Cloud Services Powered by IBM SoftLayer and NetflixOSS by
Cloud Services Powered by IBM SoftLayer and NetflixOSSCloud Services Powered by IBM SoftLayer and NetflixOSS
Cloud Services Powered by IBM SoftLayer and NetflixOSSaspyker
4.1K views61 slides

Similar to WAMP as a platform for composite SOA applications and its implementation on Lua(20)

Adding Real-time Features to PHP Applications by Ronny López
Adding Real-time Features to PHP ApplicationsAdding Real-time Features to PHP Applications
Adding Real-time Features to PHP Applications
Ronny López2.5K views
VA Smalltalk Update by ESUG
VA Smalltalk UpdateVA Smalltalk Update
VA Smalltalk Update
ESUG154 views
Apache Curator: Past, Present and Future by Jordan Zimmerman
Apache Curator: Past, Present and FutureApache Curator: Past, Present and Future
Apache Curator: Past, Present and Future
Jordan Zimmerman2.9K views
7 Apache Process Cloudstack Developer Day by Kimihiko Kitase
7 Apache Process Cloudstack Developer Day7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer Day
Kimihiko Kitase1.1K views
Cloud Services Powered by IBM SoftLayer and NetflixOSS by aspyker
Cloud Services Powered by IBM SoftLayer and NetflixOSSCloud Services Powered by IBM SoftLayer and NetflixOSS
Cloud Services Powered by IBM SoftLayer and NetflixOSS
aspyker4.1K views
OpenStack Networking: Developing and Delivering a Commercial Solution for Lo... by Radware
OpenStack Networking:  Developing and Delivering a Commercial Solution for Lo...OpenStack Networking:  Developing and Delivering a Commercial Solution for Lo...
OpenStack Networking: Developing and Delivering a Commercial Solution for Lo...
Radware2.2K views
What is Kafka & why is it Important? (UKOUG Tech17, Birmingham, UK - December... by Lucas Jellema
What is Kafka & why is it Important? (UKOUG Tech17, Birmingham, UK - December...What is Kafka & why is it Important? (UKOUG Tech17, Birmingham, UK - December...
What is Kafka & why is it Important? (UKOUG Tech17, Birmingham, UK - December...
Lucas Jellema783 views
Integrating Taverna Player into Scratchpads by Robert Haines
Integrating Taverna Player into ScratchpadsIntegrating Taverna Player into Scratchpads
Integrating Taverna Player into Scratchpads
Robert Haines909 views
Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at... by Big Data Spain
Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at...Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at...
Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at...
Big Data Spain1.7K views
Immutable Infrastructure: the new App Deployment by Axel Fontaine
Immutable Infrastructure: the new App DeploymentImmutable Infrastructure: the new App Deployment
Immutable Infrastructure: the new App Deployment
Axel Fontaine1.3K views
Contributing to OpenStack by devkulkarni
Contributing to OpenStackContributing to OpenStack
Contributing to OpenStack
devkulkarni453 views
Building real time applications with Symfony2 by Antonio Peric-Mazar
Building real time applications with Symfony2Building real time applications with Symfony2
Building real time applications with Symfony2
Antonio Peric-Mazar3.4K views
Scalable Machine Learning in R and Python with H2O by Sri Ambati
Scalable Machine Learning in R and Python with H2OScalable Machine Learning in R and Python with H2O
Scalable Machine Learning in R and Python with H2O
Sri Ambati2.1K views
Building Modern Digital Services on Scalable Private Government Infrastructur... by Andrés Colón Pérez
Building Modern Digital Services on Scalable Private Government Infrastructur...Building Modern Digital Services on Scalable Private Government Infrastructur...
Building Modern Digital Services on Scalable Private Government Infrastructur...
DevOps Docs: Fast, Great Content for the Cloud by vanessa_wilburn
DevOps Docs: Fast, Great Content for the CloudDevOps Docs: Fast, Great Content for the Cloud
DevOps Docs: Fast, Great Content for the Cloud
vanessa_wilburn326 views
Handling 1 Billion Requests/hr with Minimal Latency Using Docker by Matomy
Handling 1 Billion Requests/hr with Minimal Latency Using DockerHandling 1 Billion Requests/hr with Minimal Latency Using Docker
Handling 1 Billion Requests/hr with Minimal Latency Using Docker
Matomy3.2K views
AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ... by Lucas Jellema
AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ...AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ...
AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ...
Lucas Jellema3.4K views

Recently uploaded

Renewal Projects in Seismic Construction by
Renewal Projects in Seismic ConstructionRenewal Projects in Seismic Construction
Renewal Projects in Seismic ConstructionEngineering & Seismic Construction
5 views8 slides
SUMIT SQL PROJECT SUPERSTORE 1.pptx by
SUMIT SQL PROJECT SUPERSTORE 1.pptxSUMIT SQL PROJECT SUPERSTORE 1.pptx
SUMIT SQL PROJECT SUPERSTORE 1.pptxSumit Jadhav
22 views26 slides
Proposal Presentation.pptx by
Proposal Presentation.pptxProposal Presentation.pptx
Proposal Presentation.pptxkeytonallamon
67 views36 slides
ASSIGNMENTS ON FUZZY LOGIC IN TRAFFIC FLOW.pdf by
ASSIGNMENTS ON FUZZY LOGIC IN TRAFFIC FLOW.pdfASSIGNMENTS ON FUZZY LOGIC IN TRAFFIC FLOW.pdf
ASSIGNMENTS ON FUZZY LOGIC IN TRAFFIC FLOW.pdfAlhamduKure
8 views11 slides
MK__Cert.pdf by
MK__Cert.pdfMK__Cert.pdf
MK__Cert.pdfHassan Khan
19 views1 slide
Pitchbook Repowerlab.pdf by
Pitchbook Repowerlab.pdfPitchbook Repowerlab.pdf
Pitchbook Repowerlab.pdfVictoriaGaleano
6 views12 slides

Recently uploaded(20)

SUMIT SQL PROJECT SUPERSTORE 1.pptx by Sumit Jadhav
SUMIT SQL PROJECT SUPERSTORE 1.pptxSUMIT SQL PROJECT SUPERSTORE 1.pptx
SUMIT SQL PROJECT SUPERSTORE 1.pptx
Sumit Jadhav 22 views
ASSIGNMENTS ON FUZZY LOGIC IN TRAFFIC FLOW.pdf by AlhamduKure
ASSIGNMENTS ON FUZZY LOGIC IN TRAFFIC FLOW.pdfASSIGNMENTS ON FUZZY LOGIC IN TRAFFIC FLOW.pdf
ASSIGNMENTS ON FUZZY LOGIC IN TRAFFIC FLOW.pdf
AlhamduKure8 views
Design of Structures and Foundations for Vibrating Machines, Arya-ONeill-Pinc... by csegroupvn
Design of Structures and Foundations for Vibrating Machines, Arya-ONeill-Pinc...Design of Structures and Foundations for Vibrating Machines, Arya-ONeill-Pinc...
Design of Structures and Foundations for Vibrating Machines, Arya-ONeill-Pinc...
csegroupvn8 views
2023Dec ASU Wang NETR Group Research Focus and Facility Overview.pptx by lwang78
2023Dec ASU Wang NETR Group Research Focus and Facility Overview.pptx2023Dec ASU Wang NETR Group Research Focus and Facility Overview.pptx
2023Dec ASU Wang NETR Group Research Focus and Facility Overview.pptx
lwang78180 views
Searching in Data Structure by raghavbirla63
Searching in Data StructureSearching in Data Structure
Searching in Data Structure
raghavbirla6317 views
Design_Discover_Develop_Campaign.pptx by ShivanshSeth6
Design_Discover_Develop_Campaign.pptxDesign_Discover_Develop_Campaign.pptx
Design_Discover_Develop_Campaign.pptx
ShivanshSeth649 views
Design of machine elements-UNIT 3.pptx by gopinathcreddy
Design of machine elements-UNIT 3.pptxDesign of machine elements-UNIT 3.pptx
Design of machine elements-UNIT 3.pptx
gopinathcreddy37 views
BCIC - Manufacturing Conclave - Technology-Driven Manufacturing for Growth by Innomantra
BCIC - Manufacturing Conclave -  Technology-Driven Manufacturing for GrowthBCIC - Manufacturing Conclave -  Technology-Driven Manufacturing for Growth
BCIC - Manufacturing Conclave - Technology-Driven Manufacturing for Growth
Innomantra 15 views
_MAKRIADI-FOTEINI_diploma thesis.pptx by fotinimakriadi
_MAKRIADI-FOTEINI_diploma thesis.pptx_MAKRIADI-FOTEINI_diploma thesis.pptx
_MAKRIADI-FOTEINI_diploma thesis.pptx
fotinimakriadi12 views
Web Dev Session 1.pptx by VedVekhande
Web Dev Session 1.pptxWeb Dev Session 1.pptx
Web Dev Session 1.pptx
VedVekhande17 views

WAMP as a platform for composite SOA applications and its implementation on Lua