什么是负载均衡
负载均衡:是在处理高并发、网络压力和进行服务器扩容的重要手段之一。它可以将请求按照一定的规则分配到不同的服务器。
为什么需要负载均衡
在微服务领域,面对一个庞大的微服务集群,如果每次服务的调用都请求到一两台服务器上,在大流量的访问的情况下,这几台服务器一定会不堪重负的。
负载均衡要干什么事
负载均衡现在有两种模式,一种是服务端负载均衡,一种是客户端负载均衡。
服务端负载均衡
在服务集群内设置一个中心化负载均衡器,比如Nginx。发起服务调用的时候,服务请求并不直接发向目标服务器,而是发给这个全局负载均衡七千,在根据配置的负载均衡策略将请求转发到目标服务器。
- 优点:服务端负载均衡应用范围广,它不依赖于服务发现技术,客户端不需要拉取完整的服务列表;同时,发起服务调用的客户端可不用操心使用什么负载均衡策略。
- 缺点:
- 额外的网络开销
- 复杂度和故障率的提升
客户端负载均衡
Spring Cloud Loadbalancer 采用了客户端负载均衡计数,每个发起服务调用的客户端都存有完整的目标服务地址列表,根据配置的负载均衡策略,由客户端自己决定向哪台服务器发起调用。
- 优点
- 网络开销小,不需要额外的网络开销
- 配置灵活,不同的客户端可以采用不同的负载均衡策略
- 缺点:
需要满足一个前置条件,发起服务调用的客户端需要获取所有目标服务的地址,这样它才能使用负载均衡规则选取要调用的服务。也就是说,客户端负载均衡技术往往需要依赖服务发现技术来获取服务列表。
负载均衡策略
Ribbon的负载均衡策略
- RandomRule-随机
- RoundRobinRule-轮询
- RetryRule-按照轮询策略,如果失败则在指定时间内会进行重试
- WeightedResponseTimeRule-根据服务器的响应时间计算权重,响应时间越快则权重越高
- BestAvailableRule-选择并发量最小的服务节点
- AvailablilityFilteringRule-随机挑选一个节点,并对节点进行检查,第一是否可用,第二连接数是否超过阈值。
- ZoneAvoidanceRule-默认规则,符合判断server所在区域的性能和server的可用性选择服务器
LoadBalancer的负载均衡策略
- RandomLoadBalance-随机
- RoundRobinLoadBalance-轮询(默认)