Posts tagged ‘Grizzly’
Atmosphere 0.1 GA リリース
Grizzly プロジェクトより派生した Atmosphere プロジェクトの
初めての成果物 (0.1 GA) がリリースされました。
Atmosphere プロジェクトでは汎用的に使える Comet フレームワークとして
AtmosphereHandler インタフェースを実装して簡単に Comet アプリケーションを
作成することができるようになります。
チャットの実装例
今までは Comet のアプリケーションを作成する場合、サーバ側の実装は
各 Web コンテナの Comet Engine の実装に応じてばらばらに実装しなければ
なりませんでしたが、このフレームワークを利用することで、一度実装した
Comet のサーバ側の実装を様々な Web コンテナ上で動作させることができるようになります。
サポートされる Web コンテナ:
Tomcat,Jetty, GlassFish,Weblogic, Jersey,Grizzly
チャットアプリケーションの実装例:
Getting started with Atmosphere CPR part 1: Writing the HelloWord of Comet….a Chat application
Comet のアプリケーションに興味のある方は是非このフレームワークをお試しください。
ちょっと春らしく:
Blocking I/OとNon Blocking I/Oについて
以前、Grizzlyの概要 : C10K問題に対応するGlassFish(Grizzly) というエントリで、
Grizzly が実装している Non Blocking I/O の利点について説明しましたが、
Project Kenai 中のプロジェクト Grizzly-send file 内で過去に書いたエントリの
補足となるような良い説明資料があがっていましたので、こちらでも紹介します。
※ このエントリを読む前に是非、過去の記事をご覧ください。
マルチスレッドで実装された Webサーバ は下記のようにAcceptor スレッドとWorker スレッドの間に
Queueを置いて、処理の効率化をはかっています。
この時、仮に Worker スレッドの数が5個だった場合に8クライアントから同時にファイル取得の
要求が来た場合を想定します。
Blocking I/Oを使って実装されたマルチスレッドサーバの場合、実際に作業ができるWorker スレッドは
5つしかありませんので、3つのクライアントは他の処理が終わるまで Queue で待たなければなりません。
取得する対象のコンテンツサイズが小さい、もしくはすぐに完了するような場合、このBlocking I/O
のマルチスレッドサーバは高速に動作します。
しかし、クライアントからのリクエスト数が膨大になった場合や、取得するコンテンツのサイズが大きい場合、
もしくはコンテンツの取得に時間がかかるような場合、他のクライアントの要求に対して影響が大きいことが
わかります。
一方、Grizzly のように Non Blocking I/O に対応した Web Server を利用すると、Woker スレッドを
効率的に利用することができるようになります。
5つの Woker スレッドが8クライアントからの同時アクセスに対して、各スレッド毎で分割して
処理できますので、誰か1人が大きなファイルを取得したとしても他の人に対して影響は少なく
なります。
そこで、クライアントからのリクエスト数が増えれば増える程、Non Blocking I/Oの実装の恩恵を
受ける事ができます。
PS.
今回は Project Kenai の Grizzly-Send file の画像を使わさせて頂きました。
私が作成した概念図より各スレッド毎に分割されて処理しているのが
分かりやすいので、二つの資料を両方つかうとわかりやすいですね。
Grizzly/GlassFish Comet はスケールする?
今、Grizzly のメーリングリストでおそらく皆様が
もつ疑問について問い合わせされている人がいます。
概要を説明すると、Grizzly は 本番環境で耐えうるだけの Comet の接続を受け付け
レスポンスを返すことができるか?ということについてです。
これについて、開発者の Jean Francois は作成するアプリケーション
(long poll/streaming)によって違うが、ユニットテストを行った際には、
ちゃんとスケールしているとのことでした。
実際に、社内の IM で大量のユーザが利用しています。
ベンチマークで使用したユニットテスト:
https://grizzly.dev.java.net/nonav/xref-test/com/sun/grizzly/comet/CometUnitTest.html
また、今年の JavaOne で彼は、Grizzly のベンチマークに関連した
セッションを発表するようです。
(今年は是非行きたかったのですが、このご時世なので行けません。(T_T))
また、Jetty と比べても Grizzly(GlassFish) の方がスケールするようです。
(彼は Jetty も好きなようですが)
実際、Jetty のサスペンドの部分に若干問題がるようで、Jetty はスケールできないようです。
(例外が出力され、サーブレットが2度呼び出しされる)
また、Grizzly の場合、Comet の実装コードは CometContext.notify() と
NotificationHandler に実装すれば良いだけなので、開発者の皆様は、
Jetty で実装するよりも格段にかんたんに実装できるようになるとのことでした。
大規模環境で、GlassFish/Grizzly の Comet を検討されている方は今年のJavaOneの
Jean-Francois のプレゼンを楽しみにしていてください。
ICEfacesとGlassFishでCometアプリケーション
ICEfaces を使って Ajax Push(Comet) を実現するための、資料が公開されています。
例えば、ある人が Google Map で座標を動かした時に、他人の
Google Map の座標を動かすというようなことも紹介してました。
(Google Map は Liferey 上のポートレットとして動作)
現在のHTTPの仕様の制限上、単一のブラウザが同じサーバに対して2つのコネクション
しかはれないので、ポートレット内で Ajax Push を実現するためには色々と考える
必要があるかと思いますが、限定的に使う分には面白いかもしれません。
プレゼン資料:
From Ajax Push to JSF 2.0: ICEfaces on GlassFish
追記(2009/03/14)
Suhail Ahmed さんから参考情報を頂きました、上記で紹介した
ICEfaces Portlet を使ったサンプルを下記に公開されて
いるようですので、ご興味のある方は是非参照してください。
Webinar: Filthy Rich Portlets with ICEfaces and Liferay
その他参考情報
ブログ:
http://weblogs.java.net/blog/jfarcand/archive/2007/05/new_adventures.html
http://weblogs.java.net/blog/jfarcand/archive/2007/03/new_adventures_1.html
http://weblogs.java.net/blog/jfarcand/archive/2007/06/new_adventures_3.html
http://weblogs.java.net/blog/jfarcand/archive/2008/11/writing_a_twitt.html
http://cometdaily.com/2008/04/01/new-technology-new-problems-delayed-pushes-operations/
プレゼン資料:
http://weblogs.java.net/blog/jfarcand/archive/2008/10/applying_asynch.html
http://wikis.sun.com/display/TheAquarium/Comet
Grizzly sendfile – Project Kenai
大きなファイルを高速に配信する Grizzly の sendfile
(X-Sendfile ヘッダ)が GlassFish v2.x でも利用できます。
我々、Sun のエンジニアがプレゼンやストレーミングを公開するために
使用する、http://mediacast.sun.com でもこれが使われているのですが、
大きなファイルを効率よくクライアントへ配信したい場合は、
是非、一度試してみてください。
プロジェクトホーム:http://kenai.com/projects/grizzly-sendfile/pages/Home
参考情報:http://blog.igorminar.com/2009/02/announcing-grizzly-sendfile.html
GlassFish で Comet のオンラインセミナー
今日の日本時間で明け方4時ころに、Grizzly の開発者である
Jeanfrancois がオンラインセミナーを開催しました。
その発表内容が下記にてストリーミングで提供されていますので、
もし、ご興味のある方は見てください。
http://www.ustream.tv/channel/theaquarium
その他にも、今日は注目の技術エントリを紹介します。
開発関連
● WS-Addressing と
ステートフル Web サービス
●
RESTful Web サービス と Jersey の Client API
MySQL関連
●
Sun and MySQL: How It Stacks Up for Developers
●
GlassFish と MySQL を連携した Web サービスの構築
● Using MySQL With Java Technology
SailFin 関連
● Adding Voice to Java EE With SIP Servlets
GlassFish でかんたん Comet (Reverse Ajax, Ajax Puxh)アプリケーション
以前、Cometのアプリケーションを POJO で作成できるフレームワークである
Atmosphere のプロジェクトについて紹介しましたが、このプロジェクトも
ずいぶんプロジェクトが進行したようです。
タイトルでは、GlassFish と書きましたが、このプロジェクトの成果物は
Tomcat, Jetty 等他の Servlet コンテナ上でも動作します。
この、Atomosphere のPOJO フレームワークである Grizzlet のサンプルが
下記で公開されましたので、Comet のアプリケーションにご興味のある方は
是非、一度御確認いただければと思います。
Grizzlet Flickr サンプルアプリケーション
ソースコードサンプル
Grizzlyのロゴコンテスト開催 2/28まで
皆様、Grizzlyのロゴコンテストが発表されました。
期日は、2/28までです。
日本発のキャラクターの方がきっと可愛いと思うので、
是非、皆様かわいらしいキャラクターロゴを作成してください。
作成して頂いた後、下記のMr. Grizzlyのメールアドレスまで作成したロゴを
送信してください。もしくは英語が苦手という方がいらっしゃいましたら
私のメールアドレスまでお送り頂いても結構です。
Mr. Grizzly:
jfarcandあっとapache.org
Yoshio.TeradaあっとSun.COM
ねこびーんの作者の、かねうちさん等かわいらしい
熊さんを書いてくれないかなぁ。
Grizzly 2.0に関する情報
今日は、Grizzlyについての情報のお知らせです。
GrizzlyはGlassFishのHTTP等のハンドリングを行うサーバプログラムとして使用されています。
このGrizzlyの開発者であるJean Francoisさんから
次期バージョンのGrizzly 2.0に関する情報を
頂きました。
これは9/25に発表されたプレゼンですが、Grizzly 2.0はJava NIO 2にも対応し、
またGrizzly 1.x系よりもかなり分かり易くなっていると書かれています。
私も、Grizzly 1.0.8のソースを見た時には結構追っかけるのが辛く実際に再利用するには
少しハードルが高そうに感じましたが、Grizzly 2.0では汎用のサーバエンジンとして扱い易く
なりそうです。
実際、プレゼンの中では独自のログサーバを作成するサンプルコードが記載されていました。
Non Blocking I/Oで同時サーバを構築されたい方は是非、下記のプレゼンを確認してみては如何でしょうか?
http://weblogs.java.net/blog/jfarcand/archive/20080925-webinar_grizzly.pdf
GrizzlyでCometに関する記事
InfoQ Japanese Versionで日立ソフトの新技術開拓センターの川尻 剛さんが
GrizzlyでCometに関する記事を書いてくださっています。
Cometを実現する為の方法についてとても良くまとめられている
記事ですので、GlassFish/GrizzlyでCometを実現されたい方は、
是非、下記の記事を参考にされては如何でしょうか?
サンプルコードもあります。
InfoQ: AjaxプログラマのためのJavaOne2008 -GrizzlyでComet!-