YAPC::Asia Tokyo 2012 スペシャルレポート

YAPC::Asia Tokyo 2012, 1日目レポート[更新終了]

この記事を読むのに必要な時間:およそ 12.5 分

Yasuhiro Onishiさん「Redmine::Chan で IRC からプロジェクト管理」

発表は,はてなの大西康裕(id:onishi)さん。33週間新機能リリース中というはてなブログの開発サイクルを支えるプロジェクト管理スイート「Redmine」をIRC経由で直感的に使用できるフレームワーク「Redmine::Chan」を発表しました。

「管理自体が嫌にならないように」⁠ブラウザを使わず,息をするように案件を登録する」をモットーに開発されたというRedmine::Chan.Any::EventとIRC::Client,WebService::Simpleから構成されたこのフレームワークは,IRCのボットとしてみずからIRCにログインし,自分に向けて話しかけられた内容を判断してRedmineのREST APIを叩く仕組みとなっています。1つのIRCチャンネルにつき1つのプロジェクトが紐付く仕様で,案件の登録からステータスの確認,また特定ユーザへのアサインも通常の会話中で行えるようになっています。

そのほか,案件ごとに特定のgitブランチを関連付けたり,バッファに溜まってるひとつ手前の発言ログをそのまま案件として登録する「SME(それめっちゃええやん)⁠機能など,はてなの実際の業務フローのなかでどのように使用されているかを具体的に説明しながらのトークは多くの人の興味を引いていました。

Redmine::ChanはGitHub上でオープンソースとして公開されています

画像

画像

Tatsuro Hisamoriさん「平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用」

発表はフリークアウトのエンジニア,⁠50ms finder」ことTatsuro Hisamoriさん。広告関連技術のひとつである「DSP:Demand Side Platform」の開発運用を例に,瞬時のレスポンスが求められるサービスにおけるPerlの利用事例を紹介しました。

ネット広告におけるさまざまな形態のうち,共通したユーザー属性を持つ複数のサイトをまとめて束ねて巨大な広告枠として販売する仕組み「アドネットワーク」⁠このアドネットワークに広告を出稿するために導入されている技術がDSPです。広告の表示リクエストが飛ぶ度に複数の広告主によるオークションがリアルタイムに行われ(RTB:Real Time Bidding)⁠もっとも高い単価を提示した広告が表示される仕組みとなっています。入札から判定,表示にいたるまでには100ms程度の時間しか猶予がなく,少しでも入札に遅れてしまうと広告を出稿できないため,この仕組のなかでいかに速いレスポンス(平均50ms台)を返すかが至上命題となっています。

そんなDSPの仕組みなのですが,バックエンドは一般的なLAMP構成で特別なことはなく,実装の工夫でカバーしているとのこと。具体的には「できるだけ通信しない」⁠できるだけI/Oしない」ことに注力しているそうです。例えばサーバ間通信の際に発生するホスト名のルックアップにおいても,サービスに関わる部分はDNSを使わずに/etc/hostsで管理。KVSについても,データファイルを直接サーバに配布することで外部との通信を行わないよう工夫していると言います。

つねに計測も続けることで改善点を探ることも欠かしません。Nginxのログにリクエスト/レスポンスタイムを書き込ませたり,一定数のサンプリング対象にDevel::NYTProfを噛ませてベンチマークを実行。CloudForecastGrowthForecastなどの監視フレームワークも駆使して実行時間の視覚化を行なっているそうです。

「見えるようにしておけば説得力が違う。重要なものをはっきりさせるためにも,ビジネス指標を明確出せるようにすることが大事」とHisamoriさん。DSPの場合を例にすると,障害の深刻度は「配信が停止すること」続いて「入札が停止すること」の順番であるとし,⁠その障害が⁠有害⁠なのか⁠無害⁠なのか,ただちにサービス・売上に影響が出るか否か」をすぐに判断できることが重要と語りました。

今回のセッションの内容も含んだ記事をWEB+DB press vol.70に寄稿しています。興味のある方はチェックしてみてはいかがでしょうか。

画像

画像

tagomorisさん「半リアルタイム・分散ストリーム処理をperlで」

NHNに勤務されているtagomorisさんの「半リアルタイム・分散ストリーム処理をperlで」というセッションです。

まず,⁠ストリーム処理のストリームとは何か」という基本的な解説から始まり,切れ目なく増え続けるデータであるストリーム(Web サーバやアプリケーションのログなど)をEOFに依存せずに抽出や集計などの処理を行う「ストリーム処理」の基本について説明しました。

ストリーム処理をネットワーク越しに実行する事例を挙げ,⁠重い処理を1つのサーバだけで処理をすると,他の処理がブロッキングしてしまう」として,複数のサーバーで重い処理を分業して実行する「分散ストリーム処理」の重要性を訴えました。

