ngnix + node 的负载均衡

node.js 做服务器?

node.js当仁不让,我有赤兔马(异步),手中方天画戟(事件IO)。

一种too simple ,sometimes naive的感觉油然而生。

久经考验的nginx 前置顶住压力,后面多个node服务器完成业务支撑,这样的做法是放心的,是走正道的。

这里要做一个实验:

1. 一个nginx作为前台的服务器
2. 全部请求,经过负载均衡,尽可能均衡的分步到后面的2台node服务器

准备node

首先启动两台node,分别监听3000,3001端口。为了区分,helloworld会带一个端口返回,通知客户端,以便区别是谁在提供服务。

node.js server

$cat 1.js 
require('http').createServer(function (request, response) {  
  response.end('hello world\n'+process.argv[2]);  
}).listen(process.argv[2]);  
$node 1.js 3000
$node 1.js 3001

验证node 服务器启动

λ curl localhost:3000
hello world
3000
λ curl localhost:3001
hello world
3001

准备nginx 服务器的配置。

要点是通过upstream 指令把两个node服务器打成一个服务器池。然后通过location指令,要求全部根目录请求转发到这个池内。池会对它之内的服务器做负载均衡。

nginx conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
     upstream node_server_pool {
       server localhost:3001 max_fails=1;
       server localhost:3000 max_fails=1;
    }
    server{
      listen       80;
      server_name localhost;
      location /
       {
        proxy_pass http://node_server_pool;
       }
    }
}

模拟客户端访问

我用curl多次访问nginx服务器,可以通过返回的字符串知道服务器。你看,真的可以负载均衡:一会儿helloworld 3000,一会儿helloworld 3001。

λ curl localhost
hello world
3000

λ curl localhost
hello world
3001

λ curl localhost
hello world
3001

λ curl localhost
hello world
3000

你看,ngnix是公平的。哪怕就一个客户的多次访问都会换着服务器来。

参考

node.js成也异步,败也异步,评node.js的异步特性 | 江淼的Blog - http://www.jiangmiao.org/blog/2491.html

Node.js + Nginx - What now? - Stack Overflow - http://stackoverflow.com/questions/5009324/node-js-nginx-what-now

为高负载网络优化 Nginx 和 Node.js - 技术翻译 - 开源中国社区 - http://www.oschina.net/translate/optimising-nginx-node-js-and-networki...

让node.js充分利用多核服务器的性能,运用nginx做反向代理和负载均衡 - snoopyxdy的日志 - 网易博客 - http://snoopyxdy.blog.163.com/blog/static/60117440201172954648952/


挚爱JavaScript
敢作敢为

敢作敢为

4.6k 声望
541 粉丝
0 条评论
推荐阅读
Spring Boot 构建一个RESTful Web服务
本指南将指导您使用Spring创建 "Hello, World "RESTful Web服务的过程。您将构建的内容你将建立一个服务,它将接受HTTP GET请求,地址是 {代码...} 它将响应一个JSON表示的问候语,如下面的列表所示。 {代码...} ...

Reco2阅读 1.5k

从零搭建 Node.js 企业级 Web 服务器(十五):总结与展望
总结截止到本章 “从零搭建 Node.js 企业级 Web 服务器” 主题共计 16 章内容就更新完毕了,回顾第零章曾写道:搭建一个 Node.js 企业级 Web 服务器并非难事,只是必须做好几个关键事项这几件必须做好的关键事项就...

乌柏木60阅读 6k评论 16

从零搭建 Node.js 企业级 Web 服务器(一):接口与分层
分层规范从本章起,正式进入企业级 Web 服务器核心内容。通常,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,如下图:从上至下,抽象层次逐渐加深。从下至上,业务细节逐渐清晰。视图...

乌柏木39阅读 7.1k评论 6

从零搭建 Node.js 企业级 Web 服务器(二):校验
校验就是对输入条件的约束,避免无效的输入引起异常。Web 系统的用户输入主要为编辑与提交各类表单,一方面校验要做在编辑表单字段与提交的时候,另一方面接收表单的接口也要做足校验行为,通过前后端共同控制输...

乌柏木32阅读 6.1k评论 9

从零搭建 Node.js 企业级 Web 服务器(五):数据库访问
回顾 从零搭建 Node.js 企业级 Web 服务器(一):接口与分层,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,控制层与服务层实现了业务处理过程,模型层定义了业务实体并以 对象-关系...

乌柏木32阅读 4.5k评论 9

从零搭建 Node.js 企业级 Web 服务器(十三):断点调试与性能分析
Node.js 官方提供了断点调试机制,出于安全性考虑默认为关闭状态,可以通过 node 参数 --inspect 或 --inspect-brk 开启,配合 IDE 能够非常方便地调试代码,本章就上一章已完成的项目 licg9999/nodejs-server-ex...

乌柏木29阅读 3.8k评论 9

从零搭建 Node.js 企业级 Web 服务器(八):网络安全
计算机网络依据 TCP/IP 协议栈分为了物理层、网络层、传输层、应用层,通常基础设施供应商会解决好前三层的网络安全问题,需要开发者自行解决应用层的网络安全问题,本章将着重表述应用层常见的网络安全问题及处...

乌柏木31阅读 5.7k评论 1

敢作敢为

4.6k 声望
541 粉丝
宣传栏