负载均衡 = 挑选目标 + 转发请求
数据链路层负载均衡
-
客户端向负载均衡器发送请求
-
负载均衡器修改通信报文的目标MAC地址为业务服务器MAC地址,并转发给目标服务器
这里存在问题,尽管MAC地址修改了,但IP地址可能还是错误的。
因此:需要让业务服务器的IP地址和负载均衡器的IP地址保持一致--虚拟IP地址
-
业务服务器直接将响应返回给客户端
优点
-
效率高
网络层负载均衡
IP隧道实现
-
客户端向负载均衡器发送请求
-
负载均衡器创建新的IP报文,并把旧的IP报文(header+payload)一起作为新报文的payload,转发给业务服务器
-
业务服务器先拆包,拿到原始报文
-
业务服务器直接将响应返回给客户端
缺点:
-
要求业务服务器支持IP隧道协议(拆包)
-
必须保证业务服务器和负载均衡器具有相同IP
否则客户端不认识
NAT模式实现
-
客户端向负载均衡器发送请求
-
负载均衡器修改报文的目标IP为业务服务器IP,转发给业务服务器
-
业务服务器将响应返回给负载均衡器
因为业务服务器的IP和负载均衡器不一样
-
负载均衡器修改响应报文源IP,将响应返回给客户端
缺点:
-
速度慢
应用层负载均衡
-
客户端与负载均衡器建立TCP链接
-
客户端向负载均衡器发送请求
-
负载均衡器与业务服务器建立TCP链接
-
负载均衡器向业务服务器转发请求
-
业务服务器向负载均衡器返回响应
-
负载均衡器向客户端返回响应
特点
-
支持丰富的报文处理
鉴权、包过滤、服务降级、复杂路由
-
速度慢
负载均衡算法与实现
-
轮训均衡
每个业务服务器轮流处理请求
-
权重均衡
根据权重保持向各个业务服务器的请求量
-
随机均衡
随机向某个业务服务器发送请求
-
权重随机均衡
增加权重因子对随机的影响
-
一致性哈希均衡
相同特点的请求会转发给相同业务服务器
-
响应速度均衡
向速度最快的业务服务器发送请求
-
最少连接数均衡
向连接数最少的业务服务器发起请求