disassembling the monolith: taming large software projects with node.js
TRANSCRIPT
![Page 1: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/1.jpg)
Disassembling the Monolithtaming large software projects with
@nicholaswyoung Nodevember, 2014 bit.ly/nodevember-2014
![Page 2: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/2.jpg)
Who is this guy?
![Page 3: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/3.jpg)
@nicholaswyoung
radio host designer
photographer ex-software developer
extraordinarily busy person
![Page 5: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/5.jpg)
radio programs
I make compelling, educational
(think of us as a slightly edgier
NPR)
photo credit: derrick clifton / medill photojournalism
![Page 6: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/6.jpg)
machine.fm
![Page 7: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/7.jpg)
DONEI love getting things
![Page 8: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/8.jpg)
uselesstinkering is
unless it teaches us something
![Page 9: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/9.jpg)
writing codemy passion isn’t
(I lost that years ago.)
![Page 10: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/10.jpg)
writing code for the sake of writing code
my passion isn’t
![Page 11: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/11.jpg)
javascriptI promise to show you some clever
before we’re done here
![Page 12: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/12.jpg)
“scalability”
![Page 13: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/13.jpg)
“scalability”“Scalability is the ability of a system, network, or process to handle a growing amount of work in a capable manner or its ability to be enlarged to accommodate that growth.” - Wikipedia
![Page 14: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/14.jpg)
“scalability”
pain
in th
e as
s fa
ctor
time
![Page 15: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/15.jpg)
the year of explosions
![Page 16: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/16.jpg)
![Page 17: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/17.jpg)
![Page 18: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/18.jpg)
![Page 19: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/19.jpg)
Rubya programmer’s best friend
![Page 20: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/20.jpg)
slow runtime poor threading support
concurrent long running tasks
![Page 21: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/21.jpg)
slow runtime poor threading support
concurrent long running tasks
![Page 22: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/22.jpg)
not knockin’ itruby is still awesome, in a lot
of ways
![Page 23: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/23.jpg)
but a lot of it needs to be rethought
![Page 24: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/24.jpg)
file upload
server processing
store processed files in the cloud
![Page 25: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/25.jpg)
file upload
server processing
store processed files in the cloud
everyone does this
your thread is waiting
![Page 26: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/26.jpg)
while everything happens, your user
thinks the app is doing nothing
![Page 27: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/27.jpg)
with several users submitting large file
uploads, our app grinds to a halt
* only on one thread, sure, but that’s still bad.
![Page 28: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/28.jpg)
why?because I built a monolith:
public facing website feed generation
embeddable, sharable player admin dashboard
media analytics
were all a single app
![Page 29: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/29.jpg)
failed deploy = all services
down
![Page 30: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/30.jpg)
![Page 31: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/31.jpg)
this sucks.it doesn’t mean ruby is inherently
awful, but it didn’t work for our app.
![Page 32: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/32.jpg)
![Page 33: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/33.jpg)
“I believe Node is capable of delivering the same, if not better, results than Rails for any Web development task, although it's slightly less mature … and the conventions are less stable.…”
- Sagi Isha, freelance web developer
![Page 34: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/34.jpg)
![Page 35: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/35.jpg)
var express = require('express') , api = express() , web = express() , server = express();
server.use('/', web); server.use('/api', api);
server.listen(8000);
![Page 36: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/36.jpg)
var express = require('express') , api = express() , web = express() , server = express();
server.use('/', web); server.use('/api', api);
server.listen(8000);
![Page 37: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/37.jpg)
![Page 38: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/38.jpg)
![Page 39: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/39.jpg)
encourages you to build small, interconnected applications that each tackle a specific domain.
![Page 40: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/40.jpg)
CMS Feed Generation Embeddable Player Media Analytics
Models Config
Applications Dependencies
![Page 41: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/41.jpg)
javascriptlet’s talk
![Page 42: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/42.jpg)
• express • mongodb • zeromq
common application stack
![Page 43: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/43.jpg)
• distributor • storage • transport
common application stack
![Page 44: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/44.jpg)
DEMO
![Page 45: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/45.jpg)
relentlesslyprototype
![Page 46: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/46.jpg)
breakBEFOREyou build
![Page 47: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/47.jpg)
what do I need?ask
![Page 48: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/48.jpg)
operatecan each function of your app
discreetly?
![Page 49: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/49.jpg)
![Page 50: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/50.jpg)
Q&Aask me anything
![Page 51: Disassembling the Monolith: Taming Large Software Projects with Node.js](https://reader031.vdocuments.us/reader031/viewer/2022030318/58ef1d4a1a28abf2668b469f/html5/thumbnails/51.jpg)
nicholaswyoung.com OriginalMachine.com
Mixdown.co Machine.FM
@nicholaswyoung