目录
什么是负载均衡
负载均衡分类
服务端负载均衡
服务端负载均衡——软硬件分类
服务端负载均衡——OSI模型分类
客户端负载均衡
负载均衡常见算法
七层负载均衡做法
DNS解析
反向代理
什么是负载均衡
将用户请求分摊(分流) 到不同的服务器上,提高系统整体并发能力及可靠性。
负载均衡分类
客户端/服务端
服务端负载均衡
主要应用在系统外部请求和网关层之间,可以用软件/硬件来实现
Nginx服务端负载均衡示意图:
服务端负载均衡——软硬件分类
- 硬件负载均衡:可以通过专门的硬件设备(F5,A10,Array),贵但性能强
- 软件负载均衡:LVS、Nginx、HAproxy
服务端负载均衡——OSI模型分类
二/三/四/七层负载均衡,最常见的为四层和七层
四层:OSI模型的第四层 传输层,这一层主要协议:TCP/UDP,负载均衡器能在这一层看到数据包里的源端口地址及目的端口地址,基于这些信息通过负载均衡算法,转发到后端真实服务器。LVS(Linux Virtual Server虚拟服务器,Linux内核的4层负载均衡)来做四层负载均衡。
七层:OSI模型的第七层 应用层 这一层主要协议:HTTP 负载均衡器会读取报文数据,然后根据读取的内容(如 URL Cookie)做出负载均衡决策。工作中我们常用Nginx来做7层负载均衡。
四层:性能更强
七层:功能更强
客户端负载均衡
应用于系统内部的不同服务间,可以使用现成的负载均衡组件来实现。
客户端负载均衡器和服务运行在同一个进程或者说同一个java程序中。
Java领域主流的微服务框架Dubbo、SpringCloud等都内置了开箱即用的客户端负载均衡实现。Dubbo默认自带了负载均衡功能;SpringCloud是通过组件形式(如Spring Cloud Load Balancer 、Ribbon)来实现。
基于Spring Cloud Load Balancer实现的示意图
负载均衡常见算法
-
随机法:最简单粗暴,可设置权重
-
轮询法:可设置权重
-
一致性HASH法:相同参数的请求,总是发到同一台服务器处理
-
最小连接法:监控服务器正在处理的请求连接数,遍历服务器节点并选取其中活动连接数最小的一台来响应当前请求
七层负载均衡做法
DNS解析
为同一个主机记录多个IP地址即不同服务器,当用户请求域名时,DNS服务器负责采用轮询算法返回IP地址,这样就实现了轮询版负载均衡。
反向代理
1. 最常用的反向代理服务器:NGINX
2.客户端 将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器。
3.对外暴露的地址是反向代理服务器地址(隐藏了真实的ip地址)。
4.反向代理“代理”的是目标服务器
收队!