GridFSをHTTPでアクセスするサーバーを    nginx, perl, node.js で作ってみた           @kiwanami     2012/10/13 at fukuoka.pm
分散ファイルシステムが欲しい●    小さく始められる●    構築が楽●    速い●    候補:GlusterFS、GridFS、iSCSI●    その他:S3、MogileFS、STF、LeoFS、Ceph
GridFSとは?MongoDBを使った分散ファイルシステム
Webでファイルを配信したい●    アプリケーションでGridFSを読んで送るのは非    現実的●   nginx-gridfs    –   https://github.com/mdirolf/nginx-gridfs    –   n...
動画が見れません!●    HTTP 1.1 Range Request が必要    –   動画の頭出しなどでプレーヤーが使ってる●    → 対応した
そもそも動画はでかい!●    nginx-gridfs の実装上の問題    –   動画を送り切るまでブロックする!    –   ファイル全部を一度メモリに読み込む!●    そもそもでかい動画ファイルはストリーミン    グ処理(接続維...
nginx-gridfsオワタ \(^o^)/
対応策●    gridfs やめて別の DFS へ → 調査中●    別の gridfs のWeb配信作る
高速・スケーラブルWeb技術なら          Perl!●    非同期PSGI    –   → Twiggy●    非同期MongoDBドライバ    –   → MongoDB::Async●    あとはつなげるだけ!●    ...
非同期じゃない!●    ブロックするのでTwiggyが動かない!    –   MongoDB::Asyncモジュールざっと読んだけど、        非同期になっているように見えない●    Starmanにしてとりあえず動かす    – ...
イマドキの非同期・高速・スケーラ  ブルWeb技術なら☆Node.js●    部品は揃ってるので書いた●    動くけどちょっと怪しい    –   CPU負荷高い、メモリ使いすぎ    –   全速力で送ろうとして、でもIOが詰まってるので...
スループットの性能比較●    ファイルサイズ    –   200KByte(GridFSの1chunk以内)    –   200MByte 中くらい    –   1GByte でかい●    条件    –   自分自身へのab    ...
200KByte●   /usr/sbin/ab -c 200 -n 2000 http://~●    結果    –   ※rps = request per second    –   nginx cache: 3444.61 rps (...
200MByte●   /usr/sbin/ab -c 100 -n 100 http://~●    結果    –   nginx: x (swap out)    –   starman: 2.40 rps    –   node: 1....
1GByte●   /usr/sbin/ab -c 20 -n 20 http://~●    結果    –   nginx: x (timeout)    –   starman: 0.28 rps    –   node: 0.33 rp...
結果概要ファイルサイズ     starman                       node.js       nginx-gridfs                                 同時アクセス
結論●    nginxのモジュールの性能・品質は重要●    Cのモジュールに比べて、Perl、Node.jsは悪    くない性能●    すべてが非同期なNode.jsは素晴らしい
Upcoming SlideShare
Loading in …5
×

GridFSをHTTPでアクセスするサーバーを nginx, perl, node.js で作ってみた

2,557 views

Published on

1 Comment
1 Like
Statistics
Notes
  • node.js のコード https://gist.github.com/kiwanami/3932122
    perl のコード https://gist.github.com/kiwanami/3932115
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
2,557
On SlideShare
0
From Embeds
0
Number of Embeds
34
Actions
Shares
0
Downloads
6
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

GridFSをHTTPでアクセスするサーバーを nginx, perl, node.js で作ってみた

  1. 1. GridFSをHTTPでアクセスするサーバーを nginx, perl, node.js で作ってみた @kiwanami 2012/10/13 at fukuoka.pm
  2. 2. 分散ファイルシステムが欲しい● 小さく始められる● 構築が楽● 速い● 候補:GlusterFS、GridFS、iSCSI● その他:S3、MogileFS、STF、LeoFS、Ceph
  3. 3. GridFSとは?MongoDBを使った分散ファイルシステム
  4. 4. Webでファイルを配信したい● アプリケーションでGridFSを読んで送るのは非 現実的● nginx-gridfs – https://github.com/mdirolf/nginx-gridfs – nginxモジュール – 小粒なファイルは高速で速い – ブロックするが、アプリケーションでやるよりは速 くて我慢できるレベル
  5. 5. 動画が見れません!● HTTP 1.1 Range Request が必要 – 動画の頭出しなどでプレーヤーが使ってる● → 対応した
  6. 6. そもそも動画はでかい!● nginx-gridfs の実装上の問題 – 動画を送り切るまでブロックする! – ファイル全部を一度メモリに読み込む!● そもそもでかい動画ファイルはストリーミン グ処理(接続維持したままちょっとずつ受 信)される!
  7. 7. nginx-gridfsオワタ \(^o^)/
  8. 8. 対応策● gridfs やめて別の DFS へ → 調査中● 別の gridfs のWeb配信作る
  9. 9. 高速・スケーラブルWeb技術なら Perl!● 非同期PSGI – → Twiggy● 非同期MongoDBドライバ – → MongoDB::Async● あとはつなげるだけ!● 出来た!
  10. 10. 非同期じゃない!● ブロックするのでTwiggyが動かない! – MongoDB::Asyncモジュールざっと読んだけど、 非同期になっているように見えない● Starmanにしてとりあえず動かす – とりあえずでかいファイルの配信は出来るように なった● ストリーミングの問題は未解決
  11. 11. イマドキの非同期・高速・スケーラ ブルWeb技術なら☆Node.js● 部品は揃ってるので書いた● 動くけどちょっと怪しい – CPU負荷高い、メモリ使いすぎ – 全速力で送ろうとして、でもIOが詰まってるのでメモリに未 送信バッファが溜まってる● クライアントの受信の様子を見ながら自分で流量を調整 する必要がある – nginx : proxy_buffering off;● 対応した
  12. 12. スループットの性能比較● ファイルサイズ – 200KByte(GridFSの1chunk以内) – 200MByte 中くらい – 1GByte でかい● 条件 – 自分自身へのab – 性能比較は参考程度で
  13. 13. 200KByte● /usr/sbin/ab -c 200 -n 2000 http://~● 結果 – ※rps = request per second – nginx cache: 3444.61 rps (参考値) – nginx gridfs: 1102.52 rps – starman: 404.21 rps – node: 394.56● nginx速い!
  14. 14. 200MByte● /usr/sbin/ab -c 100 -n 100 http://~● 結果 – nginx: x (swap out) – starman: 2.40 rps – node: 1.64 rps● starman, node は余裕● nginxすでに息してない
  15. 15. 1GByte● /usr/sbin/ab -c 20 -n 20 http://~● 結果 – nginx: x (timeout) – starman: 0.28 rps – node: 0.33 rps● nodeは全リクエストが一斉に始まって一斉に終 わる – →ストリーミング可能
  16. 16. 結果概要ファイルサイズ starman node.js nginx-gridfs 同時アクセス
  17. 17. 結論● nginxのモジュールの性能・品質は重要● Cのモジュールに比べて、Perl、Node.jsは悪 くない性能● すべてが非同期なNode.jsは素晴らしい

×