webconf nodejs-production-architecture

Post on 01-Sep-2014

6.480 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

node.jsproduction site architecture

Ben Lin

A full time entrepreneur & JavaScript lover

Fall in love with node.js on Jun 2011

dreamerslab.comben@dreamerslab.com

twitter.com/dreamerslabgithub.com/dreamerslab

About me

About me

COKE - Full stack node.js MVC frameworkVodka - Functional testing frameworkThunder - 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?

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

Ryan Dahl talks about the history of node.js

What is 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

But why node?

What is node?

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

What is node?

L1: 3 cyclesL2: 14 cyclesRAM: 250 cyclesDISK: 41,000,000 cycles NETWORK: 240,000,000 cycles

I/O latency

What is node?

What’s 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 appstart your_app_name

# Stop your appstop your_app_name

# Restart your apprestart 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 configs * edit /etc/default/monit and set the "startup" variable to 1 * edit /etc/monit/monitrc and use the example file 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 files* Use it as a reverse proxy to load balance with multiple nodes

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 files 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 files for cross reign performance.

Scaling node.js

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

Scaling node.js

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 file makes it easier to deploy with multi instance( repo ) app.

Deployment

Deploying with multi machine it’s better to use image files on aws ec2.

Deployment

Cloud service

Cloud service

How about using services like Heroku, Nodejitsu, mongoHQ?

Some useful tips

Some useful tips

Set your max file limit

sudo vi /etc/security/limits.conf# add the following 4 linesroot soft nofile 51200root hard nofile 51200* soft nofile 51200* hard nofile 51200

sudo vi /etc/pam.d/common-session# addsession required pam_limits.so

sudo vi /etc/profile# addulimit -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 ENDThanks

QUESTIONS?

HIRING

Web & iOS Dev

Your Github account speak for you,Please mail to job@woomoo.in

top related