分散ストリーム処理が必要とされる理由として,できるだけレイテンシを短く,リアルタイム的に必要なデータを取得・処理する必要性を挙げました。バッチ処理を引き合いに出し,⁠バッチ処理の場合,取得してくるデータ群の中で1つでもヘヴィーなトラフィックが存在すると,そのデータの取得だけでブロックングが起きてしまうので無駄」として,ストリームになっていると重いトラフィックが来ても別のノードに退避させることができ,ブロッキングを回避できるため優位であると述べていました。

またデータのI/Oに関してバッファリングの重要性を挙げ,⁠どの程度の容量,どの程度の時間バッファに貯めるのかを見極めなければならない」と話していました。⁠プロセスが不意にクラッシュした場合には,ロストするデータの量に関しても考慮しておく必要がある」とリスクマネジメントについても言及しました。それに関連して,バッファリング・キューイングの話題やKeep Alive,コネクションプーリングやロードバランシング,ルーティングやハイアベイラビリティといったストリーム処理に必要とされる技術をひと通り解説しました。

「これらのストリーム処理に必要とされる技術を1からすべて実装するのは大変なので,フレームワークやツールを利用するべき」として,"Apache Kafka"や"Twitter Storm","Fluentd"といったフレームワークを紹介し、このトークでは"Fulentd"を中心に解説していました。"Fluentd"はログを集めて集約および保存をMessagePackと呼ばれるハッシュライクなデータ構造で行うTreasureData社製の分散ストリーム処理フレームワークとのことで,タグベースでルーティングが実行でき、強力なバッファリング機構もサポートされていると話していました。また,プラグインによる機能拡張も容易に行えるとのことで,そのプラグインの1つであるexec_filterというSTDINに入力してSTDOUTに結果を流す処理を自動で行なってくれるプラグインを紹介しました。ただ,"Fulentd"の問題点として,バッファリングが一定の容量に達しないとflush しない点や,エンタープライズ向けのためデータの安全性を重視するあまりパフォーマンスが多少犠牲になっている点,またWindows環境で動作しない点を列挙しました。

それらの問題点を解決するために作られた,Perl製の"Fluent::Agent"と"Fluent::AgentLite"を紹介しました。これらは"Fluentd"をバックグランドとしており、シンプルかつ高速でデプロイが簡単で、1インプット、1アウトプットのストリーム処理に特化しており、かつ非同期I/Oを実現したモジュールとのことでした。"Fluentd" のexec_filter 相当の機能も実装されていて、"Fluentd" で挙がっていたバッファリングの問題やメモリ使用量が解決されていると話していました。

最後にまとめとして「バッチで処理をガリガリ書いていくよりもストリーム処理を上手く活用すれば幸せになれる」としてトークを結んでいました。

画像

画像

著者プロフィール

天谷窓大(あまやそうた)

SNS運営会社に勤務の傍ら,フリーのライターとして活動。大好きなラジオの世界をPerlでハックし尽くすのが夢。

twitter:@amayan


川上大喜(かわかみたいき)

北海道函館市出身。高専卒業後,大学に編入。現在,大学院生業務をこなしつつ某企業でパートタイムエンジニアとして活動中。ソフトウェアのテストやCIといった,ソフトウェアの品質担保に関する話題に強い興味を持っている。

Twitter:@moznion
Web:http://moznion.hatenadiary.com/


中村文子(なかむらあやこ)/Ya-ko

大学卒業後大手ISPのコールセンター業務・ネット企業の企画職・広告代理店プロデューサーなどを経て, 現在「cyclo-PR」の屋号でフリーランスのソーシャルメディアプランナーとして活動。Web業界や広告業界の境目をさまよいながらさまざまな企業のマーケティングやPR,執筆活動を行う。

Twitter:http://twitter.com/ya_k0

LinkedIn:http://jp.linkedin.com/in/ayak0


萩原崇之(はぎわらたかゆき)

自宅警備の傍らコードを書く毎日。最近は電子工作にも心が傾いている。夢は誰もが宇宙旅行に行く世界。

twitter:takayuki_h
blog:http://d.hatena.ne.jp/kagigotonet
google+:https://plus.google.com/115287053726902051396/


本間雅洋(ほんままさひろ)

北海道苫小牧市出身のプログラマー。好みの言語はPerlやPython,Haskell,Scala,Objective-Cなど。在学中は数学を専攻しており,今でも余暇を利用して数学を嗜む。現在はFreakOutに在籍し,自社システムの開発に力を入れている。

共訳書に「実用Git」(オライリー・ジャパン),共著書に「FFmpegで作る動画共有サイト」(毎日コミュニケーションズ)がある。

twitter:@hiratara
blog:http://d.hatena.ne.jp/hiratara/


東聡志(あずまさとし)

北海道函館市出身。都内大手IT企業でプログラマーとして勤務。Perl Beginnersという勉強会を主催。

休日には,PerlやForthなどでのコーディング以外にも,板につかないロシア語の学習やバイクでのプチツーリング,バドミントン,Arduinoを使った電子工作等など,だいぶカオスな時間の使い方をしている。

Twitter:@ytnobody
Web:http://ytnobody.net/