Nginx的请求转发是基于HTTP层的,所有流量都要经过Nginx。当后端服务器规模庞大时,Nginx的网络带宽就会成为一个瓶颈。 这时可引入LVS负责第一层负载,通过LVS将请求路由到后端若干台Nginx上,Nginx再转发给内部其中一台应用服务器进行处理,最后Nginx直接将结果转发给用户,无需再经过LVS服务器。 以上过程实际上用到的是LVS/DR(Linux Virtual Server via Direct Routing)技术,它通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。 LVS还提供的另外两种IP负载均衡技术是:VS/NAT(Virtual Server via Network Address Translation)和VS/TUN(Virtual Server via IP Tunneling)。 LVS通过MAC地址改写和网络地址转换等方式来同步转发请求,主要是基于网络层和链路层,因而效率非常高。 引入LVS后,Nginx变成了集群,Keepalived主要用来保证LVS的高可用,建立LVS双机热备。LVS 可以对后端Nginx进行健康检查(不能重新发送请求)。LVS也支持多种负载调度算法,如:RR, WRR, LC, WLC, LBLC, LBLCR, DH, SH。
4. DNS和CDN网络优化
DNS(Domain Name System)中一个域名可对应多个IP,因而可通过DNS轮询来实现负载均衡。同时DNS智能解释可保证返回给用户的IP离用户尽可能的近。 还可以进一步按照业务系统拆分二级域名,对于每一个业务系统建立独立的负载均衡层。 CDN(Content Delivery Network)主要用于缓存图片、多媒体文件等各种静态文件资源。将这些静态资源保存到离用户更近的各个网络节点,可以大大提高用户访问效率和节省服务器外网出口带宽。