Upload
toyoshi
View
1.658
Download
0
Embed Size (px)
Citation preview
dRubyによる分散・Webプログラミング入門
CSNagoya toyoshi
2009/09/06
2
dRubyとは(1)
• Rubyのオブジェクトをプロセスやネットワークを越えて扱うための仕組み
• クライアント・サーバモデルのシステムが簡単に作れる
• Ruby限定 / Pure Ruby / IDL不要• 標準添付ライブラリである
3
dRubyとは(2)
ObjectX
クライアント
dRubyObjectX
サーバ
dRuby
ネットワーク
• dRubyが勝手にネットワークを越えてくれる
4
dRubyの活用事例
• Railsプラグイン backgrounDRb• FAX 送信制御システム(株)アンタス• はてなスクリーンショット
5
デモ「メモアプリ」
• どれぐらい簡単かメモアプリでみてみるサーバのコードrequire 'drb/drb'
class Memodef initialize
@item = []end
def add(str)p [email protected](str)
end
def list@item
endend
6
わかったこと
• かんたん• プロセスの寿命を越えた永続化ができる• つまりKVS的な使い方もできる
オンメモリキャッシュサーバとして druby を試してみた→失敗http://d.hatena.ne.jp/clayfish/20090610/1244634242
7
Rindaによるプロセスの協調
• Rindaとは分散処理システムLindaのタプルスペースのRubyによる実装
Tuple Space
Tuple[“Hello”, “World”]
Tuple[“Hello”, “World”]
write take
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
9
そのほかの注意点など
• 参照渡しと値渡し– Marshal.dumpできるものは値渡し。できないもの
は参照渡し– 値渡しの際は、値と参照の値も渡す
• GC– 別プロセスからだけ参照されているオブジェクトが
ガベージコレクトの対象になる場合がある
• セキュリティ– Rubyは柔軟なのですごく危ない。ACLやUNIXドメ
インソケット、$SAFEなどを使おう
10
まとめ
• とても簡単に分散オブジェクトシステムが作れる
• 夢が広がる
11
参考文献など
• dRubyによる分散・Webプログラミング– 著者 関 将俊 出版社 オーム社