Upload
Download free for 30 days
Login
Submit Search
20141115_node_school_festival_lt
Download as PPTX, PDF
4 likes
1,792 views
zuqqhi 2
LT at Node School Festival(http://nodefest.jp/2014/) with @jimisky
Technology
Related topics:
Node.js Development
Read more
1 of 49
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
More Related Content
PPTX
ネットスーパー
Solur
PDF
Rubyで操るAWS 第67回Ruby関西 勉強会
Takuro Sasaki
PDF
JAWSUG architecture-crowler
Takuro Sasaki
PPTX
ReactでCMSを作ったときにハマったこと
kazuki matsumura
PDF
Innovation eggcloudnative
Takuro Sasaki
PDF
JAWS-UG初心者支部 AWS書籍活用術
Takuro Sasaki
PDF
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Takuro Sasaki
PPTX
はじめよう、firebase
yumi_chappy
ネットスーパー
Solur
Rubyで操るAWS 第67回Ruby関西 勉強会
Takuro Sasaki
JAWSUG architecture-crowler
Takuro Sasaki
ReactでCMSを作ったときにハマったこと
kazuki matsumura
Innovation eggcloudnative
Takuro Sasaki
JAWS-UG初心者支部 AWS書籍活用術
Takuro Sasaki
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Takuro Sasaki
はじめよう、firebase
yumi_chappy
What's hot
(17)
PDF
Rubyで始めるWebスクレイピング
Takuro Sasaki
PPTX
Service worker hackathon -Word Press Plugin
Asuka Kadowaki
PDF
サーバを運用する時代は終わった
Yuki Ishikawa
PDF
React+fluxを導入した話
Yuki Ishikawa
PDF
gulp芸
Yuki Ishikawa
PPTX
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
Bin Matsui
KEY
20121103 #odstudy できる! VBAマクロ
Hiyou Shinnonome
PDF
Rendr入門: サーバサイドで(も)動かす、Backbone.js
Masahiko Tachizono
PDF
モダンJavaScriptフレームワークで技術的負債を作らないために
YukiOniki
PPTX
JPUG の中国支部長変わったってよ #mysqlbeginner
Ikki Takahashi
PPTX
Cache 自由自在
Ryu Shindo
PDF
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
uchimanajet7
PPTX
自作アプリ7月号
Tsuyoshi Kinoshita
PDF
Gunma.web #24 MySQL HA
Yusuke Muraoka
PDF
Building Scalable Application on the Cloud
Keisuke Nishitani
PDF
恋に落ちるRuby
Yuuka Tomomatsu
PDF
Capybaraで雑にWebスクレイピング
Koji Nakamura
Rubyで始めるWebスクレイピング
Takuro Sasaki
Service worker hackathon -Word Press Plugin
Asuka Kadowaki
サーバを運用する時代は終わった
Yuki Ishikawa
React+fluxを導入した話
Yuki Ishikawa
gulp芸
Yuki Ishikawa
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
Bin Matsui
20121103 #odstudy できる! VBAマクロ
Hiyou Shinnonome
Rendr入門: サーバサイドで(も)動かす、Backbone.js
Masahiko Tachizono
モダンJavaScriptフレームワークで技術的負債を作らないために
YukiOniki
JPUG の中国支部長変わったってよ #mysqlbeginner
Ikki Takahashi
Cache 自由自在
Ryu Shindo
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
uchimanajet7
自作アプリ7月号
Tsuyoshi Kinoshita
Gunma.web #24 MySQL HA
Yusuke Muraoka
Building Scalable Application on the Cloud
Keisuke Nishitani
恋に落ちるRuby
Yuuka Tomomatsu
Capybaraで雑にWebスクレイピング
Koji Nakamura
Ad
Similar to 20141115_node_school_festival_lt
(20)
PDF
俺とAngular JS 2
Masayuki KaToH
PDF
20141003 webマーケティングエンジニアリング
Innova Inc.
PDF
PWA for beginner#2
Masanari Hori
PDF
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
PDF
月間 250 億 imps 配信するために fluct が考えていること!
MasamichiIdeue
PDF
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
Y Watanabe
PDF
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
Masayuki Ishikawa
PDF
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
hideyuki ikeda
PDF
アドネットワークのデータ解析チームを支える技術
hagino 3000
PDF
Voicepic@FukuiMASeminar
Manabu Shimobe
PDF
EC-CUBEとAWSの美味しい関係?
義隆 川路
KEY
Webシステムとちょっと便利なツール
Masashi Shinbara
PPTX
Azure API Management 俺的マニュアル
貴志 上坂
PPTX
俺 と ご褒美 Bot
Masayuki KaToH
PDF
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
taiju higashi
PDF
Amazon S3による静的Webサイトホスティング
Yasuhiro Horiuchi
PDF
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
Koichiro Sumi
PDF
ElasticSearch勉強会 第6回
Naoyuki Yamada
PPTX
高速な広告配信サーバの作り方のコツ
Innami Satoshi
PDF
20130306china shinshi area
kobayashi1
俺とAngular JS 2
Masayuki KaToH
20141003 webマーケティングエンジニアリング
Innova Inc.
PWA for beginner#2
Masanari Hori
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
月間 250 億 imps 配信するために fluct が考えていること!
MasamichiIdeue
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
Y Watanabe
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
Masayuki Ishikawa
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
hideyuki ikeda
アドネットワークのデータ解析チームを支える技術
hagino 3000
Voicepic@FukuiMASeminar
Manabu Shimobe
EC-CUBEとAWSの美味しい関係?
義隆 川路
Webシステムとちょっと便利なツール
Masashi Shinbara
Azure API Management 俺的マニュアル
貴志 上坂
俺 と ご褒美 Bot
Masayuki KaToH
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
taiju higashi
Amazon S3による静的Webサイトホスティング
Yasuhiro Horiuchi
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
Koichiro Sumi
ElasticSearch勉強会 第6回
Naoyuki Yamada
高速な広告配信サーバの作り方のコツ
Innami Satoshi
20130306china shinshi area
kobayashi1
Ad
20141115_node_school_festival_lt
1.
ド初心者が 5000QPSの広告配信APIを Node.jsで構築したおはな死
2.
自己紹介 @zuqqhi2 • EC系企業広告エンジニア(3年目) • 好きなこと:観葉植物を愛でる @Jimisky •
EC系企業広告エンジニア(2年目) • 好きなこと:食べること
3.
未だにドが取れたぐらいの初心者です 間違ったことを言ったら、遠慮無くマサカリを! ちなみにLTもド初心者です 注意事項
4.
背景
5.
背景 上司 「この広告の表示、一ヶ月で3倍速くできない?」 「!?」
7.
スピード改善前の広告パーツ 複数のAPIを叩く ↓ データの加工 ↓ Viewの動的生成 ほぼ全てブラウザ側のJavascriptで処理
8.
スピード改善前の広告パーツ • CSS:約4000行 • JavaScript:いっぱい •
リクエスト数:34 / 1 display • データ転送量:1MB / 1 display • MAX5000QPSくらい え、私の広告リッチすぎ・・・?
9.
表示スピード改善計画 1. 直列で呼んでいる複数APIの一本化 2. APIのレスポンスをKVSにキャッシュ 3.
ロジック部分をバックエンド化 4. PaaS化してスケール可能に Browser ← → API API API API Browser ← → API API K V S API API API
10.
表示スピード改善計画 1. 直列で呼んでいる複数APIの一本化 2. APIのレスポンスをKVSにキャッシュ 3.
ロジック部分をバックエンド化 4. PaaS化してスケール可能に Browser ← → API API API API Browser ← → API API K V S API API API ここをNode.jsで!
11.
But… しかし…
12.
当時の私たち Node.js経験 5日 0日
13.
しかも 広告の仕様をほぼ把握していない
14.
さらに [悲報]実質の開発期間は2週間 になりました
15.
本当にいろいろあったものの かろうじて動くレベルになり 初回リリースの日がやってきた! (クライアントのJSをほぼ機械的にコピペ)
16.
結果
17.
結果 • PaaSのインスタンス1台で7QPS
18.
結果 • PaaSのインスタンス1台で7QPS • 絶えず自壊するインスタンス
19.
結果 • PaaSのインスタンス1台で7QPS • 絶えず自壊するインスタンス •
ユーザー間でレスポンスが混線…? (グローバル変数の削除漏れ)
20.
ぎゃああああ ※撮影前日水道が止まり、お風呂に入れていません
21.
これはアカン!と速攻ロールバック バグ潰しとQPS改善の長い戦いが始まった…
22.
バトンタッチ
23.
得られた教訓(一部) 1. child_process.exec以外の方法を使うべし 2. C/C++ベースのライブラリを積極的に使うべし 3.
よく使用するデータはローカルメモリにのせて使うべし 4. チューニングは勘に頼らずダンプを使うべし
24.
1.child_process.exec 広告配信サーバ APIサーバ
25.
1.child_process.exec 広告配信サーバ APIサーバ httpモジュール
26.
1.child_process.exec 広告配信サーバ APIサーバ httpモジュール
27.
1.child_process.exec 広告配信サーバ APIサーバ httpモジュール + proxy
28.
1.child_process.exec 広告配信サーバ APIサーバ httpモジュール + proxy
A
29.
1.child_process.exec 広告配信サーバ APIサーバ child_process.exec(‘curl’)
30.
1.child_process.exec 広告配信サーバ APIサーバ child_process.exec(‘curl’)
31.
1.child_process.exec 広告配信サーバ APIサーバ child_process.exec(‘curl’) 通信方法 1通信あたりの速度(ms) child_process.exec(‘curl’)
50ms httpモジュール 30ms
32.
1.child_process.exec 広告配信サーバ APIサーバ httpモジュール + proxy 教訓1:child_process.exec以外の方法を使うべし
33.
2.ライブラリ • 巨大オブジェクトのclone – node-clone •
巨大XMLの解析 – Jquery • Redisクライアント – node_redis
34.
2.ライブラリ • 巨大オブジェクトのclone – node-clone
10ms – node-v8-clone 1ms • 巨大XMLの解析 – jquery 250ms – node-expat 1ms • Redisクライアント – node_redis 10ms – hiredis-node 7ms
35.
2.ライブラリ • 巨大オブジェクトのclone – node-clone
10ms – node-v8-clone 1ms • 巨大XMLの解析 – jquery 250ms – node-expat 1ms • Redisクライアント – node_redis 10ms – hiredis-node 7ms 教訓2:C/C++ベースのライブラリを積極的に使うべし
36.
3.ローカルオンメモリ 広告配信サーバ Redis Cluster 加工済み 広告情報
37.
3.ローカルオンメモリ 広告配信サーバ Redis Cluster ②加工済み 広告情報 メモリ ①加工済み 広告情報
38.
3.ローカルオンメモリ 広告配信サーバ Redis Cluster ②加工済み 広告情報 メモリ ①加工済み 広告情報 メモリ使用量が一定値を超えたら 利用回数が少ないデータを削除
39.
3.ローカルオンメモリ 広告配信サーバ Redis Cluster ②加工済み 広告情報 メモリ ①加工済み 広告情報 メモリ使用量が一定値を超えたら 利用回数が少ないデータを削除 ストレージ
1通信あたりの速度(ms) Redis 7ms ローカルオンメモリ 1ms
40.
3.ローカルオンメモリ 広告配信サーバ Redis Cluster ②加工済み 広告情報 メモリ ①加工済み 広告情報 メモリ使用量が一定値を超えたら 利用回数が少ないデータを削除 教訓3:よく使用するデータはローカルメモリにのせて使うべし
41.
4.CPU/Heapダンプ • CPUダンプ – nodegrind •
指定した期間内のCPUの状態をダンプする • Chromeの開発者ツールで結果を確認できる • Heapダンプ – heapdump • ダンプ取得関数を実行した時点でのHeap状態をダンプする • Chromeの開発者ツールで結果を確認できる
42.
4.CPU/Heapダンプ • CPUダンプ – nodegrind
43.
4.CPU/Heapダンプ • Heapダンプ – heapdump
44.
4.CPU/Heapダンプ • CPUダンプ – nodegrind •
指定した期間内のCPUの状態をダンプする • Chromeの開発者ツールで結果を確認できる • Heapダンプ – heapdump • ダンプ取得関数を実行した時点でのHeap状態をダンプする • Chromeの開発者ツールで結果を確認できる 教訓4:チューニングは勘に頼らずダンプを使うべし
45.
得られた教訓再掲 1. child_process.exec以外の方法を使うべし 2. C/C++ベースのライブラリを積極的に使うべし 3.
よく使用するデータはローカルメモリにのせて使うべし 4. チューニングは勘に頼らずダンプを使うべし
46.
得られた教訓再掲 1. child_process.exec以外の方法を使うべし 2. C/C++ベースのライブラリを積極的に使うべし 3.
よく使用するデータはローカルメモリにのせて使うべし 4. チューニングは勘に頼らずダンプを使うべし 5.安請け合いしないようにしよう!!
47.
成果 • 1インスタンスごとのQPS – 初期バージョン
7 – 最終バージョン 350 • 広告表示速度 – 約30~60% UP • 広告のクリック率 – 約15% UP
48.
Node.jsいいね! ※撮影前日水道が止まり、お風呂に入れていません
49.
ご静聴ありがとうございました
Editor's Notes
#24:
フォーマット揃える!!!1.フロントからglobal変数
#42:
ソースコード例はzuqqhi2.comで
#46:
フォーマット揃える!!!1.フロントからglobal変数
#47:
フォーマット揃える!!!1.フロントからglobal変数
Download