30days Album の裏側 + 表側

19
30days Album の裏側 + 表側 2011/06/21 Mitaka.rb#12 @kyanny

description

Mitaka.rb#12 の LT で発表したときの資料です

Transcript of 30days Album の裏側 + 表側

Page 1: 30days Album の裏側 + 表側

30days Album の裏側 + 表側

2011/06/21 Mitaka.rb#12@kyanny

Page 2: 30days Album の裏側 + 表側

$ whoami

● 長永 健介 <Kensuke Nagae>● 刺身☆ブーメラン● @kyanny● ペパボでプログラマやってます

Page 3: 30days Album の裏側 + 表側

30days Album

● http://30d.jp/● 写真共有・保存サービス● 2008年4月リリース

Page 4: 30days Album の裏側 + 表側

規模は?

● 95,000 人のユーザー● 57,000,000 枚の写真● 113,000,000,000,000 バイトのストレージ

Page 5: 30days Album の裏側 + 表側

アーキテクチャ

Page 6: 30days Album の裏側 + 表側

Backend の話

● ストレージについて○ MogileFS○ Storage API

● ジョブキューについて○ TheSchwartz○ Job API

Page 7: 30days Album の裏側 + 表側

Backend (1)

● MogileFS○ 分散ファイルストレージ○ 大手サイトで導入事例多数(らしい)○ 詳しくは google.com/?q=mogilefs

Page 8: 30days Album の裏側 + 表側

Backend (2)

● Storage API○ アプリケーションとストレージを繋ぐ○ Perl 5.8 + Catalyst 5.7○ lighttpd + FastCGI○ ファイル操作(保存・削除)○ 基本的な HTTP メソッドをサポート○ なぜわざわざ API?

■ 疎結合■ ライブラリの実装言語の違い(Perl と Ruby)

Page 9: 30days Album の裏側 + 表側

Backend (3)

● TheSchwartz○ Job Queue○ delayed_job のようなもの○ 写真のリサイズ、動画の変換、ストレージへの保存○ 処理ごとに別のワーカーを稼働○ 各ワーカーは fork してマルチプロセスで処理

Page 10: 30days Album の裏側 + 表側

Backend (4)

● Job API○ アプリケーションと TheSchwartz を繋ぐ○ パラメータを受け取ってジョブキューに追加○ Storage API とほぼ同じ構成○ わざわざ API な理由もほぼ同じ○ こちらは XMLRPC

Page 11: 30days Album の裏側 + 表側

詳しくは・・・

● 関西オープンソース 2008 30days Albumの裏側○ http://www.slideshare.net/mizzy/2008-30days-album-

presentation● Yapc Asia 2009 ペパボでのPerlの使い方

○ http://www.slideshare.net/hiboma/yapc-asia-2009-perl● YAPC Asia 2010 30days Albumの裏側 後日談

○ http://www.slideshare.net/kyanny/inside-30days-albumlaterstory-5452817

Page 12: 30days Album の裏側 + 表側

Frontend の話

● Ruby + Rails● Passenger● Plugins / Middlewares● Test

Page 13: 30days Album の裏側 + 表側

Frontend (1)

● Ruby 1.8.6 (MRI)● Ruby on Rails 2.x.x (censored)● どちらもだいぶ古い● バージョンアップしたい!・・・しかしテストが(後述● Rails の灯を絶やさないように頑張ってます

Page 14: 30days Album の裏側 + 表側

Frontend (2)

● Phusion Passenger● lighttpd + FastCGI から移行

○ 理由 (1) 省メモリ化したかった■ メモリ消費量は変わらなかった・・・

○ 理由 (2) 安定化したかった■ だいぶ安定した

● アプリケーションサーバは2台で運用○ 若干の増減あり(なるべくスケールアップ)

Page 15: 30days Album の裏側 + 表側

Frontend (3)

● Plugins / Middlewares○ BackgrounDRb (!)

■ データベース使わないやつ (!!)■ ソースも情報もないオーパーツ状態■ Friends don’t let friends use backgrounDRb.■ http://www.engineyard.com/blog/2009/5-tips-for-

deploying-background-jobs/■ とはいえたくさん使ってる(非同期処理)

○ delayed_job■ 移行を見据えて一部で導入(メール投稿)■ 意外に使いづらい(priority)■ resque も試してみたい

Page 16: 30days Album の裏側 + 表側

Frontend (4)

● Test○ shoulda○ factory_girl (@func09 さんのブログで勉強した)

■ http://www.func09.com/wordpress/archives/532○ mocha○ 書いてます、けど不十分・・・○ RSpec にすべきか年数回くらい悩む

Page 17: 30days Album の裏側 + 表側

今後について

● 正直このスライドにたどり着けると思ってなかった● 開発者目線で今後取り組みたいこと

○ 継続的インテグレーション○ テストの充実○ Rails のバージョンアップ○ 「日本一の写真共有サービス」を目指したい○ 「日本の代表的な Rails 製サービス」に数えられたい

Page 18: 30days Album の裏側 + 表側

まさかまだ時間があるなんて

● 中途採用やってます!○ http://www.paperboy.co.jp/recruit/○ 開発言語は PHP です!(キリッ○ むしろ Rubyist 増えて欲しい・・・

Page 19: 30days Album の裏側 + 表側

ご静聴ありがとうございました