Enviar pesquisa
Carregar
20141115_node_school_festival_lt
•
4 gostaram
•
1,719 visualizações
zuqqhi 2
Seguir
LT at Node School Festival(http://nodefest.jp/2014/) with @jimisky
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 49
Baixar agora
Baixar para ler offline
Recomendados
ネットスーパー
ネットスーパー
Solur
Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会
Takuro Sasaki
JAWSUG architecture-crowler
JAWSUG architecture-crowler
Takuro Sasaki
ReactでCMSを作ったときにハマったこと
ReactでCMSを作ったときにハマったこと
kazuki matsumura
Innovation eggcloudnative
Innovation eggcloudnative
Takuro Sasaki
JAWS-UG初心者支部 AWS書籍活用術
JAWS-UG初心者支部 AWS書籍活用術
Takuro Sasaki
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Takuro Sasaki
はじめよう、firebase
はじめよう、firebase
yumi_chappy
Recomendados
ネットスーパー
ネットスーパー
Solur
Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会
Takuro Sasaki
JAWSUG architecture-crowler
JAWSUG architecture-crowler
Takuro Sasaki
ReactでCMSを作ったときにハマったこと
ReactでCMSを作ったときにハマったこと
kazuki matsumura
Innovation eggcloudnative
Innovation eggcloudnative
Takuro Sasaki
JAWS-UG初心者支部 AWS書籍活用術
JAWS-UG初心者支部 AWS書籍活用術
Takuro Sasaki
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Takuro Sasaki
はじめよう、firebase
はじめよう、firebase
yumi_chappy
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
Takuro Sasaki
Service worker hackathon -Word Press Plugin
Service worker hackathon -Word Press Plugin
Asuka Kadowaki
サーバを運用する時代は終わった
サーバを運用する時代は終わった
Yuki Ishikawa
React+fluxを導入した話
React+fluxを導入した話
Yuki Ishikawa
gulp芸
gulp芸
Yuki Ishikawa
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
Bin Matsui
20121103 #odstudy できる! VBAマクロ
20121103 #odstudy できる! VBAマクロ
Hiyou Shinnonome
Rendr入門: サーバサイドで(も)動かす、Backbone.js
Rendr入門: サーバサイドで(も)動かす、Backbone.js
Masahiko Tachizono
モダンJavaScriptフレームワークで技術的負債を作らないために
モダンJavaScriptフレームワークで技術的負債を作らないために
YukiOniki
JPUG の中国支部長変わったってよ #mysqlbeginner
JPUG の中国支部長変わったってよ #mysqlbeginner
Ikki Takahashi
Cache 自由自在
Cache 自由自在
Ryu Shindo
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
uchimanajet7
自作アプリ7月号
自作アプリ7月号
Tsuyoshi Kinoshita
Gunma.web #24 MySQL HA
Gunma.web #24 MySQL HA
Yusuke Muraoka
Building Scalable Application on the Cloud
Building Scalable Application on the Cloud
Keisuke Nishitani
恋に落ちるRuby
恋に落ちるRuby
Yuuka Tomomatsu
Capybaraで雑にWebスクレイピング
Capybaraで雑にWebスクレイピング
Koji Nakamura
俺とAngular JS 2
俺とAngular JS 2
Masayuki KaToH
20141003 webマーケティングエンジニアリング
20141003 webマーケティングエンジニアリング
Innova Inc.
PWA for beginner#2
PWA for beginner#2
Masanari Hori
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
月間 250 億 imps 配信するために fluct が考えていること!
月間 250 億 imps 配信するために fluct が考えていること!
MasamichiIdeue
Mais conteúdo relacionado
Mais procurados
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
Takuro Sasaki
Service worker hackathon -Word Press Plugin
Service worker hackathon -Word Press Plugin
Asuka Kadowaki
サーバを運用する時代は終わった
サーバを運用する時代は終わった
Yuki Ishikawa
React+fluxを導入した話
React+fluxを導入した話
Yuki Ishikawa
gulp芸
gulp芸
Yuki Ishikawa
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
Bin Matsui
20121103 #odstudy できる! VBAマクロ
20121103 #odstudy できる! VBAマクロ
Hiyou Shinnonome
Rendr入門: サーバサイドで(も)動かす、Backbone.js
Rendr入門: サーバサイドで(も)動かす、Backbone.js
Masahiko Tachizono
モダンJavaScriptフレームワークで技術的負債を作らないために
モダンJavaScriptフレームワークで技術的負債を作らないために
YukiOniki
JPUG の中国支部長変わったってよ #mysqlbeginner
JPUG の中国支部長変わったってよ #mysqlbeginner
Ikki Takahashi
Cache 自由自在
Cache 自由自在
Ryu Shindo
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
uchimanajet7
自作アプリ7月号
自作アプリ7月号
Tsuyoshi Kinoshita
Gunma.web #24 MySQL HA
Gunma.web #24 MySQL HA
Yusuke Muraoka
Building Scalable Application on the Cloud
Building Scalable Application on the Cloud
Keisuke Nishitani
恋に落ちるRuby
恋に落ちるRuby
Yuuka Tomomatsu
Capybaraで雑にWebスクレイピング
Capybaraで雑にWebスクレイピング
Koji Nakamura
Mais procurados
(17)
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
Service worker hackathon -Word Press Plugin
Service worker hackathon -Word Press Plugin
サーバを運用する時代は終わった
サーバを運用する時代は終わった
React+fluxを導入した話
React+fluxを導入した話
gulp芸
gulp芸
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
20121103 #odstudy できる! VBAマクロ
20121103 #odstudy できる! VBAマクロ
Rendr入門: サーバサイドで(も)動かす、Backbone.js
Rendr入門: サーバサイドで(も)動かす、Backbone.js
モダンJavaScriptフレームワークで技術的負債を作らないために
モダンJavaScriptフレームワークで技術的負債を作らないために
JPUG の中国支部長変わったってよ #mysqlbeginner
JPUG の中国支部長変わったってよ #mysqlbeginner
Cache 自由自在
Cache 自由自在
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
自作アプリ7月号
自作アプリ7月号
Gunma.web #24 MySQL HA
Gunma.web #24 MySQL HA
Building Scalable Application on the Cloud
Building Scalable Application on the Cloud
恋に落ちるRuby
恋に落ちるRuby
Capybaraで雑にWebスクレイピング
Capybaraで雑にWebスクレイピング
Semelhante a 20141115_node_school_festival_lt
俺とAngular JS 2
俺とAngular JS 2
Masayuki KaToH
20141003 webマーケティングエンジニアリング
20141003 webマーケティングエンジニアリング
Innova Inc.
PWA for beginner#2
PWA for beginner#2
Masanari Hori
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
月間 250 億 imps 配信するために fluct が考えていること!
月間 250 億 imps 配信するために fluct が考えていること!
MasamichiIdeue
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
Y Watanabe
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
Masayuki Ishikawa
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
hideyuki ikeda
アドネットワークのデータ解析チームを支える技術
アドネットワークのデータ解析チームを支える技術
hagino 3000
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
Manabu Shimobe
EC-CUBEとAWSの美味しい関係?
EC-CUBEとAWSの美味しい関係?
義隆 川路
Webシステムとちょっと便利なツール
Webシステムとちょっと便利なツール
Masashi Shinbara
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
貴志 上坂
俺 と ご褒美 Bot
俺 と ご褒美 Bot
Masayuki KaToH
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
taiju higashi
Amazon S3による静的Webサイトホスティング
Amazon S3による静的Webサイトホスティング
Yasuhiro Horiuchi
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
Koichiro Sumi
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
Naoyuki Yamada
高速な広告配信サーバの作り方のコツ
高速な広告配信サーバの作り方のコツ
Innami Satoshi
20130306china shinshi area
20130306china shinshi area
kobayashi1
Semelhante a 20141115_node_school_festival_lt
(20)
俺とAngular JS 2
俺とAngular JS 2
20141003 webマーケティングエンジニアリング
20141003 webマーケティングエンジニアリング
PWA for beginner#2
PWA for beginner#2
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
月間 250 億 imps 配信するために fluct が考えていること!
月間 250 億 imps 配信するために fluct が考えていること!
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
アドネットワークのデータ解析チームを支える技術
アドネットワークのデータ解析チームを支える技術
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
EC-CUBEとAWSの美味しい関係?
EC-CUBEとAWSの美味しい関係?
Webシステムとちょっと便利なツール
Webシステムとちょっと便利なツール
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
俺 と ご褒美 Bot
俺 と ご褒美 Bot
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
俺のローカル開発環境 - MTDDC Meetup NAGOYA 2014
Amazon S3による静的Webサイトホスティング
Amazon S3による静的Webサイトホスティング
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
高速な広告配信サーバの作り方のコツ
高速な広告配信サーバの作り方のコツ
20130306china shinshi area
20130306china shinshi area
Último
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
sugiuralab
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
sugiuralab
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
Último
(7)
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
20141115_node_school_festival_lt
1.
ド初心者が 5000QPSの広告配信APIを Node.jsで構築したおはな死
2.
自己紹介 @zuqqhi2 • EC系企業広告エンジニア(3年目) • 好きなこと:観葉植物を愛でる @Jimisky •
EC系企業広告エンジニア(2年目) • 好きなこと:食べること
3.
未だにドが取れたぐらいの初心者です 間違ったことを言ったら、遠慮無くマサカリを! ちなみにLTもド初心者です 注意事項
4.
背景
5.
背景 上司 「この広告の表示、一ヶ月で3倍速くできない?」 「!?」
6.
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.
ご静聴ありがとうございました
Notas do Editor
フォーマット揃える!!!1.フロントからglobal変数
ソースコード例はzuqqhi2.comで
フォーマット揃える!!!1.フロントからglobal変数
フォーマット揃える!!!1.フロントからglobal変数
Baixar agora