Ribbon负载均衡流程

总体流程

  1. 当我们直接用服务名+端口在浏览器访问时,浏览器不认识这种地址
  2. 所以当Ribbon得到一个请求是服务名+端口的形式的时候就会取eureka-server中拉取服务
  3. eureka-server会返回一个服务列表给Ribbon
  4. Ribbon在服务列表中的挑选服务

详细流程

Ribbon负载均衡策略

内置负载均衡规则类 规则描述
RoundRobinRule 简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
AvailabilityFilteringRule 对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。 (2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的..ActiveConnectionsLimit属性进行配置。
WeightedResponseTimeRule 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
BestAvailableRule 忽略那些短路的服务器,并选择并发数较低的服务器。
RandomRule 随机选择一个可用的服务器。
RetryRule 重试机制的选择逻辑

调整Ribbon的负载均衡规则(即不适用默认的ZoneAvoidanceRule)

通过定义IRule实现修改负载均衡规则(全局的配置负载均衡策略)

在启动类中定义一个新的IRule

@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}/** @Author chenbo6**/@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}@Beanpublic IRule randomRule(){return new RandomRule();}
}

配置文件方式修改负载均衡规则(单个的配置负载均衡策略)

在服务消费者的application.yml文件中,添加新的配置也可以修改规则

userservice: #服务提供者的服务名称ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

Ribbon的饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过在服务消费者的配置文件中开启饥饿加载:

ribbon:eager-load:enabled: true #开启饥饿加载clients: userservice #指定饥饿加载的服务名称,可以配置多个以列表的形式

01-Ribbon负载均衡原理相关推荐

  1. Ribbon负载均衡原理,Feign是如何整合Ribbon的?

    文章目录 1. 什么是负载均衡? 2. Ribbon的使用 ①:自定义负载均衡策略 ②:Ribbon的饥饿加载 3. Ribbon的负载均衡原理 ①:收集带有@LoadBalanced注解的RestT ...

  2. Ribbon负载均衡原理

    Ribbon + restTemplate相结合实现负载均衡,具体原理图详见以下截图: LoadBalancerClient 类执行具体的负载均衡,其继承于 LoadBalancerBase. Loa ...

  3. Ribbon负载均衡原理,源码解读

    Ribbon负责均衡原理图 源码详解: @LoadBalanced 标记RestTemplate发起的请求,会被loadBalanced拦截和处理 /*** 创建RestTemplate并注入Spri ...

  4. 【详解】Ribbon 负载均衡服务调用原理及默认轮询负载均衡算法源码解析、手写

    Ribbon 负载均衡服务调用 一.什么是 Ribbon 二.LB负载均衡(Load Balancer)是什么 1.Ribbon 本地负载均衡客户端 VS Nginx 服务端负载均衡的区别 2.LB负 ...

  5. SpringCloud LoadBalancerClient 负载均衡原理

    LoadBalancerClient 是 SpringCloud 提供的一种负载均衡客户端,Ribbon 负载均衡组件内部也是集成了 LoadBalancerClient 来实现负载均衡.那么 Loa ...

  6. SpringCloud源码:Ribbon负载均衡分析

    本文主要分析 SpringCloud 中 Ribbon 负载均衡流程和原理. SpringCloud版本为:Edgware.RELEASE. 一.时序图 和以前一样,先把图贴出来,直观一点: 二.源码 ...

  7. 详解Eureka服务注册与发现和Ribbon负载均衡【纯理论实战】

    Eureka服务注册与发现 Eureka简介 在介绍Eureka前,先说一下CAP原则 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availability ...

  8. 最新版Spring Cloud Alibaba微服务架构-Ribbon负载均衡篇

    文章目录 前言 一.Ribbon核心概念 二.服务器端负载均衡和Riboon客户端负载均衡 1.服务器端负载均衡: 2.Riboon客户端负载均衡: 三.Ribbon策略 四.Ribbon配置使用 五 ...

  9. SpringCloud[04]Ribbon负载均衡服务调用

    文章目录 Ribbon负载均衡服务调用 1. 概述 1. Ribbon是什么 2. Ribbon能做什么 2. Ribbon负载均衡演示 1. 架构说明 2. Ribbon的POM依赖 3. Rest ...

  10. Spring Cloud概念+案例(eureka注册+拉取、ribbon负载均衡+重试)、netfix各组件介绍【上】

    Spring Cloud概念+案例(断路器)[下] https://blog.csdn.net/LawssssCat/article/details/104632719 [⭐️⭐️⭐️] Spring ...

最新文章

  1. layer.open嵌入地址链接
  2. MES系统实施4大关键点,您都知道吗?
  3. 汇编语言--串处理指令
  4. 智能建筑进入新的十年
  5. python两个列表合并 从小到大排列_Python对两个有序列表进行合并和排序的例子...
  6. mysql 静态表 是不是 myisam_mysql的静态表和动态表的区别,MyISAM和InnoDB的区别
  7. Android之ExpandableListView
  8. oracel 创建视图给某个用户
  9. 分治算法兵乓球比赛日程(java)
  10. Android 获取当前日期算前一年、前一月、前一天Calendar
  11. linux下配置PPTP协议×××
  12. win7下的的IVF2011+VS2010以及OpenMPI的安装与配置
  13. Windows 生成ffmpeg安卓全平台so
  14. Postgresql本地语言环境参数设置(LC_COLLATE,LC_CTYPE)
  15. 计算机运行内存怎么表示,如何查看电脑运行内存_如何查看电脑系统内存
  16. dnmap分布式集群扫描
  17. the little schemer 笔记(1)
  18. Golang里的AES加密、解密
  19. 【微信小程序调用百度API实现图像识别功能】----项目实战
  20. 大数据与O2O:能看到的三四线城乡互联网的未来

热门文章

  1. c语言readline库6,6.35. Readline-6.3
  2. STC32G12K128-Beta 定时器
  3. Android应用优化之最基本的UI层显示优化
  4. android notifydatasetchanged 不起作用,[android] recyclerView 使用 notifyDataSetChanged无效分析和解决方法...
  5. 第一个Java程序的总结和提升
  6. 【EXLIBRIS】宏阅读计划
  7. python井字棋游戏开发(人人对战,人机对战,包含源码,逻辑思维流程图)
  8. 春节红包为何成了必争之地
  9. Java的历史和技术体系
  10. dlopen android 权限,Android7.0对dlopen的改变——读取私有.so结果变化