Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
The Node.js Scalability Myth
Search
Felix Geisendörfer
May 02, 2012
Technology
1.7k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Node.js Scalability Myth
Presentation given on 26.04.2012 at MixIT conference in Lyon, France.
Felix Geisendörfer
May 02, 2012
More Decks by Felix Geisendörfer
See All by Felix Geisendörfer
tus.io - Resumable File Uploads (Lightning Talk)
felixge
2
870
Programming flying robots with JavaScript
felixge
2
1k
Programming flying robots with JavaScript
felixge
0
670
Programming an AR Drone Firmware with JS (de)
felixge
1
680
Faster than C?
felixge
1
1.3k
Flying robots over a 10.000 mile distance with JavaScript.
felixge
0
570
Faster than C?
felixge
1
720
The power of node.js (with quadcopters)
felixge
0
560
Faster than C?
felixge
0
500
Other Decks in Technology
See All in Technology
E2Eってつらくないですか?E2Eの管理コストを下げる手段とその実践
akaboshinit
6
2.8k
AI駆動開発におけるハーネスエンジニアリングの勘所
tsukuboshi
1
890
SLOを阻む不安
sraku2159
0
160
AI AgentによるEmbedded SREの取り組み
tgidgd
1
270
Flutter Widget Previewerで始めるUIプレビューとVRTの自動化
sakusaku3939
0
180
Content Mapper APIの応用例~CSS Modules、言語ファイル~
uhyo
2
370
正解のない研修に放り出されて / Being thrown into a training program with no right answers
ohnoeight
1
170
AI Search (Foundry IQ) におけるRAGデータの準備と配置
ryomaru0825
1
100
基本から分かる!AWSセキュリティ運用の考え方と任せ方
cmusudakeisuke
1
270
なぜ東京にいる私が、新潟の技術コミュニティを運営するのか by 八雲慎之助
yakumo
0
160
"計画的無茶振り"を通してAIネイティブ世代の新人を育てる
subroh0508
1
130
re:Invent の去年のスケジュールを公開します!
miu_crescent
PRO
0
130
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
560
Skip the Path - Find Your Career Trail
mkilby
1
270
sira's awesome portfolio website redesign presentation
elsirapls
0
480
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
470
The SEO identity crisis: Don't let AI make you average
varn
0
620
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
The Limits of Empathy - UXLibs8
cassininazir
2
740
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
450
Crafting Experiences
bethany
1
400
Paper Plane
katiecoart
PRO
5
54k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.5k
Un-Boring Meetings
codingconduct
0
470
Transcript
The Node.js Scalability Myth Felix Geisendörfer 26.04.2012 at MixIT Conference
(Lyon, France)
(@)felixge(.de)
core contributor
transloadit.com (using node since v0.0.6)
History
Ryan Dahl starts the node project (first commit) Feb 16,
2009
Discovered node.js (v0.0.6) ~June, 2009
None
Core Contributor & Module Author node-mysql node-formidable + 30 other
modules
Isaac Schlueter starts the npm package manager (first commit) Sep
29, 2009
Ryan’s talk at JSConf.EU gets people excited about node Nov
7, 2009
(c) @substack Jan 30, 2012 Ryan appoints Isaac to lead
node.js
Topic of this Talk
I need to build an über-scalable web service. It will
be the next big thing!
Easy! I will use node.js and MongoDB!
Easy! I will use node.js and MongoDB!
Because node.js is “scalable”, right?
None
Audience?
Node.js?
Are you measuring app performance in production?
1000 req / s
100 req / s
10 req / s
10 requests / per second = 864000 requests / day
10 req / s
The End?
I REALLY need to build an über-scalable web service!!11!1
Scalability
(c) @substack
The Node.js Scalability Myth • Threads don’t scale • Event
loops do
The Node.js Scalability Myth • Threads don’t scale • Event
loops do (Probably) not true in 2012 (Very likely) not relevant
More relevant • Understanding your tools • Using the right
tool for the job
Node’s Concurrency Model
Node’s Concurrency Model 1 var http = require('http'); 2 3
http.createServer(function(req, res) { 4 res.end('Hello World'); 5 }).listen(8080); server.js
Node’s Concurrency Model $ node server.js
Node’s Concurrency Model • Node loads server.js from disk ->
v8 compiles & executes • listen() allocates and binds a file descriptor • Event Loops starts running
Node’s Concurrency Model 1 while (true) { 2 int r
= select(nfds, readfds, writefds, errorfds, 0); 3 if (r === 0) { 4 continue; 5 } 6 7 // Figure out which fds had activity, accept() on server fds, read() on // connection fds, write() queued writes 8 } Abstracted by libuv Different on Windows
Node’s Concurrency Model • Cooperative multitasking • Low memory usage
• Fast / efficient • Simple (compared to threads)
Vertical Scalability
Adding more resources to a single node
Vertical Scalability • CPU • GPUs • Memory • Disk
• Network
CPU
CPU (v8) • V8 compiles JS to Assembly • Just-in-time
compilation (JIT) • Does pretty well in those language benchmarks
Computers of the future will have hundreds of cores!
CPU • Node is single threaded (runs on a single
CPU) • No shared memory
But ...
Does your problem require shared memory?
If yes: Don’t use node
And: Good Luck
If no: child_process.fork()
Redis / ZeroMQ are your friends
GPUs
GPUs • No support in node itself • node-cuda addon
by Kashif Rasul
Memory
Memory • No hard memory limit on 64 bit (since
node-0.6 / v8-3.7) • JS is a garbage collected language (avoid huge heaps) • Buffers do not count towards heap
Network
Network • Node’s concurrency model is optimized for networking •
Good at fully saturating available network resources
Disk
Disk • Done in thread pool • Unfortunately along with
DNS at this point • Throughput ok, but not ideal yet • sendfile() not working yet
Does node scale vertically?
Yeah, good enough
Horizontal Scalability
Adding more nodes to a system
Bad News
Node.js has no horizontal scaling features
Even worse
This s#@t is really hard
Problems • De-coupling / encapsulation • CAP Theorem • System
Automation
...
Good Luck
One tip
Monitor & Measure! • Collect: node-measured, statsd, ... • Analyze:
Graphite, Librato Metrics, ... • Debug
So if node doesn’t have magic scaling, what is it
good for?
<Live Coding>
tl;dr • Know your requirements • There are no silver
bullets
Questions? Slides will be available at felixge.de
Thanks
Feedback