什么是负载均衡

负载均衡:是在处理高并发、网络压力和进行服务器扩容的重要手段之一。它可以将请求按照一定的规则分配到不同的服务器。

为什么需要负载均衡

在微服务领域,面对一个庞大的微服务集群,如果每次服务的调用都请求到一两台服务器上,在大流量的访问的情况下,这几台服务器一定会不堪重负的。

负载均衡要干什么事

负载均衡现在有两种模式,一种是服务端负载均衡,一种是客户端负载均衡。

服务端负载均衡

在服务集群内设置一个中心化负载均衡器,比如Nginx。发起服务调用的时候,服务请求并不直接发向目标服务器,而是发给这个全局负载均衡七千,在根据配置的负载均衡策略将请求转发到目标服务器。

  • 优点:服务端负载均衡应用范围广,它不依赖于服务发现技术,客户端不需要拉取完整的服务列表;同时,发起服务调用的客户端可不用操心使用什么负载均衡策略。
  • 缺点:
  • 额外的网络开销
  • 复杂度和故障率的提升

客户端负载均衡

Spring Cloud Loadbalancer 采用了客户端负载均衡计数,每个发起服务调用的客户端都存有完整的目标服务地址列表,根据配置的负载均衡策略,由客户端自己决定向哪台服务器发起调用。

  • 优点
  • 网络开销小,不需要额外的网络开销
  • 配置灵活,不同的客户端可以采用不同的负载均衡策略
  • 缺点:
    需要满足一个前置条件,发起服务调用的客户端需要获取所有目标服务的地址,这样它才能使用负载均衡规则选取要调用的服务。也就是说,客户端负载均衡技术往往需要依赖服务发现技术来获取服务列表。

负载均衡策略

Ribbon的负载均衡策略

  • RandomRule-随机
  • RoundRobinRule-轮询
  • RetryRule-按照轮询策略,如果失败则在指定时间内会进行重试
  • WeightedResponseTimeRule-根据服务器的响应时间计算权重,响应时间越快则权重越高
  • BestAvailableRule-选择并发量最小的服务节点
  • AvailablilityFilteringRule-随机挑选一个节点,并对节点进行检查,第一是否可用,第二连接数是否超过阈值。
  • ZoneAvoidanceRule-默认规则,符合判断server所在区域的性能和server的可用性选择服务器

LoadBalancer的负载均衡策略

  • RandomLoadBalance-随机
  • RoundRobinLoadBalance-轮询(默认)