11
dRubyによる分散・Webプログラミング入門 CSNagoya toyoshi 2009/09/06

dRuby

  • Upload
    toyoshi

  • View
    1.658

  • Download
    0

Embed Size (px)

Citation preview

Page 1: dRuby

dRubyによる分散・Webプログラミング入門

CSNagoya toyoshi

2009/09/06

Page 2: dRuby

2

dRubyとは(1)

• Rubyのオブジェクトをプロセスやネットワークを越えて扱うための仕組み

• クライアント・サーバモデルのシステムが簡単に作れる

• Ruby限定 / Pure Ruby / IDL不要• 標準添付ライブラリである

Page 3: dRuby

3

dRubyとは(2)

ObjectX

クライアント

dRubyObjectX

サーバ

dRuby

ネットワーク

• dRubyが勝手にネットワークを越えてくれる

Page 4: dRuby

4

dRubyの活用事例

• Railsプラグイン backgrounDRb• FAX 送信制御システム(株)アンタス• はてなスクリーンショット

Page 5: dRuby

5

デモ「メモアプリ」

• どれぐらい簡単かメモアプリでみてみるサーバのコードrequire 'drb/drb'

class Memodef initialize

@item = []end

def add(str)p [email protected](str)

end

def list@item

endend

Page 6: dRuby

6

わかったこと

• かんたん• プロセスの寿命を越えた永続化ができる• つまりKVS的な使い方もできる

オンメモリキャッシュサーバとして druby を試してみた→失敗http://d.hatena.ne.jp/clayfish/20090610/1244634242

Page 7: dRuby

7

Rindaによるプロセスの協調

• Rindaとは分散処理システムLindaのタプルスペースのRubyによる実装

Tuple Space

Tuple[“Hello”, “World”]

Tuple[“Hello”, “World”]

write take

Page 8: dRuby

8

サンプル「階乗サーバ」

タプルスペース

(1)write (2)take

• 階乗を計算するシステムを作ってみる• タプルのフォーマットは

– [“fact”,最初の数字,終わりの数字]– [“fact-answer”,最初の数字,終わりの数字,結果]

(4)take

$ts.write([“fact”,1,2])ans = $ts.take([“fact-answer”,1,2,nil])

tmp, m, n = $ts.take(['fact', Integer, Integer])value = (m..n).inject(1) { |a,b| a*b}$ts.write(['fact-answer', m, n, value])

(3)write

Page 9: dRuby

9

そのほかの注意点など

• 参照渡しと値渡し– Marshal.dumpできるものは値渡し。できないもの

は参照渡し– 値渡しの際は、値と参照の値も渡す

• GC– 別プロセスからだけ参照されているオブジェクトが

ガベージコレクトの対象になる場合がある

• セキュリティ– Rubyは柔軟なのですごく危ない。ACLやUNIXドメ

インソケット、$SAFEなどを使おう

Page 10: dRuby

10

まとめ

• とても簡単に分散オブジェクトシステムが作れる

• 夢が広がる

Page 11: dRuby

11

参考文献など

• dRubyによる分散・Webプログラミング– 著者 関 将俊 出版社 オーム社