InfoQ

InfoQ

News

マイブックマーク

ブックマークするためにログイン または 会員登録 する

ブックマークされました!

ブックマークがエラーになりました。もう一度お願いします。

Apache Tribesを使った不均質なクラスタでの通信をFillip Hanik氏が語る

作者 Srini Penchikala , 翻訳者 金森 諭 投稿日 2009年2月11日

セクション
デベロップメント,
エンタープライズ・アーキテクチャ,
設計/アーキテクチャ
トピック
メッセージング ,
クラスタリング&キャッシング ,
Java
タグ
Tomcat

Apache Trbes(リンク)はTomcatのサーバクラスタでグループ通信をおこなうためのTomcatモジュールだ。Filip Hanik氏(リンク)はさまざな種類のサーバから成るクラスタの課題と、Tomcatクラスタに必要なグループ通信をTribesがどのようにサポートするかについて発言をしている。その彼がSpringOne Americasカンファレンス(リンク)でTrbesのメッセージングフレームワークについてプレゼンテーション(リンク)をおこなった。

彼のプレゼンテーションはいくつものグループ通信用のオープンソースがあるというところから始まった。そのようなプロジェクトにはAppia(リンク)、Spread(リンク)、Erlang(リンク)、JGroups(リンク)などがある。彼が言うには、同質なサーバから成るグループモデルではクラスタ内の全てのノードが特定可能で、それぞれが同じようにメッセージ処理、送信、受信をおこなう。多くのグループ通信モジュールはこのようなモデルに対してのものだ。しかし多様なノードから成るクラスタの場合は、クラスタに必要なパフォーマンスとスケーラビリティを維持するのにこの方法が最善でないことはしばしばある。

さまざまなハードウェア環境をもつノードがそれぞれ動的に処理をおこなう場合、統一的でないグループ通信モデルの方がより良いものとなる。そのモデルでは、優先度や品質保証レベルがメッセージごとに異なることになる。

TribesはTomcat 5(リンク)コンテナのクラスタ/セッション複製コードを元に作られたグループ通信機能を持つメッセージングフレームワークだ。つまりTomcatのクラスタ(リンク)についての通信フレームワークとなる。Tribesの目標のひとつは分散型のアプリケーションでP2PやP2G(Peer-to-Group)通信を簡単に実現することだ。Tribesのメッセージ配信方法は2つあり、ひとつが2つのノード間でも利用できる並列メッセージ配信、もうひとつが複数のノードへメッセージ送信するのに利用する並行メッセージ配信だ。

Tribesフレームワークには他にも次のような機能がある。

  • 品質を保証するメッセージ配信: デフォルトではTCPをベースにし、java.io(リンク)やjava.nio (リンク)パッケージを用いる。
  • 3つの品質保証レベル: Trbiesではメッセージ配信での品質保証においてNO_ACK、ACK、SYNC_ACKの3つのレベル(ACKは通信が正常にできたことを示す信号)を使える。
  • メッセージ配信ごとに処理を変える: これにより異なる方法でそれぞれのメッセージを配信したり品質保証レベルを変えることができる。
  • 動的なインターセプタ: これにより決められたメソッドやメッセージ属性(フラグ)に応じて、どのようなイベントでもインターセプトすることができる。インターセプトをおこなわないメソッドを対応させるためにChannelInterceptorBaseクラス(リンク) を使うと手間を最小限にできる。
  • 配信結果のフィードバック: Tribesでは各メッセージや各配信タイプ(NO_ACK、ACK、SYNC_ACK)について配信結果のフィードバックすることを目指している。メッセージ配信は同期的あるいは非同期的のどちらでもおこなえる。
  • 並行配信と並列配信: 並行配信(concurrent delivery)は任意のタイミングで1つ以上のメッセージを送信したり受信したりできることを指す。「メッセージブロッキング」はなく、 SYNC_ACK(同期まで取れたことを確認する)品質保証レベルの10MBのメッセージであってもNO_ACKレベルの10KBのメッセージを妨害しない。並行配信(parallel delivery)はひとつのスレッド(NIO)だけで複数の送信先へ並行してメッセージを送ることができる。
  • 固定ノード階層: この機能によってクラスタの司令塔や自動的にマージをおこなうグループを決めたりマルチキャストが届かなさそうなノードを見つけたりすることができる。
  • エラー検知: これには単純なインターセプタであるTcpFailureDetectior(リンク)も含まれる。これはクラスタのメンバが消滅したときにフィードバックを提供する。エラー検知のためにはタイムアウトを待つことがなく、ノードへのpingによってネットワークを停めてしまう心配もない。

TribesにはRPCメッセージングやチャネルをJNDIツリーにバインドするJNDI Channelといった機能もある。このフレームワークのアーキテクチャには次のような要素がある。

  • チャネル: チェインの最初のインタセプタで、一つあるいは複数のChannelListener(リンク)およびMembershipListener(リンク)を保持する。チャネルによってメッセージはシリアライズ/デシリアライズされる。またbyte[]データをやり取りするためのByteMessage(リンク)の機能もある。
  • インタセプタ: チェインの中間のインタセプタには、エラー検知や静的メンバシップ、全体への命令あるいはメンバごとの命令、司令塔の選出、メッセージデータの暗号化、非同期型のメッセージ送信、各種レベルの配信品質保証などがある。
  • コーディネイタ: チェインの最後のインタセプタで、SenderやReceiverやMembershipといった入出力コンポーネントを仲介する。

このプレゼンテーションで彼は、Tomcatのクラスタリングを有効にしたりウェブアプリでセッションやコンテキスト属性のレプリケーションをおこなう設定の仕方などをサンプルアプリケーションを使って説明した。server.xmlファイルはCluster、Session、 Manager(DeltaManagerあるいはBackupManager)、Channel(Tribesの)、Membership(実行時に他のノードを見つけるのにマルチキャストを使う動的なメンバシップと、server.xmlにノードを記載する静的なメンバシップの両方が可能)、 Messaging(TCPオーバで動作し、各ノードにはレシーバとセンダがある)、Interceptors(機能的にはValvesと似ている)、 Valves(各リクエストの最後にセッションレプリケーションを開始する)、ClusterListener(特定のタイプのメッセージについてのカスタムメッセージリスナを作れる)などのクラスタ要素が記述される。

原文はこちらです:http://www.infoq.com/news/2009/01/filip-hanik-tribes

特集コンテンツ一覧

GAE開発の落とし穴

Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します

イベントレポート:「Coqチュートリアル#1」

去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。

Javaの未来についてのNeal Gafter氏とのディスカッション

Choosing Options

Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。

Google Dartのエッセンス:アプリケーションの構築、スナップショット、Isolate

GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式

CSPベースのモデル検査ツール「Process Analysis Toolkit」

本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。

Jenkinsによる継続的インテグレーションのススメ(4) ~CloudBeesでJenkinsをサービスとして使う~

前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。

書籍『抽象によるソフトウェア設計-Alloyではじめる形式手法-』の紹介

Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。

Windows デバイスで開発するタッチユーザーインターフェイス

スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。