Gree大規模分散ストレージ戦略

9,772 views

Published on

グリーでは、ユーザの増加に伴ないサーバ台数が増加し、冗長性やスケーラビリティの低下が問題となってきていた。このような問題を解決するためにグリーでは独自の分散ストレージ (nanofs)を開発し、スケーラビリティや信頼性の向上、冗長化を実現した

Published in: Technology
  • Be the first to comment

Gree大規模分散ストレージ戦略

  1. 1. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential GREEの大規模 分散ストレージ戦略
  2. 2. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential もくじ • GREEで使われてきた画像サーバの歴史 • 分散ストレージシステム(nanofs)の紹介 • GREEでの使用例
  3. 3. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential 画像サーバの歴史
  4. 4. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential 第一世代 • NFSサーバで画像データを保存 • メリット • 簡単に導入できる • 高価なNFSサーバを使用すれば信頼性や安定 性が保たれる • デメリット • Webサーバへのトラフィックが増加するとNFS サーバへのトラフィックが増えパフォーマンスが 低下する • スケールアップし続けるにはコストがかかる
  5. 5. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential 第二世代 • ユーザ毎にパーティションを設定。1パーティショ ンに対し2台のwebDAVサーバを用意し保存する • メリット • 比較的安価なサーバでスケールアウトができる • デメリット • 一部のユーザが大量の画像をアップロードする とディスクがいっぱいになるためユーザ毎に別 のパーティションに移動させないといけない • ユーザ分割のためパーティションを増やし続け なければいけないためサーバ台数の増大
  6. 6. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential 第三世代 • 第二世代の仕組みに加えサーバをスケールアッ プ • メリット • サーバ台数を減らせた • デメリット • 1台のサーバへのトラフィックが増大し webDAVサーバのアプリケーションが処理しき れなくなった • サーバ費用増加
  7. 7. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential これまで問題のまとめ • NFSのスケールアップにはコストがかかる • スケールアウトする仕組みが必要 • ユーザ毎の分割ではディスクがいっぱいになった ときに他のサーバに引越しなければいけない • 運用コストがかかる • スケールアップしてもサーバアプリケーションの限 界がある • 分散しなければいけない
  8. 8. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential さらにGREEの背景として • GREEでは1億ユーザを目指している • ユーザの増加と共に写真・動画データも増加 • サービスは停止できない • アプリケーション側の変更は極力行ないたくない • ユーザの大切なデータを失うことは許されない • 冗長化されていないといけない
  9. 9. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential 次世代がどうあるべきか • これまでの経験上下記の3つが重要なのではな いか • Scalability(拡張性) • スケールアウトできること • Availability(可用性) • 対障害性が強く冗長化がなされていること • Maintainability(保守性) • 運用コストが低いこと
  10. 10. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential 次世代ストレージのイメージ 90 Webサーバ ストレージ
  11. 11. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential 分散ストレージ (nanofs)の紹介
  12. 12. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanofs特徴 • 内部実装はRuby • カーネルモジュールを必要としない • ファイル毎の分散 • 非同期でデータをコピー(バックアップ)を行う • プロトコルはHTTPを使用 • サーバアプリケーションは選択可能 • apache, nginx, lighttpd, thin • データベース(KVS)も選択可能 • MySQL,Flare, memcacheに対応
  13. 13. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanofsの構成 • 3つのコンポーネント • nanofsd(dispatcher) • nanofsn(node) • nanofsw(worker) • データベース(KVS) • queue Webサーバ nanofsd nanofsn nanofsw DB queue
  14. 14. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanofsd • Webサーバからリクエ ストを受け付ける • nanofsnにリクエストを 振分ける • データベースにデータ の情報を送る • queueに処理の指示を 送る Webサーバ nanofsd nanofsn nanofsw DB queue
  15. 15. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanofsw • queueに送られた指示 に従い非同期に処理を 行う • 複数のnanofsnにデー タをコピーする • nanofsnに保存されて いるデータを削除する Webサーバ nanofsd nanofsn nanofsw DB queue
  16. 16. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanofsn • データを保存する Webサーバ nanofsd nanofsn nanofsw DB queue
  17. 17. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential データベース・queue • データベース • 保存したデータの情 報を管理 • nanofsnサーバのid • nanofsnサーバの ファイルパス • queue • nanofswが処理す る指示を格納 Webサーバ nanofsd nanofsn nanofsw DB queue
  18. 18. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential HTTPリクエスト毎の処 理
  19. 19. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential GETメソッドの処理(1) • nanofsdがGETリクエストを受け取る • データベースから画像情報を所得する • 保存されているnanofsnのidとファイルパス • データを取得するnanofsnを選ぶ • ランダムとapacheのRequest Countingに対 応 • もしも選択されたnanofsnがダウンしているとき は別のnanofsnを選びなおす
  20. 20. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential GETメソッドの処理(2) • 保存されているnanofsnからHTTP GET通信で データを取得 • WebサーバにHTTPレスポンスを返す
  21. 21. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential GETメソッド Webサーバ nanofsd nanofsn nanofsw database queue
  22. 22. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential GETメソッド Webサーバ nanofsd nanofsn nanofsw database queue HTTP GETリクエスト
  23. 23. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential GETメソッド Webサーバ nanofsd nanofsn nanofsw database queue 画像情報を取得 HTTP GETリクエスト
  24. 24. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential GETメソッド Webサーバ nanofsd nanofsn nanofsw database queue 画像情報を取得 画像データを取得 HTTP GETリクエスト
  25. 25. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential GETメソッド Webサーバ nanofsd nanofsn nanofsw database queue 画像情報を取得 画像データを取得 HTTP GETリクエスト HTTPレスポンス
  26. 26. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド(1) • nanofsdでHTTP PUTリクエストを受け取る • 保存するnanofsnを選ぶ • 選ばれたnanofsnにHTTP PUTリクエストで保存 する • データベースに画像情報を格納する • コピーの指示をqueueにENQUEUEする • WebサーバにHTTPレスポンスを返す
  27. 27. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド(2) • queueからnanofswがDEQUEUEする • データベースから画像情報を取得 • 保存されているnanofsnからHTTP GETリクエスト で画像データを取得 • 別のnanofsnにデータをコピーする • データベースに画像情報を更新する
  28. 28. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド nanofsw nanofsn nanofsd Webサーバ database queue
  29. 29. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド nanofsw nanofsn nanofsd Webサーバ database queue HTTP PUTリクエスト
  30. 30. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド nanofsw nanofsn nanofsd Webサーバ database queue 画像をnanofsnに保存 HTTP PUTリクエスト
  31. 31. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド nanofsw nanofsn nanofsd Webサーバ database queue 画像情報を保存 画像をnanofsnに保存 HTTP PUTリクエスト
  32. 32. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド nanofsw nanofsn nanofsd Webサーバ database queue 画像情報を保存 ENQUEUE 画像をnanofsnに保存 HTTP PUTリクエスト
  33. 33. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド nanofsw nanofsn nanofsd Webサーバ database queue 画像情報を保存 ENQUEUE 画像をnanofsnに保存 HTTP PUTリクエスト HTTPレスポンス
  34. 34. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド nanofsw nanofsn nanofsd Webサーバ database queue 画像情報を保存 DEQUEUE ENQUEUE 画像をnanofsnに保存 HTTP PUTリクエスト HTTPレスポンス
  35. 35. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド nanofsw nanofsn nanofsd Webサーバ database queue 画像情報を保存 DEQUEUE ENQUEUE 画像をnanofsnに保存 HTTP PUTリクエスト HTTPレスポンス 画像情報を取得
  36. 36. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド nanofsw nanofsn nanofsd Webサーバ database queue 画像情報を保存 DEQUEUE ENQUEUE 画像をnanofsnに保存 画像データを取得 画像データを別のnanofsnにコピー HTTP PUTリクエスト HTTPレスポンス 画像情報を取得
  37. 37. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential PUTメソッド nanofsw nanofsn nanofsd Webサーバ database queue 画像情報を保存 DEQUEUE ENQUEUE 画像をnanofsnに保存 画像データを取得 画像データを別のnanofsnにコピー HTTP PUTリクエスト HTTPレスポンス 画像情報を取得 画像情報を更新
  38. 38. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential DELETEメソッド • nanofsdでHTTP DELETEリクエストを受け取る • 削除の指示をqueueにENQUEUEする • WebサーバにHTTPレスポンスを返す • queueがらnanofswがDEQUEUEする • データベースから画像情報を取得 • 保存されているnanofsnからHTTP DELETEリク エストで削除する • 保存されている画像は複数のnanofsnにあるので 全台削除していく
  39. 39. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential DELETEメソッド nanofsw nanofsn nanofsd Webサーバ database queue
  40. 40. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential DELETEメソッド nanofsw nanofsn nanofsd Webサーバ database queue HTTP DELETEリクエスト
  41. 41. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential DELETEメソッド nanofsw nanofsn nanofsd Webサーバ database queue ENQUEUE HTTP DELETEリクエスト
  42. 42. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential DELETEメソッド nanofsw nanofsn nanofsd Webサーバ database queue ENQUEUE HTTP DELETEリクエスト HTTPレスポンス
  43. 43. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential DELETEメソッド nanofsw nanofsn nanofsd Webサーバ database queue DEQUEUE ENQUEUE HTTP DELETEリクエスト HTTPレスポンス
  44. 44. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential DELETEメソッド nanofsw nanofsn nanofsd Webサーバ database queue 画像情報を取得 DEQUEUE ENQUEUE HTTP DELETEリクエスト HTTPレスポンス
  45. 45. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential DELETEメソッド nanofsw nanofsn nanofsd Webサーバ database queue 画像情報を取得 DEQUEUE ENQUEUE HTTP DELETEリクエスト HTTPレスポンス 画像情報を削除
  46. 46. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential DELETEメソッド nanofsw nanofsn nanofsd Webサーバ database queue 画像情報を取得 DEQUEUE ENQUEUE 画像データを削除 HTTP DELETEリクエスト HTTPレスポンス 画像情報を削除
  47. 47. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential 障害時の処理
  48. 48. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential LVS nanofsd nanofsdがダウン Webサーバ VRRP
  49. 49. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential LVS nanofsd nanofsdがダウン Webサーバ VRRP
  50. 50. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential LVS nanofsd nanofsdがダウン Webサーバ VRRP heartbeat
  51. 51. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential LVS nanofsd nanofsdがダウン Webサーバ VRRP heartbeat リクエスト
  52. 52. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential LVS nanofsd nanofsdがダウン Webサーバ VRRP heartbeat リクエスト
  53. 53. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanfsnがダウン nanofsw nanofsn nanofsd Webサーバ
  54. 54. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanfsnがダウン nanofsw nanofsn nanofsd Webサーバ
  55. 55. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanfsnがダウン nanofsw nanofsn nanofsd Webサーバ リクエスト
  56. 56. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanfsnがダウン nanofsw nanofsn nanofsd Webサーバ リクエスト
  57. 57. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanfsnがダウン nanofsw nanofsn nanofsd Webサーバ リクエスト
  58. 58. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanfsnがダウン nanofsw nanofsn nanofsd Webサーバ リクエスト
  59. 59. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential nanfsnがダウン nanofsw nanofsn nanofsd Webサーバ リクエスト
  60. 60. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential GREEでの使用例
  61. 61. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential 実際に使っている構成 Webサーバ nanofsn(apache2) nanofsd(apache2) nanofsw LVS(keepalived) database(MySQL5.1) master slave master slave queue(MySQL5.1)
  62. 62. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential 問題を解決 • NFSのスケールアップにはコストがかかる • 比較的安価なサーバでスケールアウトが可能 • ユーザ毎の分割ではディスクがいっぱいになった ときに他のサーバに引越しなければいけない • ファイル毎の分散なので引越は不要 • スケールアップしてもサーバアプリケーションの限 界がある • nanofsdを増やせば負荷分散が行える
  63. 63. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential 現在の状況 • 画像サーバの一部に投入中 • 全画像サーバに投入予定 • 開発中 • 基本機能は完了
  64. 64. Copyright © 2004-2010 GREE,Inc. All Rights Reserved.Confidential さいごに • nanofsは公開を予定しております • ご意見・ご感想・ご要望は • twitter 公式ハッシュタグ #nanofs • グリーエンジニアブログを書いております • http://labs.gree.jp/blog/

×