反向代理和负载均衡的区别:反向代理是手段,负载均衡是目的。 反向代理可以实现负载均衡,同时负载均衡可以用其他方式来做。一般可以这样认为,如果一台服务器只是作为中介,将请求转发给另一台服务器,可以认为这台服务器是反向代理服务器。如果这台服务器是将请求按照某种规则分发到多台服务器,则认为这台服务器是负载均衡服务器。
1、反向代理
反向代理有点类似于设计模式的外观模式,这个设计模式可以隐藏系统的复杂性,提供统一的接口
类似的,反向代理只需要向客户端提供一个统一的地址。这样设计的好处是:
提高安全性:统一的入口使得后端服务器的IP不会暴露在公网上,客户端只需要于代理服务器打交道。ddos攻击的处理、IP黑名单等交给反向代理负责,反向代理可以从源头限制后端服务器可以接收的连接数量提高扩展性和灵活性:统一的入口使得后端架构对客户端是不可见的,你可以替换服务器来维护集群的健康、根据访问量增删服务器来实现弹性负载均衡。没错,这里的功能与 LB 相辅相成。既然是代理,请求的整个过程对反向代理都是可见的,因此反向代理可以实现:
承担请求的解压缩:类似单一职责原则的设计,解压和压缩都由反向代理来实现。SSL端点:扩展服务器时就不需要搭建 SSL 服务了。请求返回的缓存:对于不需要专用 CDN 的网站,反向代理也实现了请求加速的功能。2、负载均衡
负载均衡器(Load Balance,下文简称 LB)像是一个请求调度中心,主要是为了分发请求,这一角色使得它可以:
避免请求分配到不可用的服务器,比如发送心跳感知服务器在线情况避免服务器过载:例如实现一个简单的请求计数器或者统计请求的响应时间等解决单点问题:实现水平扩展根据请求类型分配指定的服务器:(比如静态文件分配给CDN,读写或者冷热分离等)负载均衡器可以工作于两层, L4 TCP 层或者 L7 应用层。
L4 – 传输控制协议层:
工作于传输控制协议层意味着LB只获取TCP表头的基本信息:来源IP、目的IP等,请求体的内容对LB是透明的,也就是说LB看不到请求的内容,只知道它从何处来要往何处去,带了多重的“行李”。
L4层的LB可以实现简单的轮询、随机、或者基于IP的地址位置请求分发
L7 — 应用层:
工作于应用层,例如最常用的 HTTP 协议层,则可以根据 HTTP 的方法、URL、版本、HTTP 头部信息甚至是根据请求体的内容,请求体都需要过 LB 这个安检机器,LB 知道“行李”装的是什么。
当然,它的行程和重量,LB 也一清二楚(即实际上 LB 同时工作于 L4 和 L7 层)。
工作于 L7 层相比于 L4 层会更损耗性能,但在今天这个性能过剩的时代,这点损耗是可以接受的。
有了这个能力,LB 可以:
根据请求方法,类型分配指定的服务器根据会话信息分配给保存响应会话的服务器,用户就可以不必重新登录充当SSL端点(Termination)LB 背后的服务器就不必每一个都去搭建相同的 SSL 环境了。负载均衡器是为了分配请求,解决单点问题而生的,因此负载均衡器必须是两个或者以上才有意义。而反向代理一个服务器也可以
3、区别
反向代理是手段,负载均衡是目的。 也就是说,反向代理可以实现负载均衡,同时负载均衡可以用其他方式来做。
一般可以这样认为,如果一台服务器只是作为中介,将请求转发给另一台服务器,可以认为这台服务器是反向代理服务器。如果这台服务器是将请求按照某种规则分发到多台服务器,则认为这台服务器是负载均衡服务器。