YAPC::Asia 2009 二日目
快晴。
セッション内容
ちょっとメモが適当になってきてる感もありますが、こちらも備忘録的に記します。
DeNA loves Perl?
by tokiharu notoさん。DeNAはperlプログラマが100人程度いる為、社内にちょっとしたperlコミュニティがあるようなものこと。mobamailという携帯向けメール配信デーモンが一番興味が引かれたんで、主にその周りを。
- きっかけ
- もともとqmail, postfix
- 動きがスロー、制御も難しい
- 送信専用(受信なし)のSMTPサーバ開発
- 機構
- 送信時にDBにつっこむ(enqueue)する
- 各携帯キャリア用のworkerがDB上の情報見て送信する
- キャリアごとのパラメータが設定が出来る
- 同時接続数設定
- 接続インターバル
- bang食らったあとのwait秒数
- とかとか...
*携帯以外(PCはdefaultのデーモンが送信する
- パフォーマンス
- docomo, au: 500,000 mail/h
- softbank: 20,000 mail/h
- 現在
- mobamailを2台並列
- そのさきにSIELLA ENGINE
- SIELLA ENGINEやっぱり早い。
- コストかかっても送信増やしたい場合は使ったほうがいい。
前職でSIELLA ENGINEにお世話になったことあります。自分の経験上でもやっぱり携帯メール送信は専用のエンジンに任せた方が効率はいいという感はいなめないですね。それでもmobamailのパフォーマンスは魅力的なので、どこかで使ってみたいです。
perl hacks on vim (by Mr. Lin You-An (c9s))
by c9s。資料分かりやすかったです。
- ちゃんと使いこなさないとスゲー時間の無駄
- %で対応の(、{の終点にいける
- ~/.vim/syntax以下にいろいろつくってSyntax hilight使う
- key binding使う
- :h map.txt
- FOLD使う。
- :h folding
- perltidy :set equalprg=perltidy
- SQL:beautify
- Data::Dumperでリバースエンジニアリングできるかも
- plugin使え
- perlprove.vim
- xml.vim, FuzzyFinder.vim DB::Ext.vim,
- Vimmanaでvim scriptを管理する
- cpan Vimana (by c9s)
自分全然vim使えてないなーと思いました。要修行。
mixi画像配信
by kazeburoさん。WEB+DB PRESS vol.50にも詳しい説明あるらしい。
- コンテンツ系(広告系の画像)
- 1000枚くらいなんで、各台にrsyncで同期
- ユーザコンテンツ画像がめっちゃ多い。
- ImageCluster
- 自作の画像クラスタ
- 画像受付、コンテンツと画像のマッピングをDBに格納、裏のApacheサーバに送って格納(2台1組)
- Squidの多重キャッシュとマッピングを参照するアプリサーバ
- MogileFSと比較して
- Pros
- 実装の理解
- ストレージ障害時の復旧が明確
- Cons
- JPEG only
- 手作業がおおい(サーバ追加、復旧)
- 2台以上の冗長性
- Pros
- ImageCluster
- モバイル画像
- モバイルのアクセス73%(150億PV)
- 画像は動的生成
- Apacheのリバースプロキシ間でコンバータを挟んでいる
- perlで画像操作
- 速度比較 -> Image::Imlib2が最速
- Epegはサムネイル用なので、画像荒い。
- まとめ
- Speed: Epeg > Imlib2 > Imager >>> Image::Magick
- Quality: Image::Magick > Imlib2 >>> Epeg
- 最終的にImlib2でFix
- Image::JpegCheck, Image::Size
- mobileのconverterと裏のApacheの高速化
- WWW::Curl >>> LWP
- 質問
- 画像認証は、URLをハッシュとタイムスタンプから自動生成で短期間限定(画像にリクエストあるたび)
- URLを他に渡しても見れない
モバイル画像が動的配信というのはビックリでしたがパフォーマンス出てるとのこと。リサイズ・サムネイルした画像をストアしなくて済むのは容量削減にもなるので、参考になりそうです。階層型のSquidとかいいよなー。てかまずは一階層導入から。
Perlbal Tutorial (by takatsugu Shigeta)
by Takatsugu Shigetaさん。Perlbalチュートリアル。
- singlethreaded event-based
- cacheサーバ(squid)を前に立てて、その後ろにPerlbalおくといい
- roles
- reverse_proxy
- role = reverse_proxy
- ノードのリストを別ファイルに書き出すこともできる
- web_server
- role = web_server
- management
- role = management
- telnetでアクセスすると色々管理できる
- 設定確認、動作確認が出来る
- perlbal再起動要らない -> 設定ファイルには反映されない
- see also document @ six apart
- selecteor
- role = selector
- plugin = vhosts
- upload_tracker
- reverse_proxy
- squid + perlbal同居させてるけど大丈夫
- AnyEvent対応した
confファイルのincludeが出来るようになっていること、managementのroleは今回初めて知りましたー。
Asynchronous Programming for (A)synchronous Communication
by malaさん。非同期処理の重要さなどについて、概念的なところから実際のモジュールまでハイペースのプレゼンでした。
- AnyEvent, coroがいけてる
- poll, epoll(linux), kqueue(bsd)
- 非同期処理:AnyEvent
- 継続(状態の維持):Coro
- session維持とは別
- スレッドの切り替え
- ディスクI/Oの停止と再開
- 他言語でも機構、アプローチがある。
- 非同期処理にはジョブ、キューの機構が相性がいい
- Q4M
- POEよりAnyEventがパフォーマンスよい
- Coro::Mysql!
- Coroモジュール内に色々Utilあり
- お勧めはAnyEvent::HTTP or Coro::LWP
- Guard
- poll, epoll(linux), kqueue(bsd)
- WebHooks
- Multicast Massage Queue
- lighhttpd + FastCGI + AnyEvent + MMQ
非同期処理が負荷対策やチューニングに必要ということと、具体的にperlだとどう実装できるのかというのがざっくり知れました。すごい難しそうだという先入観あったんですが(まあ、実際やってみたら難しいんだろうけど)、全く分からないよりイメージが沸いたのが良かったなと思います。
はてなブックマークのシステムについて
by naoyaさん。はてなブックマークについて。
- C++
- perlよりパフォーマンス出したいときにC++で書いた
- perlからXML, JSON等でアクセスする。
- facebooks開発
中で使われているアルゴリズムとその実装について説明がありました。適材適所でC++で書いて、Thriftでperlとやりとりとか初めて知りました。あと関係ないけど、hibomaとnaoyaさん声激似。やっぱり兄弟ってすごいすねー。
そのほか
昼休み中yusukebeさんと話す機会がありました。
- LTのとり2連チャン(当日決定)で疲れてる様子。おつかれさまです。
- 俺も81世代なんで今年の忘年会楽しみにしてます。
感想
- 非同期・並列処理が流行ってる。アプリはもちろん、インフラもノウハウ得て対応しないと。
- 熱いConferenceでした。内容ももちろんなんだけどそれよりなにより
- コミュニティとスピーカーの情熱に触れることが出来て、色々と感化されました。
- Perlって楽しい言語だなー。ホント上から下までって感じ。
スタッフの皆さん、スピーカーの皆さん、お疲れ様でした。ありがとうございました。