Starlet + Server::Stater で UNIX domain socketに対応しました
Starlet-0.21がリリースされました。
このバージョンからServer::Staterとの組み合わせでUNIX domain socketをListenすることができるようになりました。
$ start_server --path /tmp/app.sock -- plackup -s Starlet app.psgi
Server::Stater は以前からUNIX domain socketをサポートしていたのですが、Starlet側でうまくハンドリングできていなかったのを修正したのが今回のリリースです。
ベンチマーク
#plackconでの発表にもある通り、UNIX domain socketを使うとTCPで接続するよりもよいベンチマーク結果が得られます。
このベンチマークはEC2のm3.2xlargeを使い、nginxとStarletを以下のように起動してwrkを使って計測しました。
wrkの起動はこんな感じ。
$ ./wrk -c 300 -t 4 -d 10 http://localhost:8080/
TCPの場合
Starletの起動
$ start_server --port 5000 -- carton exec -- plackup -E production \ -s Starlet --max-reqs-per-child 5000 --min-reqs-per-child 4000 \ --max-workers 10 -a app.psgi
nginx.conf
upstream apps { server 127.0.0.1:5000; } server { listen 8080; server_name _; etag off; location / { proxy_set_header Host $host; proxy_pass http://apps; } }
UNIX domain socketの場合
Starletの起動
$ start_server --path /tmp/app.sock -- carton exec -- plackup -E production \ -s Starlet --max-reqs-per-child 5000 --min-reqs-per-child 4000 \ --max-workers 10 -a app.psgi
nginx.conf
upstream apps { server unix:/tmp/app.sock; } server { listen 8080; server_name _; etag off; location / { proxy_set_header Host $host; proxy_pass http://apps; } }
どうぞご利用くださいませ