rgossip 0.1.0

rgossip 0.1.0をリリースしました。

これは何?

Gossipプロトコルのライブラリです。

Cassandraみたいに「サーバを起動したら勝手にクラスタに追加される」みたいなことが可能になります。ただし、個々のノードのデータサイズは512KBくらいなので、ストレージ的な用途には全く使えないです。あくまでサーバ情報(IPアドレスとかメタ情報とか)の分散管理が目的です。

Javaの実装*1が公開されていたので、それをポーティングしました。

どうやって使うの?

こんなかんじで…

require 'rubygems'
require 'rgossip'

#RGossip.port = 20870 # default: 10870(udp)
#RGossip.debug = true

gossip = RGossip::Client.new ['10.150.174.161', '10.150.185.250'] # 初期ノード
gossip.data = 'XXX' # 伝播するデータをセット
gossip.start
gossip.join

サーバの実装は含まれていません。

startするとまず初期ノードと情報交換して、そこから徐々に全体のノード情報を取得するようになります。
取得したデータの情報は以下のようなコードで参照することができます。

gossip.each do |address, data|
  puts "#{address}: #{data}"
end

サーバのタイムアウトの初期値は10秒。
サーバが死んで10秒くらいたつと、自動的にクラスタから外されます。


さて、勉強会のネタを仕込まねば。。。

*1:http://code.google.com/p/gossip-protocol-java/