OpenSourceConference 2008 Shimane

openSUSE × Ruby on Rails ＋ α で作るWebサービス

moonlinx.jp
Kazuhisa Hara
1

About me

Kazuhisa Hara
moonlinx の中の人してます
一応SystemsEngineerらしいですよ？
今日は横浜から参戦
飛行機とか修学旅行以来だよ！

2

Introductory remarks
お話を始める前に…

moonlinxって何だよ…

3

What is moonlinx ?

moonlinxとは…
デザイン×音楽＝新しいクリエイティション• オンラインカルチャーマガジン ＆ webコミュニティ
クリエーター、ミュージシャン向けプロモーションサイト
• 8月27日、装いも新たに完全リニューアル！！
• 今回はそんなmoonlinx・コミュニティサイトのシステムの1部をご紹介します

MagazineCommunity4

Technology

moonlinxを支えるテクノロジー
・openSUSE Linux・Ruby on Rails・MogileFS・Perlbal・MovableType
・… and more !
5Operation results

openSUSEでの運用実績
2007年2月、トライアルサービスとしてスタート以来、(メンテ以外では)完全無停止、そして無事故！

月間50万PV以上のリクエストに応え続ける、止まらないシステム / サービスを実現！

これまでも、そして これからも！
6AgendaAgenda• What is moonlinx ?
• Why Ruby on Rails ?
• The Another important Technology• DANGA INTERACTIVE
・What is MogileFS ?
・What is Perlbal ?
• And more
• Last method7

Why Ruby on Rails ?

Why Ruby on Rails ?

8

Once upon a time …

ちょっとさかのぼって、リニューアル前のmoonlinx

9

GWT

Google Web Toolkit
を用いて開発された

フルAjax Webアプリケーション
GWT → Java のコードから Java Script を生成してくれる

10

GWT, but …

しかし！

GUIデザインの開発・カスタマイズが非常に大変…

コレ正直しんど過ぎッス11

GWTs Code

テーブルタグを表現する場合//列2,行4のテーブルを作成する場合
Grid tbl = new Grid(2, 4);//セルへ列のタイトルを挿入する場合
tbl.setWidget(0, 0, new Label(“名前”));tbl.setWidget(0, 1, new Label(“性別”));tbl.setWidget(0, 2, new Label(“写真”));tbl.setWidget(0, 3, new Label(“ホームページ”));//セルへイメージ挿入する場合
Image img = new Image();
img.setUrl("http://hogehoge/images/logo.gif");
tbl.setWidget(1, 2, img);//リンクの挿入
Hyperlink link = new Hyperlink(“トップページ", “top");tbl.setWidget(1, 3, link);
12

Additional blowさ・ら・に！

SEOに恐ろしく弱い
SEO：Search Engine Optimization（検索エンジン最適化）
13

robot returns to home

静的HTMLはたった数行！
しかも、単にGWTを呼び出してるだけ！！

当然、サーチロボット
あっさり帰宅・・・

なんにもないじゃん・・・・・・・。

moonlinx※ プライバシー保護の為、一部モザイク処理をしております14

Selfishness

これじゃまずい、けど時間もないよ？

（必要に応じて）Ajaxは使っていきたいもっとGUIカスタマ
イズを柔軟にできないといけない

SEO対策もうまくできるフレームワーク

ワガママ言いたい放題！！
15

The demand is answered

そんなワガママを叶えてくれたのが…

Ruby On Rails

16

How did you change?

具体的には…？
• 時間もあんまりかけられないんだけど作法を覚える＝開発速度に正比例の手応え、噂通りの高速開発が可能に• Ajax捨てたくないんだけどヘルパーが巧く吸収してくれる• GUIデザインは？
GWTと比べて、HTMLベースでいけるので、自由度大幅UP• SEO対策はどうなの?
RESTに簡単対応(キレイなURL)、そしてソースがHTMLベースなのでサーチエンジンがちゃんと引っ掛けてくれる(笑)
17

GWT summary

GWTをお勧め出来るサイト• 社員やオペレータ等が利用する業務系Webアプリケーション• 集客を必要としない、既に知名度の高いWebサイト（高級ファッションブランド等）

