読者です 読者をやめる 読者になる 読者になる

以下斜め読んだ内容

pseudo translation of useful posts, book reviews, remarks,etc. twitter: feeddict

Ryan Dahl「スケールするネットワークプログラムをかんたんに書く方法」

斜め読み

nodejsブログの2011.10.4のエントリ

An Easy Way to Build Scalable Network Programs « node blog

  • ryanによるnode啓蒙記事
  • なぜこのタイミングで?
    • 最近話題の「nodeなんて癌だ」(by@dozba)発言へのryanからの真面目な反応の1つ
    • 今回の騒動はフレームの歴史の2011年のエピソードの1つとしてカウントされると思われる
    • Node.js is Cancer
      • 翻訳されてる
      • ebayのエンジニア、milo.comのファウンダーの一人、低レベルにも詳しい、という方なんだけど、乱心すぎてレスも不明瞭でポイントがよくわからん
    • ryanからの真面目じゃない反応もある
  • ryanが@dozbaに燃料を注いで「nodeなんて癌だ」が世に出た側面もある
    • 2011.9.30にgoogle+へ「俺はほぼすべてのソフトウェアが大嫌い」という1文で始まる記事をポストしてる。これもhacker newsやredditでもスレがよく伸びる結果になってる。
    • 翻訳あり
      • Ryanの投稿訳してみる。 | Singen-Zaregoto
        • (補足:訳出されてないレス)不必要に複雑なレイヤーが出来上がってるソフトウェアの世界とryanは言ってるけど、「そしてnodeもそうしたレイヤーの1つ。win対応で作ってるlibuvとか複雑怪奇だし」とコメントへのレスの中で補足してる。
    • nodeハッカーからの反応で面白かったやつ
      • @dozbaがnode/jsけなすために書いたフィボナッチ数計算するコードを添削してるやつ
      • glenjamin/node-fib - GitHub
      • process.nextTick()を使いまくってる(自分でも「酷使してる」と書いてる)
      • 添削された@dozbaはそれをforkしてなんかやろうとしてるが、動きなし
        • teddziuba/node-fib - GitHub
        • フォークしたものの、package.jsonからjsファイルまですべてファイル消して、「ルートから.jsファイル検索して全部削除する」シェルスクリプトがなぜかpushして放置されてる
以下斜め読んだ内容
  • こんな場面
    • アップロードされた動画ファイルをエンコードするサーバーを書いてる
    • ビデオエンコーディングは重い処理。CPUバウンド
  • nodeに貼られるレッテルその1
    • CPUバウンドな処理にはnodeは全然向きません
    • 最近もそんなこと書いてるブログエントリがありましたね
    • nodeを使ってビデオエンコーディングアルゴリズムを書くのは向いてない?
  • 「nodeで書く」 。ここに誤解がある
    • 全部jsで書かないといけない。それは違う
    • 全部メインサーバのイベントループへ放り込む。これも違う
    • そもそもjsは64ビットIntegerすらサポートしてない言語
  • オススメとして言及されるアプローチ
    • IOバウンドな処理とCPUバウンドな処理。この2つを分離
    • ファイルのアップロードやダウンロードとか。このへんはIOバウンド
    • ビデオエンコーディングとか。この辺はCPUバウンド。重い処理。
    • だからビデオエンコーディングだったらFFmpegへ処理を投げたらいい
    • nodeの世界ではサブプロセスを非同期でハンドリングができるようになってる
  • レッテルその2
    • nodeではマルチコア環境からパワー引き出せません
    • これもnodeの世界で随分前からサポートされてる話
    • 複数プロセス間のロードバランシングは数行コード書けばできる
    • nodeで書いたサーバーは使えるコアのパワーを絞りだせる
    • 更にニュース
      • 次のリリースではnodeコマンドに「--balance」オプション追加
      • 複数プロセスを管理できるようになる
  • nodeには明確なゴールがある
    • スケールするネットワークプログラムを簡単に書く方法を提供する
    • ありとあらゆる問題を解決するための道具ではない
    • nodeが向かないもの
    • nodeを使ってみてほしい用途
      • DNSサーバを書くとか
      • DHCPサーバを書くとか
      • ビデオエンコーディングサーバとか
  • 「ありがとうnode」なストーリ
追記2011.10.5