Go弱の会でgo vs node.jsのパフォーマンスベンチを取った話をしてきた。 #gojaku
Go弱の会に行ってきました。今回はnitrous.ioの話、revelの話、Dartの話がありました。
僕も少しだけしゃべったので、その話を含めてやったことをまとめます。
僕が話した内容
Go弱っぽく、Webアプリを作成し、そのベンチマークを取ってみました。
作ったアプリ
angularjs と goweb(RestFul server) と mgo (mongo driver) でツイッターっぽいアプリを作ってみました。
Goweb製(heroku) :
http://goweb-angular.herokuapp.com/app/#/
githubはここでアップしてます。
GitHub :
https://github.com/yosuke-furukawa/goweb-sample
ちなみに比較対象のkoa製の方もherokuにアップされてます。
Koa製 (heroku):
ベンチ結果
GET結果:
POST結果:
平均 :
system | GET(reqs/sec) | POST(reqs/sec) |
---|---|---|
goweb(go) | 1829 | 1491 |
koa(node.js) | 1332 | 470 |
結果として、GETにおいてもPOSTにおいてもgolangの勝利、下馬評通りの結果になりました。
とはいえ、node.jsもGETにおいてはgolangとそこまで変わらないレスポンスを返しているし、POSTには差はありますが、秒間470リクエストはそこまで悲観するような結果ではないかなと。
golangが速すぎますね。
おまけ
今回のベンチマークにはboomっていうgolang製のベンチマークツールを使いました。
boomはapache benchとやれることはほとんど同様なんですが、POST、PUT、DELETEが簡単に投げられるため、RESTFul APIと相性が良いので、積極的に使っていきたいですね。
boom 使い方まとめ
# install $ go get github.com/rakyll/boom # GET 100 requests 10 connects $ boom -n 100 -c 10 http://0.0.0.0:9090/tweets # POST 100 requests 10 connects $ boom -n 1000 -c 100 -T "application/json" -m POST -d '{"body":"abc"}' http://0.0.0.0:9090/tweets