BT

Blackboard による Ruby でのタプルスペース永続性の調査

| 作者: Sebastien Auvray フォローする 0 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2009年7月20日. 推定読書時間: 3 分 |

原文(投稿日:2009/7/13)へのリンク

Ruby バージョン1.8 は,そのグリーンスレッドモデルの性能の低さが以前から批判されている。Luc Castera氏は RubyNation コンファレンスで,Ruby とタプルスペースによる並列プログラミングの発表を行った。コンピュータ世界のさまざまなスレッディングモデルについて Ruby 1.8,Ruby 1.9,JRuby,Erlang などを例に説明した後,氏は Ruby のマルチプロセス化を紹介した(図と引用は発表資料のものである)。

  • 利点:
    • 共有メモリが不要
    • マルチCPUのメリット(パフォーマンス)を享受できる
    • ブロックシステムコールでもすべてのスレッドがブロックされない
    • スケーラビリティ
    • 耐障害性(フォールト・トレランス)
  • 欠点:
    • プロセスの生成・実行・クリーンアップが高価
    • メモリ使用量が多い(Ruby VM をプロセス毎にロードするため)
    • プロセス間通信の手段が必要!

プロセス間通信を実現するための手段は数多くある。データベース(クラスタ構成のアプリケーションサーバ( Mongrel,Thin など)で使用される),RabbitMQ(Nanite氏のソリューション)などのキュー,DRB,ActiveMQ,... それから,タプルスペース。
氏は Rinda と氏自身の開発した Blackboard という,2つのタプルスペース実装を比較している。タプルスペースとは,並列的にアクセス可能なタプルのレポジトリを提供するものだ。一般的にタプルはライト(write:タプルのタプルスペースへの書き込み),リード(read:タプルスペースからのタプル読み込み),テイク(take:タプルスペースからのタプル読み込みと削除),という3つのアクセスプリミティブを提供する。

Linda は David Gelernter 氏と Nicholas Carriero 氏によって定義された協調モデル(coordination model)であり,グローバルなオブジェクト協調の概念をサポートする。
Linda の Ruby による実装が Rinda であり,Ruby の組込ライブラリとなっている。 Rinda では タプルを t1 = [:add, 5, 9] のように記述する。クライアントはこれを,例えば与えられた数値の和を求めるタスクのように解釈する。

Rindaの大きな欠点は永続性がないことである。スペース内のすべてのタプルは停止またはクラッシュによって失われてしまうのだ。氏が Blackboard の開発に取り組んだのはこのためである。Blackboard はキー・バリュー型データベースである Redis 上に構成されたタプルスペースの実装であり,永続性を持っている。

[ Redis は] memcached に似ていますがデータセットが揮発的( volatile )ではありません。値として文字列が設定できるのは memcached とまったく同じですが,リストやセットを要素として,アトミックな操作で push/pop することも可能となっています。

以下はAPIの使用例である。

ts = Blackboard::TupleSpace.new

ts.write [:calculator, :add, 1, 2]
ts.take  [:calculator, :add, nil, nil]

次表は Rinda と Blackboard の差を示すベンチマーク結果である(発表資料より)。

  Rinda Blackboard
Write (1000) 0.042749 0.253068
Take (500) 0.082744 15.844250
Read (500) 0.020098 20.098478

現在の実装は最初のイテレーションである。氏は Redis から,Ruby などサードパーティ言語からのコールが容易なカスタムベース Erlang Blackboard の実装へ移行する計画を持っている。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT