Some simple benchmarks of different HTTP servers in different languages
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
express
go
grizzly
node
results
.gitignore
LICENSE
README.md
run-load.sh
sysinfo.sh

README.md

http-server-benchmarks

This is a very basic benchmark suite to compare different HTTP server's performance. It is inspired by arcadius/java-rest-api-web-container-benchmark, but uses h2load instead of ab.

It works by running a predifined number of requests from a predefined number of concurrent clients against an HTTP server at localhost and measuring, among others, the execution time.

Currently, I included server implementations in Java (using Jersey with an embedded Grizzly server), Go (using net/http) and NodeJS (once using plain http package and again using the de-facto standard Express framework). All implementations are very basic REST APIs consisting of exactly one route, which exposes a static set of simple resources (Todo Items) as JSON. My results can be found in the results folder.

How to run

Requirements

Running

  1. Clone this repository
  2. Start an HTTP server on your local machine
  3. Adapt parameters in run-load.sh
    1. URL: The URL of your HTTP server's endpoint to be tested against
    2. NUM_REQUESTS: Total number of request to execute across all clients
    3. CONCURRENCY: Number of concurrent clients to perform requests
    4. THREADS: Number of CPU threads to use for h2load
  4. chmod +x run-load.sh
  5. ./run-load.sh
  6. View results.log

Java vs. Go vs. Node

Running this benchmark suite gave me the following results. To read more details about my test setup etc., please refer to this article.

License

MIT @ Ferdinand Mütsch