最初的理解

(也可以每个nginx都挂在上所有的应用服务器)
nginx大家都在用,估计也很熟悉了,在做负载均衡时很好用,安装简单、配置简单、相关材料也特别多。

lvs是国内的章文嵩博士的大作,比nginx被广泛接受还要早7年,并且已经被红帽作为了系统内置软件,可谓很牛了。lvs相对于nginx来说配置上就要相对复杂一些。

但是,有时候我们会看到大牛们分享的经验里面是lvs+nginx作为负载均衡了,一直想不明白这是个什么道理。

为什么会出现两者被同时使用呢?其实,这要从两者的各自优势来说了。

nginx用来做http的反向代理,能够upsteam实现http请求的多种方式的均衡转发。由于采用的是异步转发可以做到如果一个服务器请求失败,立即切换到其他服务器,直到请求成功或者最后一台服务器失败为止。这可以最大程度的提高系统的请求成功率。

lvs采用的是同步请求转发的策略。这里说一下同步转发和异步转发的区别。同步转发是在lvs服务器接收到请求之后,立即redirect到一个后端服务器,由客户端直接和后端服务器建立连接。异步转发是nginx在保持客户端连接的同时,发起一个相同内容的新请求到后端,等后端返回结果后,由nginx返回给客户端。

进一步来说:当做为负载均衡服务器的nginx和lvs处理相同的请求时,所有的请求和响应流量都会经过nginx;但是使用lvs时,仅请求流量经过lvs的网络,响应流量由后端服务器的网络返回。

也就是,当作为后端的服务器规模庞大时,nginx的网络带宽就成了一个巨大的瓶颈。

但是仅仅使用lvs作为负载均衡的话,一旦后端接受到请求的服务器出了问题,那么这次请求就失败了。但是如果在lvs的后端在添加一层nginx(多个),每个nginx后端再有几台应用服务器,那么结合两者的优势,既能避免单nginx的流量集中瓶颈,又能避免单lvs时一锤子买卖的问题。

参考文章:
章文嵩:LVS项目介绍
moon:强大的nginx反向代理异步传输模式(原理)
yaoweibin:nginx健康检查
追马博客:LVS+keepalived+nginx+tomcat部署实现

补充(20160731 下午2:07):

在后续继续了解这部分内容时,发现了这两个帖子:
1.有了LVS,还要apache,nginx有什么用?
2.从一个开发的角度看负载均衡和LVS—–注意看最后一个lvs集群化的图,nginx和rs是一对一连接的。

从以上文章来看,lvs+nginx组合使用的原因主要是用lvs来做负载均衡(因为工作在4层,效率高),nginx来做静态文件的处理。

这里第二篇文章,和lvs的后续维护者之一的[吴佳明_普空的ppt](http://velocity.oreilly.com.cn/2012/ppts/pukong.pdf
)中比章博士的文章中多出了一种转发模式,也就是full_nat模式,这种模式下,所有的响应也要经过lvs服务器作为出口返回给客户端。

lvs在full_nat的模式下,是否还是同步的模式呢?我猜想应该是的,因为lvs工作在4层,所以可能当前出错的响应要映射到之前的那一次请求(因为没有解析http包),所以也就做不到把错误转发到其他的应用服务器上重新处理。

另外,这个补充是不是就完全的否定了昨天(也就是补充之前的那一大段)的内容呢?我觉得并没有。昨天的理解可能不是正规大型互联网在使用的模式(当然,这里我不能确定,因为我没有大型互联网的经验),但是理论应该是对的。

具体一点,lvs+nginx的组合nginx用来做静态文件的处理的场景下,如果一次请求失败了,那么久不能被重新处理了,当然你的nginx也可以后挂1个以上的应用服务器(这样的话nginx实质上也是起到了lvs均衡补充的效果)。另外就是,nginx不是单单的作为静态文件的处理,而是作为lvs的一个补充,互相弥补均衡上的不足。

那么你可能会说lvs在4层上处理的高效就不复存在了,确实是的,这点要承认,但是,我们提高了系统请求的成功率,两者需要各自去选择和权衡。

