Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Node.js Scalability Myth
Search
Felix Geisendörfer
May 02, 2012
Technology
4
1.6k
The Node.js Scalability Myth
Presentation given on 26.04.2012 at MixIT conference in Lyon, France.
Felix Geisendörfer
May 02, 2012
Tweet
Share
More Decks by Felix Geisendörfer
See All by Felix Geisendörfer
tus.io - Resumable File Uploads (Lightning Talk)
felixge
2
750
Programming flying robots with JavaScript
felixge
2
930
Programming flying robots with JavaScript
felixge
0
570
Programming an AR Drone Firmware with JS (de)
felixge
1
590
Faster than C?
felixge
1
1.2k
Flying robots over a 10.000 mile distance with JavaScript.
felixge
0
460
Faster than C?
felixge
1
600
The power of node.js (with quadcopters)
felixge
0
470
Faster than C?
felixge
0
390
Other Decks in Technology
See All in Technology
20250304_赤煉瓦倉庫_DeepSeek_Deep_Dive
hiouchiy
2
140
AWSではじめる Web APIテスト実践ガイド / A practical guide to testing Web APIs on AWS
yokawasa
8
800
20250309 無冠のわたし これからどう先生きのこれる?
akiko_pusu
9
660
クラウド関連のインシデントケースを収集して見えてきたもの
lhazy
9
2k
Cracking the Coding Interview 6th Edition
gdplabs
14
28k
Amazon Athenaから利用時のGlueのIcebergテーブルのメンテナンスについて
nayuts
0
120
[OpsJAWS Meetup33 AIOps] Amazon Bedrockガードレールで守る安全なAI運用
akiratameto
1
140
リクルートのエンジニア組織を下支えする 新卒の育成の仕組み
recruitengineers
PRO
2
190
スクラムというコンフォートゾーンから抜け出そう!プロジェクト全体に目を向けるインセプションデッキ / Inception Deck for seeing the whole project
takaking22
3
200
「頑張る」を「楽しむ」に変換する技術
tomoyakitaura
1
250
EMConf JP 2025 懇親会LT / EMConf JP 2025 social gathering
sugamasao
2
210
x86-64 Assembly Essentials
latte72
4
610
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1.1k
Unsuck your backbone
ammeep
669
57k
Making Projects Easy
brettharned
116
6k
Automating Front-end Workflow
addyosmani
1369
200k
Site-Speed That Sticks
csswizardry
4
420
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
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