前言:
前面已经搭建了Eureka服务集群,本文将描述使用Ribbon实现客户端的负载均衡。
一、Ribbon简介
1.1、负载均衡
将用户的请求平摊的分配到多个服务上,从而达到系统的 HA。常见的负载均衡有软件Nginx,LVS,硬件 F5等。
1.2、分类
集中式 LB
即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方
进程内 LB
将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
1.3、简介
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调。
Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具,Ribbon 会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用 Ribbon 实现自定义的负载均衡算法。
二、springCloud集成Ribbon
2.1、创建多个服务端微服务,并注册道eureka集群
可以看到eureka集群下面注册了三个生产者。
2.2、编写消费者并集成ribbon
2.1.1、消费端引入ribbon的依赖
2.2.1、在RestTemplate模板上面增加注解@LoadBalanced
2.3.1、将消费者注册道eureka
启动消费者,实现客户端的负载均衡。
三、补充
Ribbon默认使用轮询的负载机制,即每个服务器轮流访问,Ribbon提供了7种负载均衡算法。
我们可以在配置类中(相当于之前的xml配置文件中)去配置,例如:
ribbon 会优先选择配置的策略,如果没有指定则选择默认算法即轮询。
除此之外,我们也可以自定义负载均衡算法,自定义算法类继承AbstractLoadBalancerRule,再配置到配置类中。
注意:使用自定义算法的时候,要在启动类上加上注解@RibbonClient(name=“服务名称”,configuration=配置类.class),并且配置类不能放在启动类(带有@ComponentScan)同级的包及其子包下。