一、Ribbon中的负载均衡策略

1、Ribbon中支持的负载均衡策略

AvailabilityFilteringRule:过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值) | 使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态

RandomRule:随机选择一个server

BestAvailabl:选择一个最小的并发请求的server,逐个考察Server,如果Server被tripped了,则忽略

RoundRobinRule:roundRobin方式轮询选择, 轮询index,选择index对应位置的server

WeightedResponseTimeRule:根据响应时间分配一个weight(权重),响应时间越长,weight越小,被选中的可能性越低

RetryRule:对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server

ZoneAvoidanceRule:复合判断server所在区域的性能和server的可用性选择server

ResponseTimeWeightedRule:作用同WeightedResponseTimeRule,二者作用是一样的,ResponseTimeWeightedRule后来改名为WeightedResponseTimeRule

二、验证

1、自定义负载均衡策略

  1. # 自定义负载均衡策略
    springboot-h2.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule // 自定义使用随机策略,springboot-h2是服务应用名

2、修改调用代码

package com.chhliu.springboot.restful.controller;  

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate; import com.chhliu.springboot.restful.vo.User; @RestController
public class RestTemplateController {
@Autowired
private RestTemplate restTemplate; @Autowired
private LoadBalancerClient loadBalancerClient; @GetMapping("/template/{id}")
public User findById(@PathVariable Long id) {
ServiceInstance serviceInstance = this.loadBalancerClient.choose("springboot-h2");
System.out.println("===" + ":" + serviceInstance.getServiceId() + ":" + serviceInstance.getHost() + ":"
+ serviceInstance.getPort());// 打印当前调用服务的信息
User u = this.restTemplate.getForObject("http://springboot-h2/user/" + id, User.class);
System.out.println(u);
return u;
}
}

3、测试

服务调用关系如下:

测试结果如下:

  1. ===:springboot-h2:127.0.0.1:7902
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7901
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7902
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7901
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7902
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7902
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7902
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7902
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7902
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7901
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7901
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7902
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7902
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7901
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    ===:springboot-h2:127.0.0.1:7901
    User [id=2, username=user2, name=李四, age=20, balance=100.00]
    发现选择7901端口服务和7902端口服务确实是随机的!

spring cloud中通过配置文件自定义Ribbon负载均衡策略的更多相关文章

  1. Spring Cloud (3)B Ribbon 负载均衡 IRule

    package com.service.config; import com.netflix.loadbalancer.IRule;import com.netflix.loadbalancer.Ra ...

  2. SPring cloud (3)A Ribbon 负载均衡 配置初步

    1.引用pom <dependency> <groupId>org.springframework.cloud</groupId> <artifactId&g ...

  3. Spring Cloud入门教程(二):客户端负载均衡(Ribbon)

    对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如 ...

  4. spring Cloud中,解决Feign/Ribbon整合Hystrix第一次请求失败的问题?

    Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间 ...

  5. 《Spring Cloud》学习(二) 负载均衡!

    第二章 负载均衡 负载均衡是对系统的高可用.网络压力的缓解和处理能力扩容的重要手段之一.Spring Cloud Ribbon是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于Netfli ...

  6. Ribbon负载均衡策略与自定义配置new

    Ribbon负载均衡策略 配置 对调用的某个服务启用某种负载策略 1)通过配置文件配置 hello: ribbon: NFLoadBalancerRuleClassName:com.netflix.l ...

  7. Ribbon负载均衡策略与自定义配置

    Ribbon负载均衡策略 配置 对调用的某个服务启用某种负载策略 1)通过配置文件配置 hello: ribbon: NFLoadBalancerRuleClassName:com.netflix.l ...

  8. springcloud(十四)、ribbon负载均衡策略应用案例

    一.eureka-server服务中心项目不再创建 二.eureka-common-empdept公共组件项目不再掩饰 三.创建eureka-client-provider-empdept-one提供 ...

  9. Spring Cloud官方文档中文版-客户端负载均衡:Ribbon

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#_spring_cloud_netflix 文中例子我做了一些测试在:h ...

随机推荐

  1. DockPanel 类

    DockPanel 类 .NET Framework 4.5   其他版本   此主题尚未评级 - 评价此主题   定义您可水平或垂直排列子元素的区域,互相. 继承层次结构   System.Obje ...

  2. [Node.js] Stream all things!

    Node.js come alone with many Stream API. Stream is useful when handling large trunck of data. For ex ...

  3. Dynamic Programming for TSP

    See how Dynamic programming working for TSP: Check this link: http://www.youtube.com/watch?v=IUzE1Mb ...

  4. 【statistics】理想论坛2018-4-25日统计

    说明:利用理想论坛爬虫1.07版(http://www.cnblogs.com/xiandedanteng/p/8954115.html) 下载了前十页主贴及子贴,共得到359619条数据,以此数据为 ...

  5. 遭遇java.lang.NoClassDefFoundError: org/apache/tomcat/PeriodicEventListener

    前天还正常的程序,今天忽然无法启动了,MyEclipse的Console提醒我如下错误: 严重: Error deploying web application directory rttsbizja ...

  6. Jquery Types 小结

    JavaScript provides several built-in(内置的) datatypes. In addition to those, this page documents virtu ...

  7. 分享几个.NET 下的计划任务组件

    Quartz http://www.quartz-scheduler.net/(现项目在使用,可以看我之前的文章) Hangfire http://hangfire.io/ Install-Packa ...

  8. java程序员认证考试题库

    第一部分 基础知识练习 目标 本章对应于<学生指南>各章的内容分别提供了练习题集,包括: ●  第一章Java入门 ●  第二章数据类型和运算符 ●  第三章流程控制与数组 ●  第四章封 ...

  9. Java 基础【13】 I/O流概念分析整理

    转载地址:http://blog.csdn.net/yuebinghaoyuan/article/details/7388059 java.io 中的流,可以从不同的角度进行分类. 按照数据流的方向不 ...

  10. 【Linux】echo命令

    用途 echo是用于终端打印的基本命令 说明 只需要使用带双引号的文本,结合echo命令就可以将文本打印在终端. [root@localhost test]# echo "Hello Wor ...