代理和负载均衡概述
带着问题阅读
1、什么是代理,代理有什么好处
2、正向代理和负向代理有什么区别
3、反向代理和负载均衡有什么关系
4、四层负载均衡和七层有什么区别
代理
代理,通俗来说好比是中介的角色,比如在生活中我们处理法律问题、房产交易都会请专业人士代为处理。从网络角度讲,就是为事务参与双方提供连接通道的第三方网络服务器。
在网络场景中,根据被代理的角色和作用划分,代理可分为正向代理和反向代理。
正向代理
正向代理是指对客户端提供的代理服务,在客户端无法直接访问服务端的情况下,通过配置代理服务器的方式访问服务端。
在整个过程中,客户端请求首先发送到代理服务器,代理服务器再将请求发送到服务端后将结果返回给客户端。从服务端角度来看,认为代理服务器才客户端,因此正向代理即代理客户端与服务端进行交互。比如生活中我们通过代购去购买海外商品,代购就是我们的正向代理。
正向代理通常有以下应用场景:
- 提供网络通道:解决客户端由于防火墙或网络限制无法访问服务端的问题,如访问google等国外网站。
- 隐藏客户端身份:服务端只感知代理服务器,无法获取真实客户端,如黑客控制肉鸡。
反向代理
反向代理是指对服务端提供的代理服务,通常出于安全考虑,真正的服务端只有内网网络,无法直接提供对外服务,为此需要设置反向代理服务器,由代理服务器接收外网请求,然后再转发到内部服务器。从客户端角度看,代理服务器是提供服务的服务端,因此反向代理即代理服务端与客户端交互。比如租房遇到的二房东,我们签合同也是与二房东签订,但实际提供住房的是房主。
反向代理通常有以下应用:
- 提供对外服务:代理服务器暴露公网地址,接收请求并转发到内网服务器。
- 负载均衡:根据预设策略将请求分发到多台服务器。
- 提供安全保障:作为服务端防火墙,避免服务端遭受网络攻击。
- 提高访问速度:基于网络位置设置就近代理服务器,提高资源获取速度,如CDN服务器。
区别
- 正向代理代理客户端,服务端认为请求来自代理服务器;反向代理代理服务端,客户端认为提供服务的是代理服务器。
- 正向代理通常由客户端架设,与客户端同处一个局域网;反向代理由服务端架设,与服务端同处一个局域网。
- 正向代理通常解决访问限制的问题,反向代理通常解决对外服务和负载均衡的问题。
负载均衡
负载均衡介绍
负载均衡是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。
负载均衡既有基于软件的实现方案,也有基于硬件的实现方案。在软件方案中,又主要有:
-
基于DNS的负载均衡
在DNS服务器中,可以为多个不同的地址配置相同的名字,最终查询这个名字的客户机将在解析这个名字时得到其中一个地址,所以这种代理方式是通过DNS服务中的随机名字解析域名和IP来实现负载均衡。
-
反向代理负载均衡
通常的反向代理技术,支持为同一服务配置多个后端服务器地址,以及设定相应的轮询策略。请求到达反向代理服务器后,代理通过既定的轮询策略转发请求到具体服务器,实现负载均衡,如Nginx的七层配置形式。
-
基于NAT的负载均衡
该技术通过一个地址转换网关将每个客户端连接转换为不同的内部服务器地址,因此客户端就各自与自己转换得到的地址上的服务器进行通信,从而达到负载均衡的目的,如LVS和Nginx的四层配置形式。
网络模型和负载均衡
参照OSI标准网络模型定义,负载均衡有二、三、四、七层四种负载均衡方式,对应到TCP网络模型中,即数据链路层负载均衡、网络层负载均衡、传输层负载均衡及应用层负载均衡,实际应用中通常采用四层负载均衡和七层负载均衡。
-
四层负载均衡(IP+端口)
四层负载均衡是IP+端口的实现,以TCP协议为例,四层负载只需解析TCP报文头部,按照负载均衡算法选择相应服务后端,将报文目的地址和端口修改为真实后端服务器地址和端口,并转发请求到对应后端服务器。因此在四层负载情况下,负载均衡起到类似路由转发的效果,TCP连接的建立是客户端和服务端直接建立的。
四层负载常用软件有:
- LVS(常用,稳定性最好)
- Nginx(需要额外编译stream模块)
- HaProxy
-
七层负载均衡(应用层协议如HTTP)
七层负载也称为内容交换,通常与具体应用层协议关联,根据客户端发送请求内容选择服务端进行负载转发,如Nginx基于请求URL配置转发。七层负载情况下,负载均衡与反向代理类似,客户端和服务端分别与负载均衡器建立连接,因此效率要低于四层负载。
七层负载常用软件有:
- HaProxy
- Nginx
- Apache(较少使用)
负载均衡和反向代理
负载均衡与反向代理是两个概念,由于其网络架构形式类似(都用于接入服务端),带来一定程度的混淆。
负载均衡的核心目标在于如何将请求均衡的分发到多个服务端;反向代理的核心目标在于隐藏服务端内部地址并为服务端提供外部访问方式。出于高可靠机制的考虑,反向代理通常也会为同一服务注册多个后端地址,因此如Nginx同时提供了反向代理和负载均衡的能力,这也是造成概念混淆的原因。
通常来讲经过反向代理,真实服务端对客户端不可见,代理即客户端认为的服务端。相较负载均衡,七层负载的请求转发与反向代理机制类似,而四层负载的NAT形式,是将报文目的地址修改为真实服务后端地址,与反向代理有根本区别。