Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
zuqqhi 2
PPTX, PDF
1,811 views
20141115_node_school_festival_lt
LT at Node School Festival(http://nodefest.jp/2014/) with @jimisky
Technology
◦
Related topics:
Node.js Development
•
Read more
4
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 49
2
/ 49
3
/ 49
4
/ 49
5
/ 49
6
/ 49
7
/ 49
8
/ 49
9
/ 49
10
/ 49
11
/ 49
12
/ 49
13
/ 49
14
/ 49
15
/ 49
16
/ 49
17
/ 49
18
/ 49
19
/ 49
20
/ 49
21
/ 49
22
/ 49
23
/ 49
24
/ 49
25
/ 49
26
/ 49
27
/ 49
28
/ 49
29
/ 49
30
/ 49
31
/ 49
32
/ 49
33
/ 49
34
/ 49
35
/ 49
36
/ 49
37
/ 49
38
/ 49
39
/ 49
40
/ 49
41
/ 49
42
/ 49
43
/ 49
44
/ 49
45
/ 49
46
/ 49
47
/ 49
48
/ 49
49
/ 49
More Related Content
PPTX
ReactでCMSを作ったときにハマったこと
by
kazuki matsumura
PDF
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
by
Takuro Sasaki
PPTX
はじめよう、firebase
by
yumi_chappy
PDF
JAWSUG architecture-crowler
by
Takuro Sasaki
PPTX
ネットスーパー
by
Solur
PDF
Innovation eggcloudnative
by
Takuro Sasaki
PDF
Rubyで操るAWS 第67回Ruby関西 勉強会
by
Takuro Sasaki
PDF
JAWS-UG初心者支部 AWS書籍活用術
by
Takuro Sasaki
ReactでCMSを作ったときにハマったこと
by
kazuki matsumura
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
by
Takuro Sasaki
はじめよう、firebase
by
yumi_chappy
JAWSUG architecture-crowler
by
Takuro Sasaki
ネットスーパー
by
Solur
Innovation eggcloudnative
by
Takuro Sasaki
Rubyで操るAWS 第67回Ruby関西 勉強会
by
Takuro Sasaki
JAWS-UG初心者支部 AWS書籍活用術
by
Takuro Sasaki
What's hot
PPTX
Cache 自由自在
by
Ryu Shindo
PDF
Capybaraで雑にWebスクレイピング
by
Koji Nakamura
PDF
Rubyで始めるWebスクレイピング
by
Takuro Sasaki
PDF
Rendr入門: サーバサイドで(も)動かす、Backbone.js
by
Masahiko Tachizono
KEY
20121103 #odstudy できる! VBAマクロ
by
Hiyou Shinnonome
PDF
React+fluxを導入した話
by
Yuki Ishikawa
PPTX
JPUG の中国支部長変わったってよ #mysqlbeginner
by
Ikki Takahashi
PPTX
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
by
Bin Matsui
PDF
Building Scalable Application on the Cloud
by
Keisuke Nishitani
PPTX
自作アプリ7月号
by
Tsuyoshi Kinoshita
PPTX
Service worker hackathon -Word Press Plugin
by
Asuka Kadowaki
PDF
gulp芸
by
Yuki Ishikawa
PDF
モダンJavaScriptフレームワークで技術的負債を作らないために
by
YukiOniki
PDF
Gunma.web #24 MySQL HA
by
Yusuke Muraoka
PDF
サーバを運用する時代は終わった
by
Yuki Ishikawa
PDF
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
by
uchimanajet7
PDF
恋に落ちるRuby
by
Yuuka Tomomatsu
Cache 自由自在
by
Ryu Shindo
Capybaraで雑にWebスクレイピング
by
Koji Nakamura
Rubyで始めるWebスクレイピング
by
Takuro Sasaki
Rendr入門: サーバサイドで(も)動かす、Backbone.js
by
Masahiko Tachizono
20121103 #odstudy できる! VBAマクロ
by
Hiyou Shinnonome
React+fluxを導入した話
by
Yuki Ishikawa
JPUG の中国支部長変わったってよ #mysqlbeginner
by
Ikki Takahashi
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
by
Bin Matsui
Building Scalable Application on the Cloud
by
Keisuke Nishitani
自作アプリ7月号
by
Tsuyoshi Kinoshita
Service worker hackathon -Word Press Plugin
by
Asuka Kadowaki
gulp芸
by
Yuki Ishikawa
モダンJavaScriptフレームワークで技術的負債を作らないために
by
YukiOniki
Gunma.web #24 MySQL HA
by
Yusuke Muraoka
サーバを運用する時代は終わった
by
Yuki Ishikawa
入社したてエンジニアがサーバーワークスで働いてみて感じた3つのこと
by
uchimanajet7
恋に落ちるRuby
by
Yuuka Tomomatsu
Recently uploaded
PDF
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
PDF
20260119_VIoTLT_vol22_kitazaki_v1___.pdf
by
Ayachika Kitazaki
PDF
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S...
by
akipii ogaoga
PDF
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf
by
akipii ogaoga
PDF
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
PDF
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
PDF
FY2025 IT Strategist Afternoon I Question-1 Balanced Scorecard
by
akipii ogaoga
PDF
アジャイル導入が止まる3つの壁 ─ 文化・他部門・組織プロセスをどう乗り越えるか
by
Graat(グラーツ)
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
20260119_VIoTLT_vol22_kitazaki_v1___.pdf
by
Ayachika Kitazaki
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S...
by
akipii ogaoga
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf
by
akipii ogaoga
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
FY2025 IT Strategist Afternoon I Question-1 Balanced Scorecard
by
akipii ogaoga
アジャイル導入が止まる3つの壁 ─ 文化・他部門・組織プロセスをどう乗り越えるか
by
Graat(グラーツ)
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