Ribbon

负载均衡原理

  1. order-service 发起 user-service 请求,被ribbon进行拦截;
  2. ribbon会向注册中心拉取user-service 相对应的服务;
  3. 注册中心返回user-service服务列表;
  4. 由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

开启前

第一次访问时耗时会比较长,因为会去注册中心拉取注册列表缓存到本地。

之后的访问耗时都会很短,因为少了一步操作。

浏览器请求耗时

控制台

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

开启后

控制台

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

浏览器

跟没开启之前,耗时会相差很多。

【SpringCloud】Ribbon的更多相关文章

  1. 【SpringCloud】Ribbon如何自定义客户端配置和全局配置

    起因 事情的起因是这样的,公司内部要实现基于Zuul网关的灰度路由,在上线时进行灰度测试,故需要配置业务微服务向Eureka注册的metadata元数据,和自定义Ribbon的负载规则达到只访问灰度服 ...

  2. 【springcloud】springcloud Greenwich SR4版本笔记

    springcloud Greenwich SR4版本笔记 本文只记录实际版本,配置,pom,代码以及注意事项.别的在其他springcloud 的F版本中已有详述. 示例代码地址:https://g ...

  3. 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值

    [SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...

  4. 【SpringCloud】第二篇: 服务消费者(rest+ribbon)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  5. 【SpringCloud】08.客户端负载均衡器:Ribbon

    客户端负载均衡器:Ribbon Ribbon实现软负载均衡核心: 服务发现 :依据服务的名字,把该服务下所有的实例都找出来 服务选择规则:依据规则策略,如果从多个实例中,选出有效的服务 服务监听:检测 ...

  6. 【springcloud】客户端负载均衡(Ribbon)

    转自:https://blog.csdn.net/pengjunlee/article/details/86594934 服务器端负载均衡负载均衡是我们处理高并发.缓解网络压力和进行服务器扩容的重要手 ...

  7. 【SpringCloud】Netflix源码解析之Ribbon:负载均衡策略的定义和实现

    Ribbon负载均衡策略定义 IRule其实就只做了一件事情Server choose(Object key),可以看到这个功能是在LB中定义(要求)的,LB把这个功能委托给IRule来实现.不同的I ...

  8. 【四】Ribbon负载均衡

    1.概述1.1.是什么 Spring Cloud Ribbon 是基于Netflix Ribbon实现的一套客户端负载均衡的工具. 简单的说, Ribbon是Netflix发布的开源项目,主要功能是提 ...

  9. 【SpringCloud】第五篇: 路由网关(zuul)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  10. 【SpringCloud】第四篇:断路器(Hystrix)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

随机推荐

  1. Activity中的setContentView(R.layout.xxx)源码分析

    点进去会看到下图: 其中getWindow()是获取到Window类的唯一子类PhoneWindow的对象 找到PhoneWindow的setContentView()方法点进去: 1 @Overri ...

  2. VUE项目 启动提示 npn ERRT nissing script: dev解决办法

    VUE项目 启动提示 npn ERRT nissing script: dev 提示 丢失 dev 解决办法 首先 查看项目目录里面的 package.json 文件, 文件内容如下: 发现红框这里是 ...

  3. Qt开发技术:Q3D图表开发笔记(三):Q3DSurface三维曲面图介绍、Demo以及代码详解

    前言   qt提供了q3d进行三维开发,虽然这个框架没有得到大量运用也不是那么成功,性能上也有很大的欠缺,但是普通的点到为止的应用展示还是可以的.  其中就包括华丽绚烂的三维图表,数据量不大的时候是可 ...

  4. 原来这就是所谓的 JSR!

    相信大家在学习 Java 的过程中,或多或少都见过 JSR 这个词.本篇文章就科普下什么是 JSR. 什么是 JSR ? JSR(Java Specification Requests),是指 Jav ...

  5. 15-js语法检查eslint

    const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); modul ...

  6. day06-优惠券秒杀02

    功能03-优惠券秒杀02 4.功能03-优惠券秒杀 4.4一人一单 4.4.1需求分析 要求:修改秒杀业务,要求同一个优惠券,一个用户只能下一单. 在之前的做法中,加入一个对用户id和优惠券id的判断 ...

  7. JSP 的本质原理解析:"编写的时候是JSP,心里想解读的是 java 源码"

    JSP 的本质原理解析:"编写的时候是JSP,心里想解读的是 java 源码" @ 目录 JSP 的本质原理解析:"编写的时候是JSP,心里想解读的是 java 源码&q ...

  8. 微服务 - Nginx网关 · 进程机制 · 限流熔断 · 性能优化 · 动态负载 · 高可用

    系列目录: 微服务 - 概念 · 应用 · 通讯 · 授权 · 跨域 · 限流 微服务 - 集群化 · 服务注册 · 健康检测 · 服务发现 · 负载均衡 微服务 - Redis缓存 · 数据结构 · ...

  9. 【解决方法】查找比较组时报错:An object (User, Group, or Built-in security principal) with the following nameca..

    目录-快速跳转 问题描述 原因分析: 解决方案: 附言: 问题描述 操作环境与场景: 在 VM 内 Windows 2019 中,在组策略管理中,对GPO进行组查找时报错: An object (Us ...

  10. Prism Sample 12-UsingCompositeCommands

    本例中,主页是一个按钮,绑定了一个复合命令,然后下面一个TabControl <Grid> <Grid.RowDefinitions> <RowDefinition He ...