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. 【Spring5】IOC

    1 Spring概念 Spring是轻量级的开源JavaEE框架.可以解决企业开发的复杂性. Spring有两个核心部分:IOC和Aop ①IOC控制反转:把创建对象过程交给Spring管理 ②Aop ...

  2. Docker Compose 部署GitLab

    先决条件 Docker Engine和Docker Compose是必需的.请参阅在CentOS上安装Docker Engine. 建议使用4核的服务器,同时至少分配4G的内存,理论上4核4G可最多支 ...

  3. Puppeteer+RabbitMQ:Node.js 批量加工pdf服务架构设计与落地

    全文约8500字,阅读时长约10分钟. 智慧作业最近上线「个性化手册」(简称个册)功能,一份完整的个性化手册分为三部分: •学情分析:根据学生阶段性的学习和考试情况进行学情分析.归纳.总结,汇总学情数 ...

  4. Vue+echarts实现中国地图射线效果

    效果图如上 前提是安装Echarts并引入 并且配置中国地图json文件这些都在同账号另一篇博客上有说明,查看请自行移步 下展示代码 <template> <div class=&q ...

  5. [C++提高编程] 3.3 deque容器

    文章目录 3.3 deque容器 3.3.1 deque容器基本概念 3.3.2 deque构造函数 3.3.3 deque赋值操作 3.3.4 deque大小操作 3.3.5 deque 插入和删除 ...

  6. 一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill

    开始 一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill allSettled 的用法 const runAl ...

  7. 《流畅的Python》第二版上市了,值得入手么?

    <Fluent Python>第一版在 2015 年出版,简体中文版<流畅的Python>在 2017 年出版.从那时起,它就成为了所有 Python 程序员的必读之书.如果一 ...

  8. 记一次nginx配置不当引发的499与failover 机制失效

    背景 nginx 499在服务端推送流量高峰期长期以来都是存在的,间或还能达到告警阈值触发一小波告警,但主观上一直认为499是客户端主动断开,可能和推送高峰期的用户打开推送后很快杀死app有关,没有进 ...

  9. Redis分布式锁实现及使用

    文章目录 分布式锁 全局ID生成器 一人一单实现 超卖问题 一人一单 分布式锁 Redis setnx实现分布式锁 Redis在业内解决秒杀等业务场景有非常广的应用,如何设计实现一个分布式锁是解决超卖 ...

  10. NC54585 小魂和他的数列

    题目链接 题目 题目描述 一天,小魂正和一个数列玩得不亦乐乎. 小魂的数列一共有n个元素,第i个数为Ai. 他发现,这个数列的一些子序列中的元素是严格递增的. 他想知道,这个数列一共有多少个长度为K的 ...