s: a scripting language for high-performance restful web services
DESCRIPTION
S: a Scripting Language for High-Performance RESTful Web Services. Daniele Bonetta Achille Peternier Cesare Pautasso Walter Binder http://sosoa.inf.unisi.ch. SOSOA. S elf- O rganizing S ervice O riented A rchitectures Exploring novel , self-adapting approaches to the design of SOAs - PowerPoint PPT PresentationTRANSCRIPT
SAN FRANCISCO, CA, USA
S: a Scripting Language for High-Performance RESTful Web Services
Daniele Bonetta Achille Peternier Cesare Pautasso Walter Binderhttp://sosoa.inf.unisi.ch
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 2
SOSOA
• Self-Organizing Service Oriented Architectures
• Exploring novel, self-adapting approaches to the design of SOAs
• Overcome limitations of current SOAs performance on modern infrastructures• Multicore• Cloud
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
RESTful Web Services
Client Client Client
RESTful Web Services
Resource
Resource
Resource
Resource
HTTP HTTP
HTTP
CHANGE 2012 – San Francisco, CA, USA
• Architectural style: Client/Server architecture Stateless interaction Resources • URIs
Uniform HTTP interface• GET, PUT, POST, DELETE
3
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 4
HTTP uniform interface
HTTP Verb Properties Parallelism
GET Idempotent, safe, stateless Yes
PUT Idempotent, side-effects If stateless
DELETE Idempotent, side-effects If stateless
POST side-effects If stateless
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
Goal
“Design a new language to develop and compose RESTful Web Services
that automatically scale in the number of clients and cores using
safe implicit parallelism”
CHANGE 2012 – San Francisco, CA, USA 5
S
S framework
RESTful Web Services
Multicore server
S languageS
compiler
S runtime
RESTful Web Services
Multicore server
S languageS
compiler
S runtime
RESTful Web Services
Multicore server
“Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.”
(source: www.nodejs.org)
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
• Single process• Based on asynchronous event-loop
and callbacks
on (‘someEvent’, doSomething(req, res))
on (‘somethingElse’, function(req, res) { // ...})
CHANGE 2012 – San Francisco, CA, USA 10
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
• Asynchronous non-blocking I/O ✔• No locks/synchronization ✔
• Sequential composition: nested callbacks ✘
• Long callbacks problem ✘• Limited support for parallelism ✘
CHANGE 2012 – San Francisco, CA, USA 11
S language
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
S design principles
• High-level architectural abstractions Based on services and resources No threads/processes• No synchronization/locks
• Simple, clean programming model Allows blocking function calls Constructs for parallel I/O REST/HTTP as part of the language
CHANGE 2012 – San Francisco, CA, USA 13
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
S Architecture
S ServiceS
ResourceS
ResourceS
Resource
NodeJS NodeJS NodeJS NodeJS NodeJS
S IPC Communication Framework
Non-blocking I/O
S code
AsynchronousNon-blockingNodeJS code
CHANGE 2012 – San Francisco, CA, USA 14
S language
S runtime
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
S Hello World
res ‘/hello’ on GET { respond ‘World!’}
ResourceURI HTTP
method
JavaScript or S code
CHANGE 2012 – San Francisco, CA, USA 15
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
S Hello World
res ‘/hello’ on GET { respond ‘World!’}
GET /hello HTTP/1.1User-Agent: curlAccept: */*Host: your.host
ClientS
Service
HTTP
CHANGE 2012 – San Francisco, CA, USA 16
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
S Hello World
res ‘/hello’ on GET { respond ‘World!’}
ClientS
Service
HTTP/1.1 200 OKContent-Type: text/plain
World!
HTTP
CHANGE 2012 – San Francisco, CA, USA 17
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
S Compositions
res ‘/hello1’ on GET { respond get ‘http://www.site.com’}
res ‘/hello2’ on GET { respond get ‘/hello1’}
Native HTTPsupport
CHANGE 2012 – San Francisco, CA, USA 18
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
S Compositions
res ‘/hello1’ on GET { respond get ‘http://www.site.com’}
res ‘/hello2’ on GET { respond get ‘/hello1’}
Client /hello2 /hello1 www.site.comHTTP HTTP HTTP
CHANGE 2012 – San Francisco, CA, USA 19
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
Parallelresources
Atomic and
consistentblocks
S Parallelism
res ‘/res1’ on GET { // ... // CPU-bound blocking call: var a = foo() respond a}
res ‘/res2’ on GET { // ... res r = ‘http://www.google.ch/search=@’
// I/O bound operation: boo = r.get(‘key’) respond boo}
CHANGE 2012 – San Francisco, CA, USA 20
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 21
Stateful services
res ‘/helloState’ { state s = ‘world’ on GET { respond ‘hello’ + s } on PUT { s = req.name }}
State shared between callbacksRead-only
operations
Write operatio
ns
S compiler
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 23
Adaptivity
Worker #1/res
Request handler processor
Client
ClientHTTP
Router
Requests
Responses
HTTPClientClient
ClientClient
Worker #n
…
Parallelism degree controller (PI)
HTTP
S WorkerS
WorkerS Worker
From other workers
HTTP
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 24
I/O-bound operations
• Synchronous I/O operations are desynchronized by the S compiler using multiple callbacks
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 25
Sequential composition
res ‘/example’ on GET { var a = get ‘www.google.com’ var b = get ‘www.bing.com’ var c = get ‘www.yahoo.com’ respond a+b+c} S
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 26
Sequential composition
Shttp.createServer(function(creq, cres) { if (creq.method == ‘GET’ && creq.url == ‘/example’) { var a, b, c = ‘’ startGet(‘www.google.com’, function(req, res) { a = res.body startGet(‘www.bing.com’, function(req, res) { b = res.body startGet(‘www.yahoo.com’, function(req, res) { c = res.body cres.end(a+b+c) }) }) }) }})
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 27
Parallel composition
Sres ‘/example’ on GET { par { var a = get ‘www.google.com’ var b = get ‘www.bing.com’ var c = put ‘www.site.com/?d=’+b respond a+c }}
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 28
Parallel composition
res ‘/example’ on GET { par { var a = get ‘www.google.com’ var b = get ‘www.bing.com’ var c = put ‘www.site.com/?d=’+b respond a+c }}
get get
var a=… var b=…
var c=…
put
respond
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 29
Parallel compositionhttp.createServer(function(req, res) { if (creq.method == ‘GET’ && creq.url == ‘/example’) { var G = {} on (‘done1’, function(result) { G.a = result; emit(‘done3’) }) on (‘done2’, function(result) { G.b = result; startPut(‘www.site.com./d?=‘ + G.b, ‘done4’) }) on (‘done4’, function(result) { G.c = result; emit(‘done5’) }) onAll([‘done3’,‘done5’], function() { res.end(G.a + G.c) }) startGet(‘www.google.com’, ‘done1’) startGet(‘www.bing.com’, ‘done2’) }})
S
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 30
Two levels of parallelism
Number of Workers
Asyn
c I/O
CPU-bound
I/O-bound
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 31
Example: Crawler
Parallel recursive crawling
Result accumulation
service crawl { res ‘/crawl‘ on PUT { var filter = require(‘HTMLparser.js’).filter res store = ‘/store?value=@’ res crawl = ‘/crawl?list=@’
pfor(var i in req.list) { var list = filter(get req.list[i]) par { store.put(list) crawl.put(list) } } } res ‘/store‘ { state s = ‘’ on PUT { s += req.value } on GET { respond s } }}
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 32
Example: Crawler RT
L = [url1, url2,
…] /storeRouter
State
/url/url/url
Worker #1
Router/crawl
…Worker
#n
Worker #2
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 33
Crawler performance
24 cores server
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 34
Challenges
/resRouter …
Worker #1
Worker #n
/resRouter …
Worker #1
Worker #n
/resRouter …
Worker #1
Worker #n
Monitor and controller
Monitor and controller
Monitor and controller
CPU I/O
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 35
Challenges
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 36
Challenges
Client HTTP
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 37
Challenges
Client
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 38
Thank you
D. Bonetta, A. Peternier, C. Pautasso, W. Binder S: a Scripting Language for High-Performance RESTful Web Services17th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming (PPoPP 2012), pp. 97-106, New Orleans, LA, USA, 2012 S
http://sosoa.inf.unisi.ch
Computing in Heterogeneous, Autonomous 'N' Goal-oriented Environments
CHANGE 2012 – San Francisco, CA, USA 39
Appendix