01-Ribbon负载均衡原理
Ribbon负载均衡流程
总体流程
- 当我们直接用服务名+端口在浏览器访问时,浏览器不认识这种地址
- 所以当Ribbon得到一个请求是服务名+端口的形式的时候就会取eureka-server中拉取服务
- eureka-server会返回一个服务列表给Ribbon
- 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负载均衡原理相关推荐
- Ribbon负载均衡原理,Feign是如何整合Ribbon的?
文章目录 1. 什么是负载均衡? 2. Ribbon的使用 ①:自定义负载均衡策略 ②:Ribbon的饥饿加载 3. Ribbon的负载均衡原理 ①:收集带有@LoadBalanced注解的RestT ...
- Ribbon负载均衡原理
Ribbon + restTemplate相结合实现负载均衡,具体原理图详见以下截图: LoadBalancerClient 类执行具体的负载均衡,其继承于 LoadBalancerBase. Loa ...
- Ribbon负载均衡原理,源码解读
Ribbon负责均衡原理图 源码详解: @LoadBalanced 标记RestTemplate发起的请求,会被loadBalanced拦截和处理 /*** 创建RestTemplate并注入Spri ...
- 【详解】Ribbon 负载均衡服务调用原理及默认轮询负载均衡算法源码解析、手写
Ribbon 负载均衡服务调用 一.什么是 Ribbon 二.LB负载均衡(Load Balancer)是什么 1.Ribbon 本地负载均衡客户端 VS Nginx 服务端负载均衡的区别 2.LB负 ...
- SpringCloud LoadBalancerClient 负载均衡原理
LoadBalancerClient 是 SpringCloud 提供的一种负载均衡客户端,Ribbon 负载均衡组件内部也是集成了 LoadBalancerClient 来实现负载均衡.那么 Loa ...
- SpringCloud源码:Ribbon负载均衡分析
本文主要分析 SpringCloud 中 Ribbon 负载均衡流程和原理. SpringCloud版本为:Edgware.RELEASE. 一.时序图 和以前一样,先把图贴出来,直观一点: 二.源码 ...
- 详解Eureka服务注册与发现和Ribbon负载均衡【纯理论实战】
Eureka服务注册与发现 Eureka简介 在介绍Eureka前,先说一下CAP原则 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availability ...
- 最新版Spring Cloud Alibaba微服务架构-Ribbon负载均衡篇
文章目录 前言 一.Ribbon核心概念 二.服务器端负载均衡和Riboon客户端负载均衡 1.服务器端负载均衡: 2.Riboon客户端负载均衡: 三.Ribbon策略 四.Ribbon配置使用 五 ...
- SpringCloud[04]Ribbon负载均衡服务调用
文章目录 Ribbon负载均衡服务调用 1. 概述 1. Ribbon是什么 2. Ribbon能做什么 2. Ribbon负载均衡演示 1. 架构说明 2. Ribbon的POM依赖 3. Rest ...
- Spring Cloud概念+案例(eureka注册+拉取、ribbon负载均衡+重试)、netfix各组件介绍【上】
Spring Cloud概念+案例(断路器)[下] https://blog.csdn.net/LawssssCat/article/details/104632719 [⭐️⭐️⭐️] Spring ...
最新文章
- layer.open嵌入地址链接
- MES系统实施4大关键点,您都知道吗?
- 汇编语言--串处理指令
- 智能建筑进入新的十年
- python两个列表合并 从小到大排列_Python对两个有序列表进行合并和排序的例子...
- mysql 静态表 是不是 myisam_mysql的静态表和动态表的区别,MyISAM和InnoDB的区别
- Android之ExpandableListView
- oracel 创建视图给某个用户
- 分治算法兵乓球比赛日程(java)
- Android 获取当前日期算前一年、前一月、前一天Calendar
- linux下配置PPTP协议×××
- win7下的的IVF2011+VS2010以及OpenMPI的安装与配置
- Windows 生成ffmpeg安卓全平台so
- Postgresql本地语言环境参数设置(LC_COLLATE,LC_CTYPE)
- 计算机运行内存怎么表示,如何查看电脑运行内存_如何查看电脑系统内存
- dnmap分布式集群扫描
- the little schemer 笔记(1)
- Golang里的AES加密、解密
- 【微信小程序调用百度API实现图像识别功能】----项目实战
- 大数据与O2O:能看到的三四线城乡互联网的未来
热门文章
- c语言readline库6,6.35. Readline-6.3
- STC32G12K128-Beta 定时器
- Android应用优化之最基本的UI层显示优化
- android notifydatasetchanged 不起作用,[android] recyclerView 使用 notifyDataSetChanged无效分析和解决方法...
- 第一个Java程序的总结和提升
- 【EXLIBRIS】宏阅读计划
- python井字棋游戏开发(人人对战,人机对战,包含源码,逻辑思维流程图)
- 春节红包为何成了必争之地
- Java的历史和技术体系
- dlopen android 权限,Android7.0对dlopen的改变——读取私有.so结果变化