Tuesday, August 30, 2011

Perfomance of Go as a web server on Amazon AWS

Continuing the series on performance and exploring the Go language I wanted to see how many requests/second I could get out of an Amazon micro instance.

I used Siege for the testing of the "Sutton" server, and using the same code that gives us this sort of response:

Document CompleteFully Loaded
Load TimeFirst ByteStart RenderDOM ElementsTimeRequestsBytes InTimeRequestsBytes In
First View0.355s0.321s0.383s310.355s13 KB0.597s38 KB
Repeat View0.279s0.240s0.259s310.279s13 KB0.290s23 KB

I also added some caching on the server side, to stop it regenerating the content every time.

Using Siege from a large instance (a small instance could not generate enough requests) I got the following results:

$ siege -c 40 -t 20s -d0 http://wimbledon.chart.is

Lifting the server siege...      done.
Transactions:       28178 hits
Availability:      100.00 %
Elapsed time:       19.78 secs
Data transferred:       68.07 MB
Response time:        0.03 secs
Transaction rate:     1424.57 trans/sec
Throughput:        3.44 MB/sec
Concurrency:       37.69
Successful transactions:       28178
Failed transactions:           0
Longest transaction:        1.51
Shortest transaction:        0.00

So over 1,000 requests/second on the smallest AWS instance! the server is running at 100% CPU so some simple performance analysis could yield some significant improvements. Also some more effort around making the benchmark more trustworthy, especially with higher numbers of concurrent requests.

No comments: