ad stirの裏側
DESCRIPTION
ngigroup enigmo合同LTで発表したngigroupで開発したSSP「AdStir」の紹介です。TRANSCRIPT
AdStirの裏側
ngigroup 落合
今日のお題
弊社で開発したスマートフォンSSP Adstir
自己紹介
● @sochiai とか www.sochiai.com● ● 2011/10よりNgigroup所属。AdStir担当技術。 ● perlとかjavascriptとかを書いてます。perl再入門中。● ● その前はミッドタウンのYのつく会社で、自動車とか地図とロコと
かのサービスをphpでがりがり。● ● その前はフラクタリストという携帯サイトメインのベンチャーで、
phpとかrubyとかperlとか。● ● その前は富○通系傘下の開発会社でCとかJavaとかで高速通
信アプリとか、組み込み系をがりがり。
使ってる技術
● perl、catalyst、starman …管理画面等はcatalyst、api系で一部starman
● nginx …高速性が必要とされる配信サーバ
● MySQL …データ管理
● memcached …配信サーバのキャッシュ
● javascript …管理画面だけでなくweb広告の取得・表示に。
● android用SDK● iOS用SDK
ロゴ
トカゲじゃないです。カメレオンです。
「いろいろな広告に変わる」
システム構成
広告系のシステムで大事なこと
信頼性
フルタイムで動作するシステムかつお金に関わることなので。ちょっとやそっとでは落ちない安定性。
冗長性
急な負荷でもすぐに増やせるようなシステム。
そして高速性
なんといっても大事。
高速性の追求
nginx + memcached
言わずと知れた近頃流行のの高速サーバの組み合わせ
● nginx moduleをC言語で自作することで、メモリアクセスだけで広告は威信は動作するシステム。高速。
● HDDのファイルシステムが壊れた状態でも広告配信は行われていた。(配信ログが残らなかったためそれはそれで問題だった…)
キャッシュのフロー
1. バッチで広告情報をrdbからmemcachedにセット2. request時にmemcached(local)になければremoteからセット
(リードスルー)3. 広告情報をレスポンス
nginxのパフォーマンス
● キャッシュレスのリアルタイム処理で1サーバで過去最高300req/secでもload aveは常に0.5以下(他システムの実績では3000req/sec以上もいける)
● Apache消費メモリApache 数十KB~/プロセスリクエストの数だけプロセス発生(preforkの場合)
● nginx数KB~/プロセス1ワーカーあたり複数リクエストを捌ける(一 般的にCPU orCPUコア数=ワーカー数)
nginx module
● 資料が本家にないが、C言語の知識があれば割と簡単に作れる。
nginx-modules-guide
nginx reverce proxy
● nginxのreverce proxy機能。簡単に使える。
● squid<varnish=nginxぐらいの速度らしいが、高負荷時の動作ではnginxの動作が優位らしい。メモリキャッシュ機能もあり、単純なreverce proxyであればなにも考えずにnginxでOKでは。
ソース管理はgit
● 基本的にgit。githubを使っていたがリポジトリが増えてきたので、gitoriousで自社用gitリポジトリを構築。
● gitoriousはわりと構築が面倒(主にrailsアプリ特有の問題で)。
今なら構築の容易さ高機能でgitoliteという選択かも。
大型高機能➡小型高速
● MSと同じ。● 小さいことはいいことです。
まとめ
● パフォーマンス、信頼性の両立。nginx、memcachedという構成がとても大事。C言語は難しいように見えて、技術的にも枯れているので妥当な選択。リソース管理が難しいが、逆にリソースを完全にコントロールできるのでフルタイム動作するシステムではいい方向に働く。
● いつアクセスが爆発するか分からない(いきなり大きなメディア
が入ってくることも!)ので、常にパフォーマンスを気にした設計が要求される。元Cプログラマーとしては血が騒ぐし、webサービスの根幹ともいえる部分。
● nginx押し押しですいません。集計周りとかは全然話せませんで
したね。。。
ご清聴ありがとうございました
p.s. 広告エンジニアやってるけど何か聞きたいことある?