资讯专栏INFORMATION COLUMN

ngnix + node 的负载均衡

SmallBoyO / 2121人阅读

摘要:池会对它之内的服务器做负载均衡。你看,真的可以负载均衡一会儿,一会儿。

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
"+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/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39187.html

相关文章

  • SpringBoot+Redis+Nginx实现负载均衡以及Session缓存共享

    摘要:并没有因为不一致而不同使用连接,确实存储了一个,如下工程目录实际操纵过程中遇到一个问题启动工程的时候报错解决方法对于依赖,增加了一个,且版本为。启动,未报错,问题解决。后续有时间再研究。 1.环境信息nginx-1.11.10redis-latest包(redis windows版本)springboot1.5.1.RELEASE 2.新建一个SpringBoot项目,参考如下链接:h...

    xuxueli 评论0 收藏0
  • SpringBoot+Redis+Nginx实现负载均衡以及Session缓存共享

    摘要:并没有因为不一致而不同使用连接,确实存储了一个,如下工程目录实际操纵过程中遇到一个问题启动工程的时候报错解决方法对于依赖,增加了一个,且版本为。启动,未报错,问题解决。后续有时间再研究。 1.环境信息nginx-1.11.10redis-latest包(redis windows版本)springboot1.5.1.RELEASE 2.新建一个SpringBoot项目,参考如下链接:h...

    charles_paul 评论0 收藏0
  • Spring Cloud实战(三)-Spring Cloud Netflix Ribbon

    摘要:概要什么是实战整合实现负载均衡是什么是一个客户端负载均衡的组件什么是负载均衡负载均衡就是分发请求流量到不同的服务器目前的实现有软件和硬件负载均衡分为两种服务器端负载均衡如上图所示服务器端负载均衡是对客户透明的用户请求到服务器真正的服务器是由 概要 什么是Spring Cloud Netflix Ribbon? 实战:整合Ribbon实现负载均衡 Spring Cloud Netfl...

    wangbinke 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<