写真1●楽天テクノロジーカンファレンスでソースコード公開を発表するROMAの開発者 西澤無我氏(左)と、Rubyの開発者で楽天技術研究所フェローのまつもとゆきひろ氏(右)
写真1●楽天テクノロジーカンファレンスでソースコード公開を発表するROMAの開発者 西澤無我氏(左)と、Rubyの開発者で楽天技術研究所フェローのまつもとゆきひろ氏(右)
[画像のクリックで拡大表示]
写真2●ROMAを開発した楽天の技術者 西澤無我氏
写真2●ROMAを開発した楽天の技術者 西澤無我氏
[画像のクリックで拡大表示]

 楽天は2009年10月24日、同社が独自開発した分散キー・バリュー型データストア「ROMA」をオープンソース・ソフトウエアとして公開した。ROMAはスケールアウトが容易で、耐障害性の高いデータストア。「楽天市場」と「楽天トラベル」で、ユーザーによる閲覧履歴の保存にROMAを使用している。同日に開催した「楽天テクノロジーカンファレンス」に合わせて、「github」でソースコードを公開した。

 ROMAは、楽天技術研究所フェローのまつもとゆきひろ氏(プログラミング言語「Ruby」の開発者)と協力して、2007年から開発してきた分散キー・バリュー型データストアである(写真1)。Rubyを使った大規模システムを実現するための分散処理基盤として、また楽天で爆発的に増加している各種データの保存先として、開発言語にRubyを使用して開発した。

 ROMAはデータを「キー」と「値(バリュー)」の組み合わせとして保存するキー・バリュー型データストアであり、キーに応じてデータを複数のノード(サーバー)に分散・複製して保存できる。そのため、サーバーの台数を増やした分だけデータ容量やスループットが向上するほか、データの複製を複数のノードで保存することから耐障害性も高い。ノードに障害が発生した場合も、ROMAが障害を検出して自律的に障害を復旧できる。開発者の西澤無我氏(写真2)は「楽天市場で使用するROMAのシステムでもハードウエア障害が発生したが、サービスを止めずに運用を続けられた」と語る。

 ROMAは分散メモリー・キャッシュ「memcached」互換のAPI(アプリケーション・プログラミング・インタフェース)を備えるほか、独自に開発したコマンドやストレージ・システムなどをプラグインによって拡張できる。コマンドはRubyによって開発が可能で、ROMAが初期から実装する「PUT」「GET」という単純なコマンド以外にも、リスト操作を行うコマンド(リストのn番目を指定して追加、削除を実行する)がすでに追加されている。ストレージシステムに関しては「Tokyo Cabinet」のような他のキー・バリュー型データストアに差し替えることもできる。

 楽天では今後、オープンソース・コミュニティの開発者に対して、ROMA自身の拡張だけでなく、プラグインコマンドの開発なども呼びかけていくとしている。