Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

アーキテクチャ

Slide 6

Slide 6 text

Backend の話 ● ストレージについて ○ MogileFS ○ Storage API ● ジョブキューについて ○ TheSchwartz ○ Job API

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Backend (2) ● Storage API ○ アプリケーションとストレージを繋ぐ ○ Perl 5.8 + Catalyst 5.7 ○ lighttpd + FastCGI ○ ファイル操作(保存・削除) ○ 基本的な HTTP メソッドをサポート ○ なぜわざわざ API? ■ 疎結合 ■ ライブラリの実装言語の違い(Perl と Ruby)

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

詳しくは・・・ ● 関西オープンソース 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

Slide 12

Slide 12 text

Frontend の話 ● Ruby + Rails ● Passenger ● Plugins / Middlewares ● Test

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Frontend (2) ● Phusion Passenger ● lighttpd + FastCGI から移行 ○ 理由 (1) 省メモリ化したかった ■ メモリ消費量は変わらなかった・・・ ○ 理由 (2) 安定化したかった ■ だいぶ安定した ● アプリケーションサーバは2台で運用 ○ 若干の増減あり(なるべくスケールアップ)

Slide 15

Slide 15 text

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 も試してみたい

Slide 16

Slide 16 text

Frontend (4) ● Test ○ shoulda ○ factory_girl (@func09 さんのブログで勉強した) ■ http://www.func09.com/wordpress/archives/532 ○ mocha ○ 書いてます、けど不十分・・・ ○ RSpec にすべきか年数回くらい悩む

Slide 17

Slide 17 text

今後について ● 正直このスライドにたどり着けると思ってなかった ● 開発者目線で今後取り組みたいこと ○ 継続的インテグレーション ○ テストの充実 ○ Rails のバージョンアップ ○ 「日本一の写真共有サービス」を目指したい ○ 「日本の代表的な Rails 製サービス」に数えられたい

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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