另外,需要说的一点是,静态内容其实我们还可以借助cdn去处理,而不是单单的依靠nginx或者apache去处理。

补充(2016年12月17日 上午11:24)

现在到了比较大一些的互联网公司,也看了京东的用法(可以看开涛的nginx+lua系列http://www.iteye.com/blogs/subjects/nginx-lua)。

lvs+nginx的使用中,nginx还可以作为一个中间环节来减小后端tomcat的服务压力,以及做一些业务切换、分流、前置缓存的功能。

来源:http://blog.csdn.net/BuquTianya/article/details/52076153

关于LVS+Nginx为什么会被同时使用的思考的更多相关文章

  1. LVS+Nginx(LVS + Keepalived + Nginx安装及配置)

    (也可以每个nginx都挂在上所有的应用服务器)  nginx大家都在用,估计也很熟悉了,在做负载均衡时很好用,安装简单.配置简单.相关材料也特别多. lvs是国内的章文嵩博士的大作,比nginx被广 ...

  2. Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用

    上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...

  3. Keepalived+LVS+Nginx负载均衡之高可用

    Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...

  4. LVS+nginx负载均衡知识点1

    lvs+nginx负载均衡 1       学习目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. ...

  5. LVS Nginx 负载均衡区别

    lvs nginx haproxy 对比都可以做负载均衡:工作方式和应用场景各有特点: lvs Linux 虚拟 服务: 1.可以应用支持协议: ftp http dns telnet smtp sm ...

  6. haproxy+keepalived(涵盖了lvs,nginx.haproxy比较)

    文章转载自: haproxy+keepalived    https://cloud.tencent.com/developer/article/1026385 网络四层和七层的区别   https: ...

  7. LVS & NGINX

      LVS NGINX

  8. lvs+nginx负载均衡

    1       学习目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. 掌握lvs+nginx负载 ...

  9. lvs之 lvs+nginx+tomcat_1、tomcat_2+redis(lvs dr 模式)

    前提:已经安装好 lvs+nginx+tomcat_1.tomcat_2+redis环境 ,可参考 (略有改动,比如tomcat_1.tomcat_2安装在两台机器上,而不是单机多实例 ,自行稍稍变动 ...

随机推荐

  1. POJ2536 Gopher II(二分图最大匹配)

    Gopher II Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9005   Accepted: 3724 Descrip ...

  2. Hadoop/Spark相关面试问题总结

    面试回来之后把其中比较重要的问题记了下来写了个总结: (答案在后面) 1.简答说一下hadoop的map-reduce编程模型 2.hadoop的TextInputFormat作用是什么,如何自定义实 ...

  3. pm2

    使用PM2将Node.js的集群变得更加容易(http://www.cnblogs.com/jaxu/p/5193643.html) nodejs pm2配置使用教程(http://blog.csdn ...

  4. HDU 1465 2045 已知结果往前推

    1465 不容易系列之一 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %I64d , %I64u Java ...

  5. 在Delphi中处理word文档与数据库的互联

    在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...

  6. 【xcode中添加pch全局引用文件】

    前沿:xcode6中去掉了pch,为了一些琐碎的头文件引用,加快了 编译速度! xcode6之前的版本建项目就自动添加了是这样的: xcode6后的版本要自己手动的添加步骤如下: 1)  2) 3)  ...

  7. [leetcode 14]Longest Common Prfix

    1 题目: Write a function to find the longest common prefix string amongst an array of strings. Hide Ta ...

  8. Canvas教程

    一.Canvas基本用法 canvas对应中文是“画布”,<canvas>是HTML5的新元素,IE9+支持 canvas元素的默认大小是300px * 150px,最简单的代码将生成一个 ...

  9. solr 5.5使用 和pyg里 的4.10.3版 部署到tomcat中不一样(不使用内置jetty)

    http://www.cnblogs.com/zhuxiaojie/p/5764680.html

  10. 【hyperscan】示例解读 pcapscan

    示例位置: <hyperscan source>/examples/pcapscan.cc参考:http://01org.github.io/hyperscan/dev-reference ...