-
nginx 用来做 http 的反向代理,能够 upsteam 实现 http 请求的多种方式的均衡转发。由于采用的是异步转发可以做到如果一个服务器请求失败,立即切换到其他服务器,直到请求成功或者最后一台服务器失败为止。这可以最大程度的提高系统的请求成功率
-
lvs 采用的是同步请求转发的策略。这里说一下同步转发和异步转发的区别。同步转发是在 lvs 服务器接收到请求之后,立即 redirect 到一个后端服务器,由客户端直接和后端服务器建立连接。异步转发是 nginx 在保持客户端连接的同时,发起一个相同内容的新请求到后端,等后端返回结果后,由 nginx 返回给客户端
-
进一步来说:当做为负载均衡服务器的 nginx 和 lvs 处理相同的请求时,所有的请求和响应流量都会经过 nginx;但是使用 lvs 时,仅请求流量经过 lvs 的网络,响应流量由后端服务器的网络返回
-
也就是,当作为后端的服务器规模庞大时,nginx 的网络带宽就成了一个巨大的瓶颈
-
但是仅仅使用 lvs 作为负载均衡的话,一旦后端接受到请求的服务器出了问题,那么这次请求就失败了。但是如果在 lvs 的后端在添加一层 nginx(多个),每个 nginx 后端再有几台应用服务器,那么结合两者的优势,既能避免单 nginx 的流量集中瓶颈,又能避免单 lvs 时一锤子买卖的问题
-
lvs + nginx 的使用中,nginx 还可以作为一个中间环节来减小后端 tomcat 的服务压力,以及做一些业务切换、分流、前置缓存的功能