Kemal はCrystal-langで書かれた Sinatra likeな高速Webアプリケーションフレームワークです。
Githubに掲載されているベンチマーク結果を見ると、100,238 rps 出るとか。速いです。あまりにも高速なので、きちんとした計測ツールを使わないと正しい計測ができません。MacOS環境のab
とかでは計測ツール側のオーバーヘッドが大きくて1000rps程度で測定限界に達してしまいます。
作者のsdogruyol氏に聞いたところ、「wrk
を使え」ということだったので、brew install wrk
で導入します。
計測用のserver.cr
。Sinatraっぽい。
require "kemal"
logging false
get "/" do
"ok"
end
ログは切ります。
kemalはshards
で導入します。以下 shard.yml
dependencies:
kemal:
github: sdogruyol/kemal
shards install
で ok
releaseビルドしてproduction
環境で起動。
% crystal build --release server.cr
% ./server -e production
top -o cpu
でCPU使用率が高いプロセスがあれば停止しておきます。あとは wrk
で測定です。
% wrk -c 128 -d 10 http://127.0.0.1:3000
Running 10s test @ http://127.0.0.1:3000
2 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.55ms 371.64us 10.96ms 81.07%
Req/Sec 41.33k 1.85k 45.73k 82.00%
822074 requests in 10.00s, 69.78MB read
Requests/sec: 82181.62
Transfer/sec: 6.98MB
82181.62 rps。なかなかいい値が出ました :)
検証環境は Macbook Pro 13 (CPU 3.1 GHz Intel Core i7, RAM 16 GB 1867 MHz DDR3) です。