Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
実世界でのdRubyの使用例

実世界でのdRubyの使用例

dRubyはこれまでに多くの大規模システムの基盤として利用されてきました。dRubyはいつものRubyプログラミングに非常に近い感覚で分散オブジェクトを実現します。これにより、複雑な分散システムであってもアイデアをすぐに実現することができます。 dRubyが提供するのは汎用のRMIです。スケッチの段階でdRubyを用い、有用性を確認したのちに用途に特化したミドルウェアに置き換えるといったように成長していったシステムも多いようです。 以下に実世界でのdRubyの使用例を示します。

Hatena Screen Shot (http://www.hatena.ne.jp/)

Hatena は日本を代表するインターネットカンパニーで、ブログ、ソーシャルブックマークサービスなどを提供しています。2006年当時(現在はサービス終了) Hatena Screen Shotという、登録されたURLのスクリーンショットをサムネイルとして表示するサービスがありました。このサービスのアーキテクチャーのユニークな点にWebフロントエンドはLinux上に構築されているが、スクリーンショットの撮影はWindowsのIEコンポーネントを用いて実現されていることにある。これはWindows環境の方がスクリーンショットを撮影できる環境が整っていたためであるが、クロスプラットフォーム間のシステムを協調させるdRubyを使った良い例といえよう。またスクリーンショットマシーンは並列処理が行われていたため、スケーラビリティも確保されていた。

Twitter

Twitter は以前StarlingというRubyで作られたQueuingサービスを作っていたが、その前にdRubyとRindaを使用していたようである。SDForum Silicon Valley Ruby Conference 2007でBlaine Cook氏が行った「Scaling Twitter」というトークの中でdRubyのことを「Stupid Easy, Reasonably Fast, Kinda Flaky」と形容している。

Buzztter(http://buzztter.com)

Buzztterはツイッターのツイートからキーワードを摘出するサービスで、ツイッター自身が「トレンド」を提供するずっと前(2007年)からサービスを提供している。単語の抽出の難しい日本語のキーワード摘出を提供している点で、今でも有用なサービスである。Buzztterはいくつかのサブシステムで構成されるが、Twitter API (HTTP)を用いて文章を集めてくる分散システムにおいてRinda(dRubyを利用した分散プロセス協調機構、後の章で説明)を利用している。現在ではその部分はRabbitMQに置き換えられいるが、2007年11月当時の調べでは1日に125000件、72MB相当のデータを扱っていた。

RWiki

著者が作成したdRubyを使用したWikiシステムで自身の職場で現在も稼働中である。10年以上に渡って運用されており、40000ページ以上、インメモリのサイズは1GBを超えている。内部にRDBMSは持たず編集ログをプレーンテキストでログしており、システムの再起同時にはそのログを読み込むことで永続化を実現している。 RWikiはページの記述にRD形式を使用している。一度記述されたのちはRWiki内のRubyオブジェクトとして扱われるようになり、dRubyを経由してRubyスクリプトでページの内容(RD形式のソースだけでなく、文書の章や節の構造、リンク、逆リンク、カスタマイズされた属性)をメソッド呼び出しで利用できる。RWikiはHTTPから利用する場合にはWikiWikiWebですが、dRubyから利用する場合にはオブジェクトデータベースとなるのです。 オブジェクトデータベースとしての利用例とは次のようなものがあります。 著者の管理するRWikiの内容は、アジャイル開発によく使われるストーリーカードといった、チケットのページが多いです。dRuby経由でRWiki内のページオブジェクトをチケットのオブジェクトとして扱い、TestSuiteの自動生成システムや、チケットの統計情報の計算などのアプリケーションをRWikiの外部のプロセスに設置しています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment