Gazelle という新しいPlack::Handler(Server)をリリースしました
https://metacpan.org/release/Gazelle
前のISUCONの結果報告で「Chobi」として紹介していたものを名前を変更しました。
GazelleはnginxやApacheでreverse proxyを行うことを前提に書かれたPlack::Handlerです。nginxの後ろにunix domain socketを利用して配置した場合、”Hello World”のベンチマークで、Starmanの3倍、Starletの1.7倍程度高速に動作します。
一番左はnginxで静的ファイルを配信した場合のQPSです
ベンチマークの詳細はこちら↓です
https://github.com/kazeburo/Gazelle/wiki/Benchmark
特徴など
Gazelleは以下のような特徴をもっています
- HTTP/1.0のみをサポート。ただしKeepAliveはサポートしない。これにより実装がシンプルに
- io処理をすべてXSで記述。Perlのファイルハンドルは使わない
- Linuxでは
accept4(2)
を使う。accept4(2)
がサポートされていないプラットフォームではaccept(2)
を使います - kazuhoさんのpicohttpparserを使って高速にリクエストのパースを行う
accept
から最初のpacketを読み込み、ヘッダーをパースするまで1つのXSで書かれた関数内で処理する。Perlの処理が入らず、またZero Copyで動作する- レスポンスの書き出しは
writev(2)
を使う - Starletを使っているところはそのままの設定で入れ替え可能
その他、Starletと同じく
- Parallel::Prefork によるPreforkアーキテクチャ
- Server::Starterを使ってのhot deploy
一言でまとめると、kazuhoさんのソフトウェアで出来ているサーバです。既に某サービスの1台のサーバで使い始めたのでぜひ使ってみてください。