ニコニコ動画勉強会に行ってきました

ニコニコ動画(γ)‐トップページ

本日ドワンゴさんの会議室にてこっそり開催されたニコニコ動画勉強会に参加してきました。
日本の動画コメントサービス「ニコニコ動画」の裏側をドワンゴの開発者の方から
直接お話しを聞いて、参加者も一緒に意見交換ができる非常に面白い勉強会でした。
ドワンゴさんとしては会社で行なう技術者向けの勉強会初めての試みということもあり、
まずは開発者の知り合いベースで声をかけあって少人数で開催することにしたそうです。
六本木のクラブの人や、バイナリカンファレンスでご一緒した人とこんなところで
お会いできるとは思っていませんで、さまに想定の範囲外でした。
その甲斐あって密度の濃い話ができたと思います。

以下、自分用のメモを公開できる範囲で書きます。間違っていたらすみません。(ご指摘いただければすぐに訂正します)

■ニコニコ動画の苦労話 (Sさん)

ニコニコ動画の歴史

2006年10月
一人でプロトタイプを開発開始、サーバ/クライアントともに3営業日で完成 (これはすごい)
2006年12月 2007年12月(年間違えてました。アヨハタさんより指摘を受けて訂正)
ニコニコ動画(仮)の試験サービス開始
2007年1月15日
ニコニコ動画(β)として正式アナウンス
2007年1月31日
はやくも月間1億PVを突破
2007年2月7日
投稿コメント数1000万件突破
2007年2月20日
ニコニコ動画へのDDoS攻撃が断続的に行われる
2007年2月23日
YouTubeからアクセス遮断
2007年2月24日
ニコニコ動画(β)サービス終了、新サービスへの移行準備を告知
2007年3月
ニコニコ動画(γ)サービス再開、自前動画投稿サイトSMILEVIDEOも開始
2007年4月
登録ユーザー限定のクローズドサービスながらも順調にアクセスを伸ばす
開発者
最初はKさん一人だったが現在は開発者7人(うち2ちゃんねるでの人材募集2人

→YouTubeからのアクセス遮断の危機を乗り越えながらも急激に成長してきたニコニコ動画の裏側に迫る…

ニコニコ動画のサーバ構成

Webサーバ
LAMP構成 ( Linux 2.6 / Apache 2 / MySQL 5 / PHP5 )
メッセージサーバ
C++で独自に実装 (以前ネトゲ用に作ったサーバを改造)
ハードウェア
hp DL360 × 十数台 ~ (負荷にあわせて増強)

負荷分散

現在のトラフィック約430Mbps
Webサーバ:50Mbps×7台、メッセージサーバ:15Mbps×6台
Webサーバの Apache は prefork
プロセス数は2000に設定、メモリは4GBに増設
MPMがworkerじゃないのはPHP5がスレッドセーフじゃないので
PHPキャッシュはAPCを使って高速化
昔はeAcceleratorを使ってたけど、optimizerのバグで一部のPEARモジュール(pear/Services_YouTube)が誤動作したためAPC(Alternative PHP Cache)に乗り換えた
データキャッシュ(動画リストなど)
pear/Cache_Lite → memcached に変更、3分おきにバッチで更新
Apacheのアクセスログ6GB/日を突破
awstats(限界) → Google Analytics(いまここ) → Urchin (検討中)
メッセージサーバの負荷分散
DB参照/更新クエリを最大9秒バッファリング
MySQLクラスタ構成
マスター1台、スレーブ6台
未来検索ブラジルの Senna 使ってるよ
MySQL の FULLTEXT INDEX をハンドリング
複数テーブルにまたがるJOINは避ける
非正規化ロジックで対応
更新の多いテーブルは基本的にInnoDBを
ログ系や更新頻度の少ないテーブルはMyISAMに
コメントはCSVデータで保存
1000行以上のCSVデータはインデックス化

■ニコニコ動画の仕組み (開発者Kさん)

開発ポリシー

会長からの指令
「プロトタイプ開発の締め切りは設けない」「ありえない早さで開発して欲しいから」
このサービスは絶対ウケル
「スケーラビリティを考慮せよ」「HTTPしか通らないユーザでも楽しめるようにせよ」

ニコニコ動画の構成要素

  1. Flash Player (XMLSocketで通信)
  2. メッセージサーバを自作 (C++)
  3. Webアプリケーションサーバ (PHP)
  4. 動画サーバ (ニコニコ動画の外)

データ設計

video (DB)
動画情報
thread (DB)
動画ごとに複数待たせられるように
コメント (CSV)
ファイルの追記で

メッセージングサーバの通信方式

  1. XMLSocket
  2. HTTP
    • a. 双方向 chunked content-transfer-encoding
    • b. 下りのみ chunked
    • c. polling

a.b.のchunkedのサーバ実装を二週間かけてせっかく作ったのに、Flash Player側がclosedを検出しないとコールバックが呼ばれないことに後から気付いて没に…orz

画面レイアウト

XGAを想定
512 x 384 で収まるように設計
とにかくコメントが気軽に投稿できること
最初の段階ではコメントの量を増やすことが重要
コメントの細密充填 (特許出願中)
コメントの量が増えたときマーキー/上下固定・弾幕など(意外と細かい)

その他

Excelの定義ファイルから通信部分コードジェネレーションなどなど

(中略)

■結論

バイナリアンここでも発見。ニコニコ動画開発者のKさんはネ申。

感想

勉強会の後の懇親会では、SWFの逆コンパイラの話が普通にでてきて、ActionScriptのバイトコードの最適化の話ができたのが嬉しかったです。

あと、勉強会プレゼン中に参加者がケータイでリアルタイムにツッコミができるニコニコプレゼンのアイデアは面白かったです。今度どこかのカンファレンスでやってみたいです。

あと、現在開発中のニコニコ動画モバイルの試作版を触らせてもらいましたが、携帯アプリながらもよく作りこまれていました。コメント投稿もすぐ反映されるインターフェースで、これならお金払ってでも使いたい人いるかもしれないと思いました。

ニコニコ動画のアカウントを持っていない私ではありましたが、このような貴重な勉強会に誘っていただき本当にありがとうございました。>関係者の皆様

キーワード

Scraping YouTube AmebaVision フォト蔵 Flash Flex C++ PHP MySQL WebAPI CS UTF-8 UI Wii Rimo 在宅勤務

■参加者リンク集

(随時更新します)

[YAPC] 正規表現にフォーカスしたPerl6入門

YAPC::Asia 2007 Tokyo で発表した資料を公開しました。

Yoshinori Takesako – s/ Perl5 Regular Expression / Perl6 Regex and Rule /mixes;

正規表現にフォーカスしたPerl6入門 - s/ Perl5 Regular Expression / Perl6 Regex and Rule /mixes;

Perlの黒魔術の一つであった正規表現。後付の拡張を繰り返した結果、問題解決の強力な武器に成長した反面、人間にも計算機にも読みにくい諸刃の剣にもなってしまいました。そこで再設計されたのがPerl6!
正規表現の書き方がPerl5からどのように変わるのか、これからPerl6のプログラムを書いてみようという人向けにわかりやすく解説します。


Software Design 2007年2月号の巻末特別企画「先取り Perl6正規表現カタログ ~ Perl5からの変更点を徹底解説!」
の記事がベースになっています。

Perl6ではPerl5からの後方互換性は考慮しなくなったので、プログラムの書き方が変わっています。
したがって、Perl6の文法の他にPerl6での正規表現の書き方の事を知っていないと、
自分でPerl6のコードを書くときや人の書いたPugsのサンプルコードを読むときなどに困ってしまうことになります。
正規表現の部分はPerl6の実装の中で遅れているところではあります。最新のPugsやPerl6-Regexモジュールでまだ動作しない構文も多いですが、過去のしがらみを捨てて一から再設計して、人間にもコンピュータにもやさしい表現を目指しています。

Perlの正規表現が難しい、と言われてきた原因を再考するには、Perl6の言語仕様は非常に示唆的で良い題材だと思います。

Shibuya.esの動画公開

先日開催されたShibuya.js Technical Talk #3 – Shibuya.es録画アーカイブが公開されました。

犬ビームメソッド

犬ビームメソッドが見れるのはShibuya.esだけ!

ちなみに、講演者の承諾がとれている発表枠のみの公開となっております。

Shibuya.es録画アーカイブ

  • amachangさん: JSer のための AS3 ![動画]
  • abuiさん: Cycal – オンラインスプレッドシート[動画]
  • cho34さん: えへへ、うふふ E4X[動画]
  • sendさん: Firebug[動画]
  • omoさん: はじめての ABC[動画]
  • Yu Kobayashiさん: Narcissus – ナルシスト、自分を愛した美少年JavaScript[動画]
  • takesakoさん: SWF Binary Hacks ~evalのいばら道~[動画]
  • kusigahamaさん: fcwrap を使わないありあわせAS開発環境[動画]
  • secondlifeさん: fcwrap を使ったAS3オールドタイプ開発[動画]
  • nazokingさん: WiiでSAGOOL[動画]
  • torusさん: haXeを試してみる[動画]

IIJ/i-revoさん、どうもありがとうございました。

日本“[”の会が発足・活動を開始しました

本日、日本[の会設立準備会 (事務局: 岡山県岡山市、代表: 中地史歩) は、
任意団体日本[の会 (英文名称: Japan [ Association,略称: J[A)
設立し、活動を開始しました。

日本[の会 - Japan [ Association

[は古くからUNIX系OSに存在し,システム起動に欠かすことができないコマンドです。
このようにいわばIT社会を支える根幹のような立場にありながら,多くのユーザにその存在を忘れ去られているのが[の現状です。

zophosさんの紹介で、私も会の設立に関与させていただくことになりました。
しかし、イマドキ[やλだって言ってもモテるわけありません。これからはπの時代です。

今後ともよろしくお願いいたします。

[ for Win32(πは地球を救うバージョン)開発者 TAKESAKO
カテゴリー: neta