Spring-Cloud 负载均衡 Ribbon

负载均衡

将请求流量分发到不同的服务器就是所谓的负载均衡,目前市面上主要有以F5为代表的硬件负载,和以ngnix、HA Proxy为代表的软件负载。

负载均衡所处位置可以分为

  • 服务端负载,即对客户端而言是完全透明的,客户端并不知道具体的负载策略
  • 客户端负载,即客户端已知可用的服务器列表,根据策略来选择可用的服务端
无论是在客户端还是服务端去做负载均衡,负载均衡都需要通过心跳机制看来知道哪些服务器是可用的,并从这些可用的服务器中,根据均衡策略来选择一台处理客户端的请求。

Spring Cloud Netflix Ribbon

Spring Cloud Netflix Ribbon是Netflix发布的开源项目,在客户端实现负载均衡。以下内容来自Spring Cloud中服务的发现与消费

Ribbon 是一个基于HTTP和TCP的客户端负载均衡器,当我们将Ribbon和Eureka一起使用时,Ribbon会从Eureka注册中心去获取服务端列表,然后进行轮询访问以到达负载均衡的作用,客户端负载均衡中也需要心跳机制去维护服务端清单的有效性,当然这个过程需要配合服务注册中心一起完成。

特点 

  • 和Eureka完美整合
  • 支持多种协议-HTTP,TCP,UDP
  • caching/batching
  • built in failure resiliency

主要组件

  • ServerList负载均衡使用的服务器列表。这个列表会缓存在负载均衡器中,并定期更新。当Ribbon与Eureka结合使用时,ServerList的实现类就是DiscoveryEnabledNIWSServerList,它会保存Eureka Server中注册的服务实例表。
  • ServerListFilter,服务器列表过滤器。这是一个接口,主要用于对Service Consumer获取到的服务器列表进行预过滤,过滤的结果也是ServerList。Ribbon提供了多种过滤器的实现。
  • IPing,探测服务实例是否存活的策略。
  • IRule,负载均衡策略,其实现类表述的策略包括:轮询、随机、根据响应时间加权等。我们也可以自己定义负载均衡策略,比如我们就利用自己实现的策略,实现了服务的版本控制和直连配置。实现好之后,将实现类重新注入到Ribbon中即可。
  • ILoadBalancer,负载均衡器。这也是一个接口,Ribbon为其提供了多个实现,比如ZoneAwareLoadBalancer。而上层代码通过调用其API进行服务调用的负载均衡选择。一般ILoadBalancer的实现类中会引用一个IRule。
  • RestClient,服务调用器。顾名思义,这就是负载均衡后,Ribbon向Service Provider发起REST请求的工具。

负载均衡策略

  • 简单轮询负载均衡(RoundRobin)以轮询的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。
  • 随机负载均衡 (Random),随机选择状态为UP的Server。
  • 加权响应时间负载均衡 (WeightedResponseTime),根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。
  • 区域感知轮询负载均衡(ZoneAvoidanceRule),复合判断server所在区域的性能和server的可用性选择server。

与Eureka合作时的工作流程

  • 优先选择在同一个Zone且负载较少的Eureka Server。
  • 定期从Eureka更新并过滤服务实例列表。
  • 根据用户指定的策略,在从Server取到的服务注册列表中选择一个实例的地址。
  • 通过RestClient进行服务调用。

到此,以上是对Ribbon的简单介绍。

参考文献:

https://segmentfault.com/a/1190000006162832

https://mp.weixin.qq.com/s/GoIZdwt5gJje-ZWMBUoBPw

https://springcloud.cc/spring-cloud-netflix-zhcn.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值