現代は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 対応を謳っているだけあって、なかなか頑張っていますね。