负载均衡就是将负载(一般指的是访问请求)分摊到多个服务器上执行。 比如有A/B/C三台服务器搭建了web应用集群,当发送访问请求时,通过负载均衡,可以访问其中一台服务器,进行业务处理。
一,载体维度分类
从支持负载均衡的载体来看,可以将负载均衡分为两类:硬件负载均衡、软件负载均衡
1. 硬件负载均衡
常见的硬件有比较昂贵的F5和Array等商用的负载均衡器,它的优点简单,有专业的人负责;缺点就是 贵 如果你是土豪,可以考虑,但是对于规模较小的网络服务来说暂时还没有需要使用。
2. 软件负载均衡
目前使用最广泛的三种负载均衡软件Nginx/LVS/HAProxy,他们都是开源免费的负载均衡软件,这些都是通过软件级别来实现,所以费用较低。足以见得,搞软件的是多么不值钱!
3. 成熟的架构
负载均衡业界早已有成熟的架构,比较常用的有LVS+Keepalived、Nginx+Keepalived、HAProxy+Keepalived。
二,网络通信分类
软件负载均衡从通信层面来看,又可以分为四层和七层负载均衡。
1)七层负载均衡:就是可以根据访问用户的 HTTP 请求头、URL 信息将请求转发到特定的主机。
DNS 重定向
HTTP 重定向
反向代理
2) 四层负载均衡:基于 IP 地址和端口进行请求的转发。
修改 IP 地址
修改 MAC 地址
三,负载均衡算法
常见的负载均衡算法的特性及原理:轮询、随机、最小活跃数、源地址哈希、一致性哈希
四,Nginx和Ribbon
根据软件负载均衡处理位置的不同,可以分为服务端负载均衡和客户端负载均衡。
服务端负载均衡指的是发送请求后,分配服务器执行请求,一般可以通过nginx实现;
客户端负载均衡指的是发送请求前,先决定哪台服务器执行请求,再发送请求
1)Ribbon 就是一个负载均衡器客户端,由两个作用
-
负载均衡
-
拦截RestTemplate 发起的请求,将请求路径中的服务名跟据负载均衡算法转为对应的 ip 端口
-
常用负载均衡:算法随机,轮询,重试,最低并发,响应时间加权
-
Spring Cloud Alibaba2021版本后,nacos中移除了Ribbon,替代Ribbon的是Spring Cloud自带的LoadBalancer,默认使用的是轮询的方式