GWTをお勧め出来ないサイト• GUIデザインのカスタマイズが頻繁に発生するWebサイト• 集客（SEO対策）が必要なWebサイト

18

want the shortcut.

とにかくサーバサイドの手を抜きたい！
使える時間はGUIデザインやユーザビリティの改善につぎ込みたい！！

見た目命！！！
そんなmoonlinxにはRuby On Rails
なぜなら、彼もまた、特別な存在だからです。
19

The Another important Technology

moonlinxを裏から支える、もう一つ重要なテクノロジー

20Danga Interactive

DANGA INTERACTIVE

21

Brad Fitzpatrick

moonlinxを裏から支えるOSS• MogileFS• Perlbal• memcached
共通点 ＝ 全て同じ作者
Brad Fitzpatrick さん。なんて読むんだ…？
成果物はLiveJournal , Vox(SixApart)で使われてるPerl(CPAN)界隈の超有名人！らしい。
そんな彼のサイトが『DANGA INTERACTIVE』
http://www.danga.com
何このイケメン
カッコよすぎだろ…
22

Why Danga ?

Why DANGA ?

23

Management of media filemoonlinxはユーザーがイメージ・音楽・動画などの複数のメディアファイルをバンバン(←ここ重要)アップロードすることが出来るサイト

ディスク容量や管理が馬鹿にならない24

Selfishness

ファイルのバックア
ップとか楽したいん
だけどNFSとかさ、マウントとかしたくないんだよね

ディスクの追加は簡単に、かつサービス止めずにしたい

勿論SANとか買う
金など何処にもない

またまた言いたい放題！！
25

The demand is answered

それ、MogileFSで出来るよ！

26

What is MogileFS ?

What is MogileFS ?
danga.com謹製OSS分散ファイルシステム

Amazone S3やGFS
ライクなシステム

特殊カーネル不要
自動レプリケーション
RAID , SAN , NFS 一切不要
ファイルシステム依存なし
簡単ディスク追加
自動フェイルオーバー
27

MinimumOverview - Upload
mindevcount : ２の場合
※ 作成するコピーの数

Webページ
アップローダーファイル

Key : hogehoge

Ruby on Rails

アプリケーションのMogileインターフェイスがこのキーでStore

Storageのステータス管理

mog DB(MySQL)
Storage nodeの、どこかに2つファイルが作成される

MogileFS

DB
http

AUTO Replication
ファイル

Mogile Storage node

mogilefsd(trackers)

mogstored

ファイル

28

MinimumOverview - Download① Key : hogehoge
アプリケーションがkeyをtrackersに問い合わせる

Ruby on Rails➂

アプリケーションは受け取ったファイルパスで実ファイルを取りに行く、その後クライアントへ

MogileFS➁

DB

trackers(mogilefsd)はkey よりファイルのありかをDBから引っ張りアプリケーションに伝える

AUTO Replication
ファイル
ファイル

Mogile Storage node29

The demand is answered

よーするに

30

UploadをMogileFS

mogilefsd(trackers)にファイル

Key : hogehogeと言うKeyを付与して投げると
mogstored

Storage nodeの、どこかにmindevcount : ２※ 作成するコピーの数分コピーされる

しかもコピー自体は非同期http通信！

31

Download

MogileFS

Key : hogehoge

mogilefsd(trackers)にと言うKeyを問い合わせるとmogstored
Storage nodeがファイルの、どこかにあるかを教えてくれる

しかもStorage nodeの死活監視 / 死んだ時は自動でレプリカ作成もしてくれる！
32

Selfishness

でも、trackersは毎回DBに問い合わせすんでしょ？

ファイルの扱いはRailsで受け持たな
きゃいけないわけ？

1画面出すのに何回SELECT文走らせるんだよRailsでメディアファイル扱うとコストでかすぎまたかっ！
33

The demand is answered

それ、Perlbalで（ｒｙ34

What is Perlbal ?

What is Perlbal ?
Sexy reverse proxy load balancer andwebserver, full of tricks.
Webサーバーロードバランサー
リバースプロキシ
プロキシキャッシュサーバー
MogileFSと相性最高！
35

PerlbalRailsの前に、Perlbalを置いてメディアファイルのやり取りをやらせてしまう

Railsより遥かにコストが掛からない！
しかも、将来の拡張に柔軟対応
ロードバランシングも実現できる36

