Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 37 Anzeige

ROMAについて

Herunterladen, um offline zu lesen

"楽天で開発され、この秋に公開を予定しているKVS、ROMAについてお話します。今回は楽天グループで実際に使われている事例やROMAを使うメリットを中心にお話いたします。" http://tech.rakuten.co.jp/rtc2009/subject.html#lecture_5

"楽天で開発され、この秋に公開を予定しているKVS、ROMAについてお話します。今回は楽天グループで実際に使われている事例やROMAを使うメリットを中心にお話いたします。" http://tech.rakuten.co.jp/rtc2009/subject.html#lecture_5

Anzeige
Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Ähnlich wie ROMAについて (20)

Anzeige

Weitere von Rakuten Group, Inc. (20)

Aktuellste (20)

Anzeige

ROMAについて

  1. 1. ROMA について 楽天株式会社 楽天技術研究所 西澤無我 2009年10月24日 1
  2. 2. 自己紹介 • 西澤無我 • 2008 年 3 月 東京工業大学大学院 博士課程 卒業 • 2008 年 4 月 新卒として楽天株式会社に入社 • その後、楽天技術研究所にて ROMA の開発に従事 2
  3. 3. 目次 • 背景 • ROMA とその特徴 • サービス導入への試み • スペシャルゲスト & オープンソース化タイム • まとめ 3
  4. 4. 目次 • 背景 • ROMA とその特徴 • サービス導入への試み • スペシャルゲスト & オープンソース化タイム • まとめ 4
  5. 5. 情報爆発 • インターネット上のデータが指数関数的に増加 • より良いサービスへ向け、サービス側はデータを大量保持 – 楽天も例外ではない 5
  6. 6. 大量のデータ保持は困難 • 増加していくデータの入れ物は? • データへ高速アクセスするには? • データの喪失を回避するには? 日々頭を悩ましています 6
  7. 7. 具体例:ユーザの閲覧履歴 • 閲覧履歴とは、閲覧した商品ページを保持しておく機能 • ユーザの利便性向上のため、楽天の多くのサービスで導入 – 例:楽天市場「ページ閲覧履歴」、楽天トラベル「最近見た宿泊施設」 7
  8. 8. 閲覧履歴の実装 • サーバ側で、ユーザ毎に閲覧した商品をリストとして管理 – ユーザが商品を閲覧したときに、その商品情報をリストの先頭に追加 – ユーザが見たいときに、データ・ストアからリストを取得 商品 ID をユーザ毎の 商品ページを閲覧 リストに格納 サーバ側の データ・ストア 閲覧履歴ページの送信 ユーザの閲覧リストを取得 エンド・ユーザ Web サーバ 8
  9. 9. 閲覧履歴のデータ格納は困難 • 増え続けるデータ – 楽天のユーザ数は約 6,000 万人、1 ヶ月に 20 万人程度増加 • サイト全体の PV と同程度のデータ書き込み – 楽天の PV は、1 日当たり約 1 億 • ユーザの利便性維持のため、データは失われてはならない RDB?Memcached?何に保持しよう? 9
  10. 10. 目次 • 背景 • ROMA とその特徴 • サービス導入に向けた試み • スペシャルゲスト & オープンソース化タイム • まとめ 10
  11. 11. ROMA • 楽天で開発されている Ruby 実装の分散 KVS – 複数マシンから構成されるデータ・ストア – ROMA の利用者には、1 つの大きなハッシュテーブルに見える • KVS (Key-Value Store) とは – Key と Value のペアを高速に読み書き可能なデータ・ストア リクエスト Key と Value を PUT レスポンス Key に対する Value を GET エンド・ユーザ Web サーバ ROMA (分散 KVS) 11
  12. 12. まつもとゆきひろ氏との共同研究 • まつもとゆきひろ氏 (楽天技術研究所 フェロー) との共同研究 • Ruby による大規模分散処理というチャレンジ 【まつもとフェローの問題意識】 【楽天の問題意識】 Rubyをもっと大規模に使って データは沢山持っていていろいろ もらいたいけど、誰かそういう機能を やりたいけど、もっと効率的・生産的に 作って使ってほしい 処理するにはどうすればいいだろう 12
  13. 13. ROMA の特徴 • 動的にスケール・アウト – ROMA に参加するマシンを動的に追加可能 – 新規マシン分だけ、データ領域が拡張され、スループットが向上 • 障害耐性が高い – 利用者が冗長度を自由に設定 – 自動フェイル・オーバー機能 • 高速で、memcached に互換なデータ・アクセス • プラグイン機構による ROMA の拡張が可能 – 独自コマンドやストレージ実装を Ruby で追加・差し替え可能 13
  14. 14. 閲覧履歴にて ROMA 稼働中 • 増え続けるデータ – 動的にスケール・アウトさせ、データ格納領域を拡張 • 1 日 1 億程度のデータ書き込み – 負荷検証し、充分 ROMA で耐えられる • ユーザの利便性維持のため、データは失われてはならない – 冗長化と自動フェイル・オーバーにより、データ喪失を回避 市場とトラベルの閲覧履歴データ・ストアとして 現在稼働中 14
  15. 15. そろそろソースの公開時期 • 2007 年の楽天テックカンファでソース公開を宣言 • 2008 年の楽天テックカンファで公開したかったが、出来ず • RubyKaigi 2009 でも、公開出来ず • そして… 15
  16. 16. ROMA 0.8.0 オープンソース化 • 今日公開します! – 楽天のサービスに導入されてから、公開したかった 16
  17. 17. ROMA 0.8.0 オープンソース化 • 今日公開します! – 楽天のサービスに導入されてから、公開したかった この発表の最後にソースコードを push します! リポジトリ:http://github.com/roma/roma/tree 17
  18. 18. 目次 • 背景 • ROMA とその特徴 • サービス導入への試み • スペシャルゲスト & オープンソース化タイム • まとめ 18
  19. 19. 試み (1/6) ROMA にもっと大量にデータを格納できないの? 19
  20. 20. ストレージ実装の差し換え • サービス・レベルや規模に応じて、実装の差し換えが可能 – デフォルトのストレージ実装は Ruby Hash • 例:閲覧履歴データの格納には Tokyo Cabinet を使用 – メモリにデータを積むと、大量のマシンが必要 – データをファイルに書き込むことで、データを永続化 ROMA プロセス データの SET, GET Communication Command Storage データ領域にデータを SET, GET 20
  21. 21. 試み (2/6) PUT, GET だけじゃなく、 もうちょっとだけ複雑なコマンドを投げれない? 21
  22. 22. リストコマンド・プラグイン (1/2) • ROMA 本体を拡張するためのプラグイン機構 – Ruby でプラグインを作成 – プラグインを配置し、設定ファイルの変更のみ • 例:閲覧履歴のデータ・アクセス用のリスト操作コマンドを追加 ROMA プロセス データの SET, GET Communication Command Plug-in Command Storage データ領域にデータを SET, GET 22
  23. 23. リストコマンド・プラグイン (2/2) • リスト操作をアトミックに行える ① ユーザの閲覧履歴リストを取得 履歴リストの 2 番目を削除 ③ リストを ROMA に戻す ② リストの 2 番目を削除 ROMA 履歴リストの 2 番目を削除 リストの 2 番目を削除 ROMA 23
  24. 24. 試み (3/6) 格納データをオフラインで解析したいんだけど… 24
  25. 25. コマンド情報の非同期書き出し • 受け付けたコマンドを非同期に書き出し可能 – DB と非同期連携も可能 • 例:閲覧履歴のデータを非同期にログファイルに書き出す ROMA プロセス データの SET, GET Communication Command Storage 非同期にコマンドを 書き出す データ領域にデータを SET, GET 25
  26. 26. 試み (4/6) ROMA ってどうやって監視するの? 26
  27. 27. Stats コマンド • 各 ROMA プロセスの状態を表示可能 • 例:定期的な stats コマンド実行で、ROMA の状態を把握 version 0.8.0 …… ROMA プロセスの stats.address roma0 ホスト名、ポート番号 stats.port 11211 stats.daemon true stats.name ROMA stats.verbose false …… ROMA プロセスへの stats.write_count 0 SET, GET カウント stats.read_count 0 …… storages[roma].storage.storage_path /home/muga/roma/ruby/server/roma0_11211/roma storages[roma].storage.divnum 10 …… storages[roma].storage[0].path /home/muga/roma/ruby/server/roma0_11211/roma/0.tc ROMA プロセスの storages[roma].storage[0].rnum 642 総 key 数とサイズ storages[roma].storage[0].fsiz 591104 …… ROMA に参加する routing.nodes ["roma0_11211", "roma0_11212", "roma0_11213"] プロセス一覧 …… END 27
  28. 28. 試み (5/6) ROMA のバージョンアップ時に、 サービスを止めたくないんだけど… 28
  29. 29. メリット5:ノンストップのバージョン・アップ • ROMA 全体を止めずに、バージョン・アップ可能 – 冗長度が高ければ、小さな機能追加やバグ修正程度なら可能 • 各 ROMA プロセス毎に以下の操作を繰り返す ①一台だけ、サービス・アウト ②新しいソースを利用して、サービス・イン ROMA ROMA 29
  30. 30. 試み (6/6) 新規マシンの動的参加のオーバーヘッドって、 クライアント処理性能を落とさない? 30
  31. 31. 緩やかなデータの再配置 • データの再配置時、緩やかなデータ・コピーが可能 – クライアントの応答性能を下げてはならない – 例:新規マシンが ROMA に参加、データの冗長度が低下 • データの取得、データの送信のスピードを動的に調節可能 – 例:アクセス集中時にはゆっくりコピー ROMA プロセス データの SET, GET ②再配置先に データを送信 Communication Command ①ストレージから Storage データを取得 データ領域にデータを SET, GET 31
  32. 32. 目次 • 背景 • ROMA とその特徴 • サービス導入への試み • スペシャルゲスト & オープンソース化タイム • まとめ 32
  33. 33. スペシャルゲスト • まつもとゆきひろ氏 (楽天技術研究所 フェロー) 33
  34. 34. オープンソース化タイム • 今からソースコードを公開します… • リポジトリ: http://github.com/roma/roma/tree 34
  35. 35. オープンソース化タイム • 今からソースコードを公開します… • リポジトリ: http://github.com/roma/roma/tree まだまだ未熟なプロジェクトですが、 開発を一緒に行っていただければと思います! 35
  36. 36. まとめ • データ・ストアの必要性について – 大量データを保持することは、それだけで大変 – 事例紹介として、楽天のサービスの閲覧履歴の紹介 • ROMA とその特徴 – 動的スケール・アウト、障害耐性が高い、プラグイン機構など – 楽天市場・楽天トラベルの閲覧履歴に導入 • ROMA を使うメリットをいくつか • ROMA のオープンソース化 – 今後、一緒に開発していきましょう! 36
  37. 37. おわり ご清聴ありがとうございました 37

×