イロイロな分散処理技術とイマドキのWebサービス:いま再注目の分散処理技術(中編)(2/2 ページ)
最近注目を浴びている分散処理技術「MapReduce」の利点をサンプルからアルゴリズムレベルで理解し、昔からあるJava関連の分散処理技術を見直す特集企画(編集部)
Webサービスに注目されるイマドキの流れ
最近はオブジェクト指向ではなく、Webサービスに注目してデータをやりとりするという考えもあり、Java EE 5から標準でJAX-WS(Java API for XML Web Services)などが策定されています(参考:Java EE 5マイグレーションプラクティス(1))。
■Webサービス操作のJava標準拡張「JAX-WS」
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パッケージがあったりします。
■HTTPメソッドでWeb上のリソースをCRUD操作「REST」
最近は、「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)のようなフレームワークもあります。
■SNS「Facebook」を支える多言語混在RPC開発フレームワーク 「Apache Thrift」
Apache Thriftのように、「データ型やサービスインターフェイスを単純な定義ファイルで指定すると、その内容に応じて、RPCクライアント、RPCサーバを生成する」というアプローチもあります。
このソフトウェアは、Facebookがオープンソースとして発表しました。Apacheでもまだインキュベータの状態ですが、注目している人もいるかと思います(参考:巨大SNSを支える多言語混在RPC開発フレームワーク“Thrift”)。
■SOAPに代わるメッセージングプロトコルになるか? 「Etch」
ほかにも、米シスコシステムズがApache Licence 2.0で公開している「Etch」のようなメッセージングプロトコルもあります。
Apache Thrift、Etchは、標準が議論されているわけではないので、どの程度普及していくかは分かりませんが、せっかくオープンソースであるのですから、機会があれば使ってみてもよいと思います。これからも次々と、“新しいプロトコル”というものは提案され続けることが予想されます。
MapReduce/Hadoopとほかの分散処理技術の違い
こうして考えてみると分散処理にもいろいろありますが、それぞれ特徴があって面白いですね。
■処理の分散化
雑感ですが、RPCは「処理の分散化」という視点で、SOAPは「オブジェクトの分散化」という視点で見たくなります。
RMIはJavaでのRPCともいえますが、「オブジェクト指向」という概念が入っているため、RPCよりも分かりやすい気がします。CORBAは言語依存性が低いので、JavaのRMIよりも適用分野によっては有利なはずです。XML-RPCのように、データのやりとりに当たり、XMLを使うものもあります。
このように、それぞれ違いはありますが、ここで紹介した技術はどれも、C/Sをベースとしており、ある作業をするに当たってクライアントでできることはクライアントで、リソースが必要な処理はサーバ側で、という視点から発展してきています。そういう意味では、基本的に「処理の分散化」という視点が強い気がします。個人的にそういう視点でとらえていただけかもしれませんが。
■データの分散化
MapReduce/Hadoopは、並行処理を分散させて実行させるのに適したアルゴリズムなので、もちろん処理の分散化をしていますが、「データの分散化」というのも含まれています。
データを「分散して処理しやすい形」のデータに加工して、それを並行処理で計算しているので、この発想が自分には新鮮でした。ですから、MapReduceを知ってから、個人的にはデータの分散化について、考えることが多くなっています。
コラム 「分散化されたデータとRSS」
ここで、MapReduceからちょっと横道に話がそれますが、RSSが普及することにより、Webコンテンツの流通は非常によくなりました。Web上に分散化されたデータは、RSSを使うことにより、簡単に集約できるようになっています。
この分散化されているデータを効率よく集約して分析することにより、新しい知見を得ることができるようになってきています。ブログで話題になっている商品のうち、性別や世代などを超えて皆が買っている商品ではなく、高校生だけに受けている商品がある、といったことが分かると、マーケティングに役立ちます。
例えば、「高校生が注目している商品をRSSから分析するマシン、中学生が注目している商品をRSSから分析するマシン、という感じでシステムを構築するのも、立派な並行処理の実現方法だ」とか考えてしまうわけです。単純な構成にすると、無駄な処理が多くなりそうなので、効率よくするには工夫が必要そうですが、適用分野は考えるといろいろと出てきそうです。
いずれにせよ、MapReduceは、最近注目を浴びています。後編ではいよいよJavaによる実装Hadoopについて、概要や使い方をサンプルとともに見てみることにします。お楽しみに。
筆者プロフィール
株式会社ガリレオ
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)やbugs(J)の活動へも参加している。
著書に「基礎Java」(インプレス)、共著に「Javaコレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- スキルアップのための分散オブジェクト入門
分散オブジェクト技術はシステム・インテグレーションを行うエンジニアにとって重要な基礎知識。本連載では分散オブジェクト技術の目的から、個々の分散オブジェクト技術についてわかりやすく解説します - いまなぜCORBAなの?
CORBAは「難しい」「仕事に関係ない」「古い」と思っているJavaエンジニアの皆さん。実はEJBの登場でCORBAの役割が再びクローズアップされてきているのです - HORBと遊ぼう
HORBは、日本で開発された分散オブジェクト環境だ。使いやすさを中心テーマに開発されたHORBを使い、楽しく遊びながらJavaによる分散オブジェクト環境を学んでみよう - 次世代を予感させるグリッドコンピューティング
安藤幸央のランダウン(7) 地球外知性探索のSETI@Homeなどで知られるグリッドコンピューティング。今、商用化や標準化など、さまざまな試みに発展している - J2EEと外部システムを連携する方法
[連載]Java初心者のためのWebシステム入門(7) J2EEがサポートする接続方法は多様だ。今回はJ2EEと外部のシステムとの連携方法を解説する - 樋口研究室 パソコンで試してわかるWebサービス
パソコンとフリーのソフトウェアを使いWebサービスの環境を作ってみよう。自分で試せば、きっとサービスが理解できます - 第1回 Webサービスを試す環境を作る
- 第2回 SOAPの3つの機能
- 第3回 JavaBeansからWebサービスを作る
- 第4回 Webサービスの動作を決めるスコープの謎
- 第5回 Webサービスにも必要なセッション管理
- 第6回 WSDLでWebサービスを記述する
- 第7回 WSDLをうまく使いWebサービスをオートマ運転
- 第8回 統合開発環境でWebサービスを作成する
- 最終回 EJBからWebサービスをつくる
- SOAPの先進機能を斬る!
米持先進技術工房−@IT分室(1) テクノロジー・エバンジェリスト 米持氏がJ2EEの最新技術情報を提供。先端技術をいち早くキャッチアップしたい読者のためのコーナー