spring Cloud Ribbon
1.定义:
- Ribbon时Netflix发布的负载均衡器,主要功能是提供客户端的软件负载均衡算法,它有助于控制HTTP和TCP客户端的行为。为Ribbon配置服务提供者地址列表后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。ribbon的客户端组件提供了一系列完整的配置项:连接超时、重试等,简单的说就是在配置文件中列出LoadBalancer(简称LB,负载均衡)后面额所有机器,ribbon会自动基于某种规则/算法去连接这些机器。
-
Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机等。我们也可以自定负载均衡算法。
现有的负载均衡算法主要分为静态和动态两类。
静态负载:均衡算法以固定的概率分配任务,不考虑服务器的状态信息,如轮转算法、加权轮转算法等;
动态负载:均衡算法以服务器的实时负载状态信息来决定任务的分配,如最小连接法、加权最小连接法等。分类 1、轮询法 轮询法,就是将用户的请求轮流分配给服务器,就像是挨个数数,轮流分配。这种算法比较简单,他具有绝对均衡的优点,但是也正是因为绝对均衡它必须付出很大的代价,例如它无法保证分配任务的合理性,无法根据服务器承受能力来分配任务。 2、随机法 随机法,是随机选择一台服务器来分配任务。它保证了请求的分散性达到了均衡的目的。同时它是没有状态的不需要维持上次的选择状态和均衡因子。但是随着任务量的增大,它的效果趋向轮询后也会具有轮询算法的部分缺点。 3、最小连接法 最小连接法,将任务分配给此时具有最小连接数的节点,因此它是动态负载均衡算法。一个节点收到一个任务后连接数就会加1,当节点故障时就将节点权值设置为0,不再给节点分配任务。 最小连接法适用于各个节点处理的性能相似时。任务分发单元会将任务平滑分配给服务器。但当服务器性能差距较大时,就无法达到预期的效果。因为此时连接数并不能准确表明处理能力,连接数小而自身性能很差的服务器可能不及连接数大而自身性能极好的服务器。所以在这个时候就会导致任务无法准确的分配到剩余处理能力强的机器上。
2.作用:
-
负载均衡:就是将用户的请求平摊到多个服务上,从而使系统达到高可用
- 常见负载均衡:Nginx,LVS, Tomcat
3.使用:
-
导入依赖:在消费者pom.xml文件中新增两个依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>1.4.7.RELEASE</version> </dependency>
-
配置文件:同服务提供者一样,同时去连接多个Eureka(通过defaultZone);
-
在驱动类中加注解:@EnableEurekaClient
-
在config文件中的配置类restTemplate上加注解: @LoadBalanced
-
修改controller中的访问地址常量,改为http://服务名称
- 以上直接实现类不需要服务ip,直接通过服务名去访问服务。
@LoadBalanced
对应源码:IRule:里面包含了很多算法,默认轮询(循环访问)
自定义:继承AbstractLoadBalancerRule
在主启动类上加注解:
@RibbonClient(name=“服务提供者名称”,configuration= 自定义的IRule类.class)
自定义的IRule类不能放在主启动类同级目录中
ule类不能放在主启动类同级目录中**
将IRule中的实现类自己进行重写就可以实现属于自己的负载均衡算法