楽天の研究者の方の発表聞いてきたときのメモ(大規模データ処理基盤 ROMA)
自分なりのメモなのでかなり適当です。
楽天技術研究所でやっていること
開発してるもの
ROMAとは?
大規模グリットRubyによるKey-Value Store
RDBではトラフィックに耐えられない。
memocashなどを使うこともできるがデータの保障して使うことができるのか不安
使うのは主にエンドユーザー
ROMAが落ちると1分間で何億もの損失
突発てきなトラフィックの増大にも強くする必要になる。
クリスマスなどのある程度いつおきるのか予想できるトラフィック増大に備えてやる
今はできていないがすべてのサービスが同時にトラフィックが増大するわけではないので
サービスを動かすマシンの台数を変えられたらいいなぁ
Fairy
文字抽出の研究
楽天で出てる店舗の方々はよく画像に文字を入れる人が多い。
薬事法などで使ってはいけない文字を入れてる人もいるので注意できるように画像の中の文字も検索がヒットするようにしたい。
画像検索
巨大画像閲覧
スマートフォンのUIを使って楽しく買い物できるように
開発は今は全部楽天研究所の方々が開発している。
企業としてROMAなどの新規性は問われるのか?
- >もちろん問われる。
ROMAの新規性は?
かなり簡単に拡張できる基礎研究にもやくにたつと考えられる。
ROMAの概要
開発目的
情報爆発が起きている
大量のデータを保存するのは困難。
データを入れるだけでなく、高速にアクセスしたい。
また、データの喪失を回避したい。
具体例
ユーザーの閲覧履歴
増え続けるデータ
- 楽天ユーザ数は7000万人超(最近は日本人以外もいる)、1ヶ月に20万人程度増加
サイト全体のPVと同程度のデータ書き込み
- 楽天のPVは1日あたり約1億
ROMAとは?
楽天で開発されているRuby実装の分散KVS
Rubyで書いてるのは拡張がしやすいから
Rubyは今でこそ遅いと言われるがJITコンパイラがそのうちできればそこそこ速くなる!
まつもとゆきひろ氏との共同研究。
Rubyによる大規模分散処理といチャレンジのためにも作っている。
ROMAの特徴
動的にスケールアウト
- ROMAに参加するマシンを動的に追加可能
障害耐性が高い
- 利用者が冗長度を自由に設定
- 自動にフェイルオーバー機能
高速で、memchashedに互換なデータアクセス
プラグイン機構によるROMAの拡張が可能
- 独自コマンドやストレージ実装をRubyで追加、差し替え可能
閲覧履歴にROMAを使用
- >十分に耐えられる
ROMAのアーキテクチャ
複数マシンから構成されるPureP2P
Ruby実装の分散KVS(DHT)
Zero-hope(or one hop)DHT
Consistent Hashing
ROMAは複数のノードを持ち、そのノード単位でデータを格納管理
各ノードはユニーl区なハッシュ値をもち、ハッシュ空間を構築
- ハッシュ値の計算にはSHA-1を使用
- 範囲は0〜2^32(or 2~64 など起動時に変更可能)
※ノードは物理的なマシンを指しているわけではない
Zero-hopでのデータ探索
各ノードが全体のノード情報を保持
- 想定規模が高々100台程度のノード情報であるため
クライアントが環情報を保持することも可能
- ROMAに初めてアクセスした際に、クライアントは環情報を取得
- クライアントが担当ノードを計算して担当ノードに直接アクセス
Virtual Nodes
ROMAを構成するマシンは複数のvirtual nodesを管理
Virtual nodesが環状
Replication
クライアントからデータがPUTされたとき、担当ノードは自分以外のノードにそれぞれコピー
- ROMAが自動的に行う
- 冗長度はユーザーが設定
- 負荷状況に応じては冗長化に失敗するがeventual consistency
障害時の動作
- ホストがダウンしたりすると自動的にフェイルオーバーする(マルチキャストを使用)
- 障害ノードを切り離し、残りノードでサービスを継続
- 適度に冗長度を復旧する
ROMAオープンソースだからみんなつかってよ!!