現代はjerseyを見失った時代だ
jsonengine のおかげで java の Restful な framework に興味津々。そこで色々と漁ってみました。すると...
JSONICとSlim3 DatastoreによるREST APIサービス - GeekFactory
JSONベースのRESTサーバにJerseyを使っているのですが、App Engineの実環境ではspin-up timeが長いので困っていました。mixiアプリの表示に10秒もかかると見る気が失せてしまいます。
とのことなので、実際どのくらいか試してみました。
こちらの (RESTful Webservices with Java and Jersey (JAX-RS) - Tutorial) Hello クラスをそのまま本番環境にデプロイして SpinUp 速度を簡単に計測してみました。
curl から
text/html: 0.00s user 0.01s system 0% cpu 5.132 total text/xml : 0.00s user 0.01s system 0% cpu 6.716 total
管理ページ の Logs から
text/html: 4823ms 6805cpu_ms ms=4824 cpu_ms=6805 api_cpu_ms=0 cpm_usd=0.189056 text/xml : 6413ms 7291cpu_ms ms=6414 cpu_ms=7292 api_cpu_ms=0 cpm_usd=0.202572
ということで、そんなにビックリな数字でもありません。そこそこのフレームワークでの最初の SpinUp は大体このくらいではないでしょうか。
ちなみに、jsonengine の場合
/_q/msg?sort=_createdAt.desc: 3455ms 3373cpu_ms 29api_cpu_ms ms=3456 cpu_ms=3373 api_cpu_ms=29 cpm_usd=0.093822
jsonengine の方が計測条件が悪い(クエリーが発生している)はずなので、Slim3 の速度は圧倒的ですね。
ただ、jersey などのフレームワークの場合、さまざまな restful な要求に応えるために色々実装していることを勘案すると、頑張っていると言えなくもありません。結局 TPO で選択することになるのでしょう。速度優先で、すべて自前でチューンできる方は文句無しで Slim3 なんでしょうけど(笑)
Restlet の「ソースの読みやすさや GAE・GWT への対応」に心惹かれるのですが、Jersey の「POJO を簡易に Restful にするシンプルさ」にも惹かれるものがありますね。
追記: Restlet でも試してみました。
こちらの (The full source code) をそのまま本番環境にデプロイして SpinUp 速度を簡単に計測してみました。
curl から
1回目: 0.00s user 0.01s system 0% cpu 2.405 total 2回目: 0.00s user 0.00s system 0% cpu 2.736 total
管理ページ の Logs から
1回目: 2388ms 2469cpu_ms ms=2388 cpu_ms=2469 api_cpu_ms=0 cpm_usd=0.068652 2回目: 1613ms 2177cpu_ms ms=1614 cpu_ms=2178 api_cpu_ms=0 cpm_usd=0.060551
Slim3 には及びませんが、GAE 対応を謳っているだけあって、なかなか頑張っていますね。