反向代理和负载均衡
1.什么是正向代理?
答:正向代理是针对客户端而言的。客户端想访问一个网站,但上不了网,可是客户端却能访问一个叫做代理服务器的东西,代理服务器可以帮助客户端上网。客户端先将请求发给代理服务器,代理服务器再将请求转发给网站,网站的响应结果先发给代理服务器,然后再由代理服务器转发给客户端。
简单来说,正向代理就是指代理服务器帮助客户端上网。
随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大。有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开。为了提供更好的用户体验,留住用户,网站需要加速网站访问速度。其中一个方法就是加反向代理服务器。
2.什么是反向代理?
答:传统代理服务器位于浏览器一侧,代理浏览器将HTTP请求发送到互联网上,而反向代理服务器位于网站机房一侧,代理网站Web服务器接收HTTP请求。和传统代理服务器可以保护浏览器安全一样,反向代理服务器也具有保护网站安全的作用,来自互联网的访问请求必须经过代理服务器,相当于在Web服务器和可能的网络攻击之间建立了一个屏障。
除了安全功能,代理服务器也可以通过配置缓存功能加速Web请求。当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从反向代理服务器返回,加速Web请求响应速度,减轻Web服务器负载压力。事实上,有些网站会把动态内容也缓存在代理服务器上,比如维基百科及某些博客论坛网站,把热门词条、帖子、博客缓存在代理服务器上加速用户访问速度,当这些动态内容有变化时,通过内部通知机制通知反向代理缓存失效,反向代理会重新加载最新的动态内容再次缓存起来。
此外,反向代理也可以实现负载均衡的功能,而通过负载均衡构建的应用集群可以提高系统总体处理能力,进而改善网站高并发情况下的性能。
什么情况下会使用到反向代理呢?
答:1.保护网站安全。和传统代理服务器可以保护浏览器安全一样,反向代理服务器也具有保护网站安全的作用,来自互联网的访问请求必须经过代理服务器,相当于在Web服务器和可能的网络攻击之间建立了一个屏障。
2.缓存网站的静态资源,提高网站的响应速度。当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从反向代理服务器返回,加速Web请求响应速度,减轻Web服务器负载压力。
问题:有人说反向代理的用处之一为:部署到同一台服务器上的多个工程想共用80端口。这种情况下,可以使用反向代理服务器来统一接收请求,再将不同的请求转发给相应的服务器。
注意:让部署在同一台服务器上的不同工程共用80端口这件事并不是反向代理的功能,而是虚拟主机。反向代理相当于一个中转站,它代理的是不同的服务器(硬件上的,不是Tomcat服务器),而不是代理的同一台服务器上的不同的工程。反向代理最大的作用就是用来缓存网站的静态资源,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。
3.什么是负载均衡?
答:前面我们提到利用反向代理缓存资源,以改善网站性能。实际上,在部署位置上,反向代理服务器处于Web服务器前面(这样才可能缓存Web响应,加速访问),这个位置也正好是负载均衡服务器的位置,所以大多数反向代理服务器同时提供负载均衡的功能,管理一组Web服务器,将请求根据负载均衡算法转发到不同Web服务器上。Web服务器处理完成的响应也需要通过反向代理服务器返回给用户。由于Web服务器不直接对外提供访问,因此Web服务器不需要使用外部IP地址,而反向代理服务器则需要配置双网卡和内部外部两套IP地址。
浏览器访问请求的地址是反向代理服务器的地址114.100.80.10,反向代理服务器收到请求后,根据负载均衡算法计算得到一台真实物理服务器的地址10.0.0.3,并将请求转发给服务器。10.0.0.3处理完请求后将响应返回给反向代理服务器,反向代理服务器再将该响应返回给用户。
由于反向代理服务器转发请求在HTTP协议层面,因此也叫应用层负载均衡。
其优点是和反向代理服务器功能集成在一起,部署简单。
缺点是反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。
总结:负载均衡指的是多个服务器共同完成一件事情,核心是“分摊压力”。Nginx实现负载均衡指的是将请求转发给服务器集群。Nginx默认处理负载均衡的方式是“轮询”,我们可以通过weight来调整权重。