第2回 rsyncを用いたコンテンツの分散

内間 圭介
株式会社Cuon

2008/10/16

rsyncによる画像転送

 rsyncによる画像転送もモデル内に定義する。画像転送後、Webアプリケーションサーバ上のローカルファイルを削除する。このrsyncメソッドは、コントローラから実行する。

class Image < ActiveRecord::Base

# 中略

  def rsync
    # コンテンツサーバの情報
    server = self.user.contents_server
    # 転送元、転送先ディレクトリの生成
    src_path = "#{RAILS_ROOT}/public/store/#{self.user_id}"
    dst_path = "#{server.user}@#{server.ip}:#{server.dir}"
    # コマンド生成
    cmd = "/somewhere/rsync -az #{src_path} #{dst_path} > /dev/null 2>&1"
    # rsync実行
    unless system(cmd)
      logger.error("rsync failed : #{cmd}")
      raise RuntimeError, "failed to exec rsync : #{cmd}"
    end
  end
  # 転送元ディレクトリを消す
  FileUtils.rm_rf(self.picture_dir)
end

実装コストを取るか、運用コストを取るか

 今回は、rsyncを用いたコンテンツの分散について述べた。コンテンツサーバをマウントしないという方針は珍しいが、スケールアウトのしやすさ、特にインフラ側の作業が楽というメリットがある。

 その代わり、以下のような問題点もある。

  1. アプリケーション側の実装コストが高い
  2. after_findでパスを張り替えるので、ほかのモデルから画像モデルをinclude(JOIN)できない(画像パスが正常に取れなくなる)

 1の実装コストの高さに関しては、特にコンテンツサーバ上の画像を加工する際などに、同様にrsyncを使用し、画像をWebアプリケーションサーバ上にダウンロードする必要があるので、別途実装コストが発生する場合がある。

 2については、モデルにコンテンツサーバ側の画像URLを保存し、それを用いた画像表示用ヘルパを用意すればincludeも可能となる。

 アプリケーションを実装する側から見れば、コンテンツサーバをマウントした方が楽なのだが、ユーザー数が増え、サーバが増えて行く際のインフラ構築という面で見ると、ハードウェアを追加してデータベースに登録するだけという単純なスケールアウトが実現できるのは魅力である。

 後は、この施策が生きるようにCGMサイトのユーザー数を増やしていくだけだ。

3/3
 

Index
rsyncを用いたコンテンツの分散
  Page1
コンテンツサーバの分離
file_columnによる画像管理
  Page2
画像保存先ディレクトリをどう指定するか
file_columnによる動的な画像保存先変更
Page3
rsyncによる画像転送
実装コストを取るか、運用コストを取るか
RoRでCGMサイト構築虎の巻

 Ruby/Rails関連記事
プログラミングは人生だ
まつもと ゆきひろのコーディング天国
 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる
生産性を向上させるRuby向け統合開発環境カタログ
Ruby on Rails 2.0も強力サポート
 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる
かんたんAjax開発をするためのRailsの基礎知識
Ruby on RailsのRJSでかんたんAjax開発(前編)
 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう
Praggerとnetpbmで作る画像→AA変換ツール
Rubyを使って何か面白いものを作ってみよう!
 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう
コードリーディングを始めよう
Railsコードリーディング〜scaffoldのその先へ〜(1)
 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間