服务器负载均衡的几种办法
像www.12306.com.cn这种抢列车票的网址,每秒钟百万级的web端并发访问量,如果不使用N多台服务器做集成横向扩展,不说分分钟,秒秒钟就挂了。但是,单单部署了N多台服务器就完事了么,too yung,too simple,too naive!
下面,我就来介绍一下服务器负载均衡的办法吧,常见的几种:
- DNS负载均衡
- HTTP重定向
- 反向代理负载均衡
- 网络地址转换(NAT)
- 虚拟IP(VIP)负载均衡
我们讨论的负载均衡一般分为两种,一种是基于DNS,另一种基于IP报文。
DNS负载均衡
DNS会将用户请求的域名映射为实际的IP地址,这种映射可以是一对多的( 即配置多个A记录,用来指定域名对应的IP地址),这样DNS服务器便充当负载均衡调度器。
常见的策略是对多个A记录进行RR(轮询)。
(缺点:DNS生效时间略长,扩展性差。)
HTTP重定向
Web服务器可通过http响应头信息中的Location标记来返回一个新的URL,浏览器自动去访问这个新的URL。
实现办法:可以通过Web应用程序代码实现你想到的调度策略,如可根据请求的URL的不同来进行合理的过滤和转移。
(补充,js跨域问题:通过设置w.Header().Set(“Access-Control-Allow-Origin”, “*”) //允许访问所有域)
反向代理负载均衡
反向代理服务器的核心工作是转发HTTP,它工作在HTTP层面,因此,基于反向代理的负载均衡也称为七层负载均衡。
任何对于实际服务器的HTTP请求都必须经过调度器;调度器必须等待实际服务器的HTTP响应,并将它反馈给用户。
实现办法:代理服务器拥有外部IP地址和内部IP地址。
网络地址转换(NAT)
网络地址转换(NAT)负载均衡工作在传输层,对数据包中的IP地址和端口进行修改,从而达到转发的目的,称为四层负载均衡。
NAT服务器(前端服务器)必须充当实际服务器(后端服务器)的网关,否则数据包被转发后将一去不返。
虚拟IP(VIP)负载均衡
这种方式工作在数据链路层,也成为二层负载均衡。它修改数据包的目标MAC地址,并没有修改目标IP(因为这种转发工作在数据链路层,它对上层端口是无能为力的 ),然后发给实际的服务器,实际服务器的响应数据直接发回给用户,而不用经过调度器。但实际服务器必须接入外网,而且不能将调度器作为默认网关,所以要给实际服务器添加和调度器IP地址相同的IP别名。
推荐书目
- 《构建高性能Web站点》(第12章 web负载均衡)
- 《大型网站技术架构:核心原理与案例分析》 (6.2 应用服务器集群的伸缩性设计)
前瞻技术
- Google公司—Maglev
UCloud公司—Vortex
多少人忙得连写博客的时间都没有哟!