Jetty20周年を祝う9.3リリース,新たにHTTP/2をサポート

2015年6月12日,Jetty Projectは,彼らのフラッグシップ製品であるオープンソースの組込みアプリケーションサーバのバージョン9.3をリリースした。この日はプロジェクト開始から20周年の記念日でもある。今回のリリースの特徴は,HTTP/2サーバ(とクライアント)のサポート,最低バージョンをJava 8に設定したこと,Java NIOのさらなる統合,スケジューラの改訂などだ。また,SPDYネットワークサポートの廃止や,Jetty 9.2.xにあった400件以上のバグ修正も実施されている。

開発リーダのGreg Wilkins氏が,JettyのHTTP/2サポートについてブログ記事を書いている。その説明によれば,Jettyのスタートアップコマンドで指定するだけで,簡単にHTTP/2サポートを有効にすることができる。

$ java -jar $JETTY_HOME/start.jar --add-to-startd=http2,http2c

新たなコネクタやポートは生成されず,ポート8080と8443の既存コネクタにHTTP/2プロトコルが単に追加される仕組みだ。HTTP/2 は,最近のブラウザの最新バージョンであればサポートされている。ブラウザがHTTP/2をサポートしているか確認するには,http://caniuse.com/#feat=http2を参照すればよい。

Jettyの20年についてもっと詳しく知るべく,InfoQはGreg Wilkins氏に話を聞いた。

InfoQ: おめでとう,Greg。Jettyが20周年を祝えることになるとは,まったく思っていませんでしたよね!

本当ですね – もともとは,イシュートラッキング用Weアプリのモジュールのひとつとして開発を始めたので,興味を持たれるようなものだとは,当初はまったく思っていませんでした。でも,そのHTTPサーバが結局,開発の中心的な対象になりました(イシュートラッカも諦めた訳ではなくて,Atlassianになりましたが :)。

この10年から15年の間,Webサーバがもっとコモディティ化して,何を使うのか気にしなくてよいようになればと,ずっと考えてきました。ですが,同じままのものは何もありません – JVMが変わり,標準が変わりました。サーバの最適化方法も,Webアプリの開発手法も変化しています。変化が必要であるという観点がJettyには常にあって,それが他のコンテナとの差別化を実現しているのだと思います。

InfoQ: WebSocketやHTTP/2など,新たな標準や要求に応えていくのは大変なことだと思いますが,そのような要件をどのように見つけ出して実装しているのか,そのために従うべきプロセスについて,私たちにも分かるように説明して頂けますか?

JCPやIETFといった専門家グループに参加しているために,標準開発の当事者の立場にいられる,ということですね。それによって標準に従うと同時に,場合によっては標準をリードすることも可能なのです。ですが,私たちにとって最大のイノベーションは,実際に使っているユーザからの,現実のユースケースによるものなのです。このようなユースケースを見つける上では,広く多様なオープンソースコミュニティの一員であることが,重要な意味を持っています。例えば,非同期サーブレットはもともとActiveMQから要求された機能ですし,WebSocketに注目したのはdojoのcometdが理由です。現在,リアクティブストリームAPIを検討しているのも,ユーザの関心によるものなのです。

InfoQ: マイクロサービスの興隆は,Jettyの採用にどのような影響を与えているのでしょうか?

確かにマイクロサービスにはJettyがよく使われていますが,それは多分,Jettyが組み込まれているためだと思います (完全なオープンソースなので,はっきりとしたことは分かりませんが)。ただし現時点では,マイクロサービスに対応してJettyに大きな変更を加えたということはありません。Jettyはシンプルな組込み利用を常に念頭において開発されていますので,新たに必要となるものは特にないと思っています。

InfoQ: アプリケーションサーバ市場にはたくさんの競合製品があります。特にオープンソースの領域ではTomcatが有力ですが,Jettyはどのような差別化を実現しているのでしょう?

アプリケーションサーバ市場での競合はまったく考えていません。フルEEの領域で競合するつもりは最初からありませんし,Webプロファイルの分野でも同じです。JettyはEEデプロイメントにも利用可能ですが,コンポーネント指向の開発を基本としているので,HTTPプロバイダがビジネスBeanの永続化やトランザクション管理,コンテント生成に関して責務を負わなければならないとは考えていないのです。このようなコンポーネントは他にたくさんありますから。私たちは,HTTP, HTTP2, WebSocket, FCGIなどのためのスケーラブルなプロトコル実装の提供という,私たちの得意分野に専念しているのです。他の部分のためのコンポーネントは,アプリケーションのユーザが選択してくれます。他プロジェクトとの整合性にも十分に配慮していますので,CDI, JSF, JMSなどとの統合も,簡単かつ効率的に可能です。

どちらかと言えば,スケーラブルな非同期マイクロサービスを重視した軽量HTTPサーバの方が,Jettyとは競合するのではないかと思います。この分野には,いくつかのイノベーションがあります。私たちとしては,Servlet APIの提供はこれまで通り続けながら,彼らの目指すセマンティクスのサポートをしたいと強く思っています。そのために私たちは,これまでと同じようにスケーラブルでフレキシブルな非同期HTTPを提供する一方で,必要ならばServlet APIへのフルアクセスも提供することで,自分たちを差別化しているのです。

このようなフレキシブルなアプローチが,市場で支持されるのは間違いありません。Jettyの最大の展開サイトであるGoogleやYahoo, Facebook, Salesforce, LinkedInなどは,すべてがそれぞれ大きく異なっている上に,月並みなEE的利用などとは対極をなしています。

InfoQ: Servlet 4.0と互換性のあるバージョンのリリースは,いつ頃になる予定でしょうか?

Jetty 10はServlet 4.0になります。ただし,どの時点で4.0に移行するのかは,まだはっきり決まっていませんし,プロセスもやや遅れ気味です。ですから,いつまでにどの程度の機能になるかは,まだ分かりません。

InfoQ: Jettyの今後の展望について教えてください。

明確なものはまだありませんが,リアクティブストリームやCDI統合の改善,HTTP2上でのWebSocketなど,アイデアのレベルではいくつかあります。いくつかは試験を始めていますが,初期アイデアを計画として固めるには,それぞれのユースケースに対して実際にユーザニーズが存在することが条件になります。

JettyのサポートはWebtideが行っている。同社のProfessional Servicesのサイトは実際に,HTTP2のテストベッドとして使用されている。