Vous êtes sur la page 1sur 42

node.

js
production site architecture

About me
Ben Lin
A full time entrepreneur & JavaScript lover Fall in love with node.js on Jun 2011

dreamerslab.com ben@dreamerslab.com twitter.com/dreamerslab github.com/dreamerslab

About me
COKE - Full stack node.js MVC framework Vodka - Functional testing framework Thunder - The lightning fast template engine https://github.com/dreamerslab

Agenda
1. Super brief intro to node.js 2. Run node as a service 3. What if it crashes? 4. Monit VS Forever 5. Nginx or not 6. Scaling node.js 7. Deployment 8. Cloud service 9. Some useful tips 10. Q & A

What is node?

node is an evented, non-blocking I/O server-side Javascript built on chrome V8

What is node?
Ryan Dahl talks about the history of node.js

http://www.youtube.com/watch?v=SAc0vQCC6UQ

What is node?
But why node?

* node is fast * node handles a lot of connection with very little resources * You can develop your whole app with one language * Easy to scale

What is node?

Achieves this by all making network I/O nonblocking and all le I/O asynchronous.

What is node?
I/O latency
L1: 3 cycles L2: 14 cycles RAM: 250 cycles DISK: 41,000,000 cycles NETWORK: 240,000,000 cycles

What is node?

Whats wrong with PHP, Ruby, Python, etc...?

Run node as a service

Run your node app as daemon with upstart

Run node as a service

# Start your app start your_app_name # Stop your app stop your_app_name # Restart your app restart your_app_name

What if it crashes?

Every little shit can fuck up your node app

Monitor your node app


Installation on Ubuntu $ sudo apt-get install monit Edit congs * edit /etc/default/monit and set the "startup" variable to 1 * edit /etc/monit/monitrc and use the example le monitrc Run $ sudo /etc/init.d/monit start $ sudo monit start your_app_name

Monit VS Forever

Monit VS Forever

With `forever` we kind of use an unstable tool to monitor another unstable project?!

Nginx or not?

* Nginx runs faster with serving static les * Use it as a reverse proxy to load balance with multiple nodes

Scaling node.js

Scaling node.js
Start small with built-in static server, node.js app & database all on the same server.

Scaling node.js
Use nginx as static server for better performance.

Scaling node.js
Use nginx as as proxy server as well to load balance requests. The number of node.js app instance depends on how many CPU cores on the machine.

Scaling node.js
Split static les to different server for easier maintenance.

Scaling node.js
Use aws S3 for easier setup and maintenance.

Scaling node.js
Split database to another server. Make the node.js app server an unit.

Scaling node.js
Add a load balancer, add more app unit as the site scales up.

Scaling node.js
Add replica set if the database hits its limit.

Scaling node.js
Add CDN for static les for cross reign performance.

Scaling node.js
Split app to difference services as it scales up. Previous scaling steps apply to those services too.

Deployment

Deployment
With ssh, git; The server must stop during deployment.

Deployment
With ssh, git; 0 downtime deployment is possible since we have more than 1 instance( repo ).

Deployment
With ssh, git; Split static le makes it easier to deploy with multi instance( repo ) app.

Deployment
Deploying with multi machine its better to use image les on aws ec2.

Cloud service

Cloud service

How about using services like Heroku, Nodejitsu, mongoHQ?

Some useful tips

Some useful tips


Set your max le limit
sudo vi /etc/security/limits.conf # add the following 4 lines root soft nofile 51200 root hard nofile 51200 * soft nofile 51200 * hard nofile 51200 sudo vi /etc/pam.d/common-session # add session required pam_limits.so sudo vi /etc/profile # add ulimit -SHn 51200

Some useful tips


This ensure that your node app never dies but use with care
process.on('uncaughtException', function (e) { console.dir(e); });

THE END
Thanks

QUESTIONS?

HIRING
Web & iOS Dev
Your Github account speak for you, Please mail to job@woomoo.in

Vous aimerez peut-être aussi