【SpringCloud】Ribbon
Ribbon
负载均衡原理

- order-service 发起 user-service 请求,被ribbon进行拦截;
- ribbon会向注册中心拉取user-service 相对应的服务;
- 注册中心返回user-service服务列表;
- 由ribbon的负载均衡机制去选择一个服务进行访问;默认采用的是轮训的机制。
负载均衡流程

请求示例
配置
@Configuration
public class RestTemplateConfiguration {
/**
* 添加LoadBalanced,使RestTemplate以负载均衡的方式调用服务
* @return
*/
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
接口调用
@RequestMapping("consumer")
@RestController
public class ConsumerController {
/**
* spring提供的一个用于访问rest接口的模板对象
* 提供了多重便捷访问远程HTTP服务的方法,简单的RestFul 服务模板
*/
@Resource
private RestTemplate restTemplate;
/**
* 服务地址
*/
private static final String REST_FIX_URL_PREFIX = "http://XY-PROVIDER";
@GetMapping("/getProvider")
public String getConsumerByIp() {
String res = restTemplate.getForObject(REST_FIX_URL_PREFIX + "/helloProvider", String.class);
return res;
}
}
Debug 效果如下所示
暂时先保留
负载均衡策略
| 内置负载均衡类 | 说明 |
|---|---|
| RoundRobinRule | 简单的轮训服务列表来选择服务器。Ribbon的默认规则 |
| AvailabilityFilteringRule | 对以下两种服务器进行忽略: (1)在默认的情况下:这台服务器如果3次连接失败,这台服务器就会被设置“短路”状态。短路状态将持续30S,如果在此连接失败,短路的持续时间就会几何级增加 (2)并发数较高的服务器。如果一个服务器的并发连接数过高,配置了此规则的而客户端也会将忽略,可以有客户端的ActiveConnectionsLimit属性进行配置 |
| WeightedResponseTimeRule | 为每一个服务器赋予一个权重。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择 |
| ZoneAvoidanceRule | 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架。而在对Zone内的多个服务器进行轮询 |
| BestAvailableRule | 忽略那些短路的服务器,并选择并发数较低的服务器 |
| RandomRule | 随机选择一个可用的服务器 |
| RetryRule | 重试机制的选择逻辑 |
负载均衡策略配置
负载均衡策略配置的方式有两种:
代码方式、配置文件方式
代码方式
配置灵活,修改时需要重新打包发布,针对全局配置。

指定为随机策略
@Bean
public IRule randomRule(){
return new RandomRule();
}
配置文件方式
直观、方便、无需重新打包,但无法做全局配置
# 指定某个服务
xy-provider:
ribbon:
# 指定负载均衡规则
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
饥饿加载
配置方式
ribbon:
eager-load:
# 开启饥饿加载
enabled: true
# 指定饥饿加载的服务器列表名称
clients:
- xy-provider
开启前
第一次访问时耗时会比较长,因为会去注册中心拉取注册列表缓存到本地。
之后的访问耗时都会很短,因为少了一步操作。
浏览器请求耗时

控制台

- 从注册中心拉取所有的实例(服务)
- 然后拉取我们需要的服务,由负载均衡去选择访问节点。
开启后
控制台

开启饥饿加载后,重新启动,我们会发现项目一启动,就去加载服务列表。
浏览器

跟没开启之前,耗时会相差很多。
【SpringCloud】Ribbon的更多相关文章
- 【SpringCloud】Ribbon如何自定义客户端配置和全局配置
起因 事情的起因是这样的,公司内部要实现基于Zuul网关的灰度路由,在上线时进行灰度测试,故需要配置业务微服务向Eureka注册的metadata元数据,和自定义Ribbon的负载规则达到只访问灰度服 ...
- 【springcloud】springcloud Greenwich SR4版本笔记
springcloud Greenwich SR4版本笔记 本文只记录实际版本,配置,pom,代码以及注意事项.别的在其他springcloud 的F版本中已有详述. 示例代码地址:https://g ...
- 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值
[SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...
- 【SpringCloud】第二篇: 服务消费者(rest+ribbon)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 【SpringCloud】08.客户端负载均衡器:Ribbon
客户端负载均衡器:Ribbon Ribbon实现软负载均衡核心: 服务发现 :依据服务的名字,把该服务下所有的实例都找出来 服务选择规则:依据规则策略,如果从多个实例中,选出有效的服务 服务监听:检测 ...
- 【springcloud】客户端负载均衡(Ribbon)
转自:https://blog.csdn.net/pengjunlee/article/details/86594934 服务器端负载均衡负载均衡是我们处理高并发.缓解网络压力和进行服务器扩容的重要手 ...
- 【SpringCloud】Netflix源码解析之Ribbon:负载均衡策略的定义和实现
Ribbon负载均衡策略定义 IRule其实就只做了一件事情Server choose(Object key),可以看到这个功能是在LB中定义(要求)的,LB把这个功能委托给IRule来实现.不同的I ...
- 【四】Ribbon负载均衡
1.概述1.1.是什么 Spring Cloud Ribbon 是基于Netflix Ribbon实现的一套客户端负载均衡的工具. 简单的说, Ribbon是Netflix发布的开源项目,主要功能是提 ...
- 【SpringCloud】第五篇: 路由网关(zuul)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 【SpringCloud】第四篇:断路器(Hystrix)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
随机推荐
- Activity中的setContentView(R.layout.xxx)源码分析
点进去会看到下图: 其中getWindow()是获取到Window类的唯一子类PhoneWindow的对象 找到PhoneWindow的setContentView()方法点进去: 1 @Overri ...
- VUE项目 启动提示 npn ERRT nissing script: dev解决办法
VUE项目 启动提示 npn ERRT nissing script: dev 提示 丢失 dev 解决办法 首先 查看项目目录里面的 package.json 文件, 文件内容如下: 发现红框这里是 ...
- Qt开发技术:Q3D图表开发笔记(三):Q3DSurface三维曲面图介绍、Demo以及代码详解
前言 qt提供了q3d进行三维开发,虽然这个框架没有得到大量运用也不是那么成功,性能上也有很大的欠缺,但是普通的点到为止的应用展示还是可以的. 其中就包括华丽绚烂的三维图表,数据量不大的时候是可 ...
- 原来这就是所谓的 JSR!
相信大家在学习 Java 的过程中,或多或少都见过 JSR 这个词.本篇文章就科普下什么是 JSR. 什么是 JSR ? JSR(Java Specification Requests),是指 Jav ...
- 15-js语法检查eslint
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); modul ...
- day06-优惠券秒杀02
功能03-优惠券秒杀02 4.功能03-优惠券秒杀 4.4一人一单 4.4.1需求分析 要求:修改秒杀业务,要求同一个优惠券,一个用户只能下一单. 在之前的做法中,加入一个对用户id和优惠券id的判断 ...
- JSP 的本质原理解析:"编写的时候是JSP,心里想解读的是 java 源码"
JSP 的本质原理解析:"编写的时候是JSP,心里想解读的是 java 源码" @ 目录 JSP 的本质原理解析:"编写的时候是JSP,心里想解读的是 java 源码&q ...
- 微服务 - Nginx网关 · 进程机制 · 限流熔断 · 性能优化 · 动态负载 · 高可用
系列目录: 微服务 - 概念 · 应用 · 通讯 · 授权 · 跨域 · 限流 微服务 - 集群化 · 服务注册 · 健康检测 · 服务发现 · 负载均衡 微服务 - Redis缓存 · 数据结构 · ...
- 【解决方法】查找比较组时报错:An object (User, Group, or Built-in security principal) with the following nameca..
目录-快速跳转 问题描述 原因分析: 解决方案: 附言: 问题描述 操作环境与场景: 在 VM 内 Windows 2019 中,在组策略管理中,对GPO进行组查找时报错: An object (Us ...
- Prism Sample 12-UsingCompositeCommands
本例中,主页是一个按钮,绑定了一个复合命令,然后下面一个TabControl <Grid> <Grid.RowDefinitions> <RowDefinition He ...