最近はオブジェクト指向ではなく、Webサービスに注目してデータをやりとりするという考えもあり、Java EE 5から標準でJAX-WS(Java API for XML Web Services)などが策定されています(参考:Java EE 5マイグレーションプラクティス(1))。
JAX-WSは以前は、「JAX-RPC(Java API for XML-based RPC)」と呼ばれていたもので、JavaではSOAPの基盤として利用されています。参考までにJAX-RPCの概観を次に示します。
JAX-WSでは、JAX-RPCの「XML-based RPC」が「XML Web Services」へと拡張されています。JAX-WSは、JSR 224で策定され、リファレンス実装はGlassFishコミュニティの「Metro」プロジェクトに含まれているJAX-WSで公開されています。
ちなみに、Javaには関係するパッケージとして、javax.xml.wsパッケージやjavax.jwsパッケージがあったりします。
最近は、「REST(Representational State Transfer)」という用語もよく聞かれるようになりました(参考:RESTはエンタープライズに浸透するか、ファーガソン氏が講演)。
Web上にあるリソースはすべてURIで一意に決まります。RESTful(REST対応している)のWebサービスでは、URIによりWebリソースは表現されるので、URIに対してGET、PUT、POST、およびDELETEといったHTTPメソッドを適用することにより、リソースのCRUD(Create、Read、Update、Delete)操作ができます(参考:Webの「正しい」アーキテクチャ)。
Javaでは、JSR 311で「JAX-RS: The JavaTM API for RESTful Web Services」として議論されています。リファレンス実装としては、「Jersey」があります。また、Restlet(Lightweight REST framework for Java)のようなフレームワークもあります。
Apache Thriftのように、「データ型やサービスインターフェイスを単純な定義ファイルで指定すると、その内容に応じて、RPCクライアント、RPCサーバを生成する」というアプローチもあります。
このソフトウェアは、Facebookがオープンソースとして発表しました。Apacheでもまだインキュベータの状態ですが、注目している人もいるかと思います(参考:巨大SNSを支える多言語混在RPC開発フレームワーク“Thrift”)。
ほかにも、米シスコシステムズがApache Licence 2.0で公開している「Etch」のようなメッセージングプロトコルもあります。
Apache Thrift、Etchは、標準が議論されているわけではないので、どの程度普及していくかは分かりませんが、せっかくオープンソースであるのですから、機会があれば使ってみてもよいと思います。これからも次々と、“新しいプロトコル”というものは提案され続けることが予想されます。
こうして考えてみると分散処理にもいろいろありますが、それぞれ特徴があって面白いですね。
雑感ですが、RPCは「処理の分散化」という視点で、SOAPは「オブジェクトの分散化」という視点で見たくなります。
RMIはJavaでのRPCともいえますが、「オブジェクト指向」という概念が入っているため、RPCよりも分かりやすい気がします。CORBAは言語依存性が低いので、JavaのRMIよりも適用分野によっては有利なはずです。XML-RPCのように、データのやりとりに当たり、XMLを使うものもあります。
このように、それぞれ違いはありますが、ここで紹介した技術はどれも、C/Sをベースとしており、ある作業をするに当たってクライアントでできることはクライアントで、リソースが必要な処理はサーバ側で、という視点から発展してきています。そういう意味では、基本的に「処理の分散化」という視点が強い気がします。個人的にそういう視点でとらえていただけかもしれませんが。
MapReduce/Hadoopは、並行処理を分散させて実行させるのに適したアルゴリズムなので、もちろん処理の分散化をしていますが、「データの分散化」というのも含まれています。
データを「分散して処理しやすい形」のデータに加工して、それを並行処理で計算しているので、この発想が自分には新鮮でした。ですから、MapReduceを知ってから、個人的にはデータの分散化について、考えることが多くなっています。
ここで、MapReduceからちょっと横道に話がそれますが、RSSが普及することにより、Webコンテンツの流通は非常によくなりました。Web上に分散化されたデータは、RSSを使うことにより、簡単に集約できるようになっています。
この分散化されているデータを効率よく集約して分析することにより、新しい知見を得ることができるようになってきています。ブログで話題になっている商品のうち、性別や世代などを超えて皆が買っている商品ではなく、高校生だけに受けている商品がある、といったことが分かると、マーケティングに役立ちます。
例えば、「高校生が注目している商品をRSSから分析するマシン、中学生が注目している商品をRSSから分析するマシン、という感じでシステムを構築するのも、立派な並行処理の実現方法だ」とか考えてしまうわけです。単純な構成にすると、無駄な処理が多くなりそうなので、効率よくするには工夫が必要そうですが、適用分野は考えるといろいろと出てきそうです。
いずれにせよ、MapReduceは、最近注目を浴びています。後編ではいよいよJavaによる実装Hadoopについて、概要や使い方をサンプルとともに見てみることにします。お楽しみに。
株式会社ガリレオ
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)やbugs(J)の活動へも参加している。
著書に「基礎Java」(インプレス)、共著に「Javaコレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。
Copyright © ITmedia, Inc. All Rights Reserved.