/scamper

A performance shootout for REST libraries and frameworks

Primary LanguageScala

Scamper is a collection of RESTful libraries and frameworks, organized as a testbed for comparing the raw performance characteristics of each.

Each implementation exposes the same three endpoints:

  • GET /fast blocks for 0 ms
  • GET /medium blocks for 150 ms
  • GET /slow blocks for 300 ms

Each endpoint responds with <h1>slept for { duration } ms</h1>, where duration is the actual amount of time spent blocking.

Each implementation runs on localhost:9000 and can be tested with a variety of tools, such as weighttp or JMeter.

Test results

For full test results, see the Wiki.

Fast Test

Getting started

Download scamper

git clone git://github.com/Versal/scamper.git

Install JMeter

http://jmeter.apache.org/

Install Node.js

brew install nodejs
npm install -g express
(cd scamper/node.js ; npm link express)

Install sbt (0.12.0 or newer)

https://github.com/harrah/xsbt/wiki/Getting-Started-Setup

Run and test each implementation

Each server can be tested with JMeter or weighttp:

jmeter -n -t scamper/load-test.jmx
jmeter -n -t scamper/fast-test.jmx
weighttp -n 500000 -c 20 -t 4 -k http://localhost:9000/fast
(cd scamper/blueeyes ; sbt "run --configFile blueeyes.config")
(cd scamper/finagle ; sbt run)
(cd scamper/lift ; sbt run)
(cd scamper/pinky ; sbt update run)
(cd scamper/play2 ; sbt start)
(cd scamper/play2-mini ; sbt run)
(cd scamper/spray ; sbt "project simple-http-server" run)
(cd scamper/servlet-3.0 ; sbt run)
(cd scamper/servlet-3.0-async ; sbt run)
(cd scamper/scalatra ; sbt run)
(ulimit -n 4096 ; cd scamper/node.js ; node app.js)
(cd scamper/finatra ; sbt run)
(cd scamper/rubble ; sbt run)