X-REPROXY-CACHE-FOR

DBリクエスト対策は、PerlbalのX-REPROXY-CACHE-FORでファイルパスをキャッシュ
http://media.moonlinx.jp/media/system/hoge/xxxyyyzzz.jpg

Perlbalでproxyしたこの値をキャッシュすると…
毎回trackers(mogilefsd)に問い合わせが不要
つまりDBへのアクセスがいらない！
37

Overview

Perlbalにキャッシュがあれば、即ファイルパスを返す

PerlbalRuby on Rails

ファイルの処理は、Railsをすっ飛ばしてPerlbalが受け持つ

MogileFS

trackersへの問い合わせ、
つまりDBアクセスなし

DB

ファイル

AUTO Replication
Mogile Storage node38

memcached蛇足ですが…

memcached

みんな大好き、爆速メモリキャッシュサーバー
オブジェクトをメモリにキャッシュ
導入ラクチン
分散もできるmixi, はてな, Facebook, Vox,
LiveJournal, ニコ動…みんな大好き39

MogileFS - memcached Support

そのmemcachedをtrackers(mogilefsd)に組み込むと…
MogileFSのキーやファイルの場所をキャッシュ• trackersに問い合わせが来た時点で初めて効果を発揮する
今回はPerlbalのキャッシュで、trackersにすら到達しないような作りだから、現時点ではあんまり効果なし
・試験的・個人的興味な意味での導入です…
・Uploadのタイミングでキャッシュするようにしたから、Perlbalのキャッシュに乗るまでは有能(短っ！)• ただしmemcachedは分散設置できるから、今後Perlbalで追いつかなくなった時の2次キャッシュ的な対策にはなるかも40

In the openSUSE Repository
さて…

そんな便利なDANGA INTERACTIVEシリーズですが実は。
openSUSEのRepositoryにフツーにあったりします
便利な世の中になったな

41

Method

ちょっとマイナーっぽくて、デフォルトのRepositoryにないソフトなんだよね『http://software.opensuse.org/search/で探してみましょう』

1-Click installするもよし、Repositoryに追加するもよし、直にrpm落としてコマンド叩くもよし42

And more

And more !

43Construction of verification environment

検証環境の構築• MySQLやMogileFSのレプリケーションが動くか検証したい• 物理的に足りない環境もどうにかして用意・検証したい

それXen(仮想マシン)でやればいいよ！
• ベンチマークは流石に難しいが、動作検証程度なら問題なし

44

Health check

運用監視

Nagiosを使って常に監視• サーバ / サービスの状況は• 何かあれば、即アラートメールが飛んでくる45

Monitoring

モニタリング

Muninを利用• サーバ / サービスのモニタリングは• チューニングや増強判断の素材に

46

Access analysis

アクセス解析

awstatsを利用• Apacheのアクセス解析には• ユーザーの嗜好や、動向をチェック

47

That and this

いかがでしたでしょうか、色々ご紹介してきましたが…

これの用意、SUSEのYaSTで(ほとんど)全部出来るんです。
Rubyも、Railsも、MogileFSも、Perlbalも、memcachedも、Xenも、Nagiosも、Muninも、awstatsも、ついでに自動起動も、ランレベルの指定も、sysconfigの書き換えも、ハードウェアの管理も、ネットワークの管理も、ファイアウォールも…

48

want the shortcut.

とにかくサーバサイドの手を抜きたい！
インストール・コンパイル作業よりもチューニングやユーザビリティの改善につぎ込みたい！！

そこは時間を掛ける所じゃない！
そんなmoonlinxにはopenSUSE
なぜなら、彼もまた、特別な存在だからです。
49

Last method

まとめQ. 開発速度上げられて、Ajax使えて、SEO対策出来て、デザインしやす
くて…そんなフレームワークない？
A. Ruby on Railsオススメ！
Q. サーバサイドの構築とか時間掛けないでやりたいんだけどA. それSUSEで実現できるよ！
Q. アートや音楽に興味あるんだけどA. moonlinx使ってね！
Q. クリエーターな知り合いが居るんだけどA. moonlinx薦めてね！
50

Present by …

Thank you for listening !

http://moonlinx.jp
51