springcloud(十二):Ribbon客户端负载均衡介绍
springcloud(十二):Ribbon客户端负载均衡介绍
Ribbon简介
使用分布式微服务脚骨的应用系统,在部署的时候通常会为部分或者全部微服务搭建集群环境,通过提供多个实例来提高系统的稳定型。既然有多个服务实例,那么调用的时候应该如果选择呢?这就需要实现一定的负载均衡策略。
实现负载均衡主要有两种方式,第一种是通过服务端进行负载均衡,第二种是通过客户端进行负载均衡。服务端方式的实现原理是通过反向代理并按照某种负载均衡策略把客户端请求分发到可用的服务端节点上,如Nginx。客户端方式的实现原理是在客户端先获取所有可用的服务端节点,再通过某种负载均衡策略选择其中一个节点进行访问。
Ribbon就是一种客户端负载均衡的实现,它是有Netflix发布的一个基于HTTP和TCP的客户端负载均衡工具。服务消费者继承Ribbon后,只需要配置服务提供者地址,Ribbon就可以基于指定的负载均衡算法,自动帮服务消费者分配请求。Ribbon提供了很多常见的负载均衡算法,入轮询、随机、权重等。作为Spring Cloud体系中的一员,Ribbon可以和Eureka方便地集合使用,可以直接从Eureka Server中获取所有服务提供者的节点地址,然后根据指定的负载均衡策略选择某个节点进行访问。
Ribbon是一个在云服务中久经沙场的客户端IPC库,它提供以下的一些特性:
- 负载均衡
- 故障容错
- 在异步和动态的模型中支持多协议通讯(HTTP、TCP、UDP)
- 缓存与批处理
引入Ribbon依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
Ribbon所包含的模块
- ribbon:在其他Ribbon模块和Hystrix上集成负载均衡、容错、缓存/批处理的api
- ribbon-loadbalancer:可以独立或与其他模块一起使用的负载均衡器的api
- ribbon-eureka:使用Eureka客户端为云提供动态服务器列表的api
- ribbon-transport:使用带有负载均衡功能的RxNetty支持HTTP、TCP和UDP协议的传输客户端
- ribbon-httpclient:构建在Apache HttpClient之上,与负载均衡器集成的REST客户端
- ribbon-example:提供了一些示例
- ribbon-core:客户端配置api和其他共享api
负载均衡器组件
Ribbon提供的基本功能
- 向通信客户端提供公共DNS名称或单个服务器的IP
- 根据特定的逻辑选择服务器
Ribbon提供的高级功能
- 通过将客户端划分为区域(如数据中心的机架),在相同区域中减少服务器延迟,从而在客户端和服务器之间建立关联
- 保持服务器的统计信息,避免出现高延迟或频繁故障的服务器
- 保持区域的统计信息,避免可能出现停机的区域
负载均衡器的三大子模块
- Rule:确定从列表返回哪个服务的逻辑组件
- Ping:在后台运行的组件以确保服务的活跃度
- ServerList:这可以是静态的或动态的。如果它是动态的(由DynamicServerListLoadBalancer使用),后台线程将在特定的时间间隔刷新和过滤列表
创建Ribbon程序

如架构图所示,Ribbon充当负载均衡器的作用,能够让我们的服务消费者调用到自己想使用的服务,服务消费者不用关心中间具体的操作,只需要将要调用的服务信息告诉负载均衡器,Ribbon就会从相应的服务集群中选择一个可以使用的服务器,供服务消费者调用。
负载均衡策略
- WeightedResponseTimeRule:根据响应时间分配一个weight(权重),响应时间越长,weight越小,被选中的可能性越低。
- RoundRobinRule:轮询选择服务节点(此为默认的负载均衡策略)。
- RandomRule:随机选择一个服务节点。
- ZoneAvoidanceRule:综合考虑服务节点所在区域的性能和服务节点的可用性来选择服务节点。
- RetryRule:重试机制。在一个配置时间段内,当选择服务节点不成功时会一直尝试重新选择。
- BestAvailableRule:选择一个并发请求最小的服务节点。
- AvailabilityFilteringRule:过滤掉那些因为一直连接失败而被标记为circuit tripped的服务节点和那些高并发的服务节点(active connections 超过配置值)
转载请注明出处:https://blog.csdn.net/MrSpirit/article/details/80182508
springcloud(十二):Ribbon客户端负载均衡介绍的更多相关文章
- springcloud(十三):Ribbon客户端负载均衡实例
一.采用默认的负载均衡策略:RoundRobinRule 轮询策略 1.修改提供者原的控制类 在之前的eureka-client-provider项目的CenterController.java中加入 ...
- SpringBoot(三) - Ribbon客户端负载均衡,Zuul网关,Config配置中心
1.Ribbon客户端负载均衡 1.1 依赖 1.2 配置信息 # feign默认加载了ribbon负载均衡,默认负载均衡机制是:轮询 # 负载均衡机制是添加在消费端(客户端)的,如果改为随机,指定服 ...
- spring cloud --- Ribbon 客户端负载均衡 + RestTemplate + Hystrix 熔断器 [服务保护] ---心得
spring boot 1.5.9.RELEASE spring cloud Dalston.SR1 1.前言 当超大并发量并发访问一个服务接口时,服务器会崩溃 ,不仅导致这个接口无法 ...
- spring cloud --- Ribbon 客户端负载均衡 + RestTemplate ---心得【无熔断器】
spring boot 1.5.9.RELEASE spring cloud Dalston.SR1 1.前言 了解了 eureka 服务注册与发现 的3大角色 ,会使用RestTem ...
- ③SpringCloud 实战:使用 Ribbon 客户端负载均衡
这是SpringCloud实战系列中第三篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- SpringCloud实战-Ribbon客户端负载均衡
前面我们已经完成了注册中心和服务提供者两个基础组件.接着介绍使用Spring Cloud Ribbon在客户端负载均衡的调用服务. ribbon 是一个客户端负载均衡器,可以简单的理解成类似于 ngi ...
- springcloud 之Ribbon客户端负载均衡配置使用
pom.xml添加配置说明:这里服务注册与发现用的是Eureka,所以消费者端需要引入eureka,使用EurekaClient来调用服务 <dependency> <groupId ...
- Spring Cloud入门教程(二):客户端负载均衡(Ribbon)
对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如 ...
- 笔记:Spring Cloud Ribbon 客户端负载均衡
Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服 ...
随机推荐
- 杂项-Java:Druod Monitor
ylbtech-杂项-Java:Druid Monitor 1.返回顶部 1. https://www.cnblogs.com/wanghuijie/p/druid_monitor.html 2. 2 ...
- 杂项-Java:JSP
ylbtech-杂项-Java:JSP 1.返回顶部 1. JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Micros ...
- 昆石VOS3000_2.1.2.4完整安装包及安装脚本
安装包下载地址:http://www.51voip.org/post/56.html 安装教程: 上传安装包 ·给整个目录授权 chmod 777 /root/vosintsall `核实 关闭sel ...
- bzoj 1645: [Usaco2007 Open]City Horizon 城市地平线【线段树+hash】
bzoj题面什么鬼啊-- 题目大意:有一个初始值均为0的数列,n次操作,每次将数列(ai,bi-1)这个区间中的数与ci取max,问n次后元素和 离散化,然后建立线段树,每次修改在区间上打max标记即 ...
- $CF19A\ World\ Football\ Cup$
炒鸡\(6\)批的模拟题. 注意的是输入 把握好空格 大小写. 根据题目的这句话来排序 积分榜是按照以下原则制作的:胜利一个队得3分,平分1分,失败0分. 首先,球队按积分顺序排在积分榜上,分数相等比 ...
- JavaScript--DOM删除节点removeChild()
删除节点removeChild() removeChild() 方法从子节点列表中删除某个节点.如删除成功,此方法可返回被删除的节点,如失败,则返回 NULL. 语法: nodeObject.remo ...
- 2017杭电多校第五场Rikka with Subset
Rikka with Subset Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- how to do a mass update in Laravel5 ( 在Laravel 5里面怎么做大量数据更新 )
Today, I had spent 3 hours to fix one problem, The old program has a bug, originally, when a user pr ...
- [ TJOI 2012 ] 防御
\(\\\) Description 有 \(n\) 人,第 \(i\) 个人有一个护甲值 \(a_i\). 有 \(m\) 次操作,分为以下两种: \(A\ l\ r\ x\) 对编号在 \([l, ...
- input checkbox 选择内容输出多少个
<input type="checkbox" name="qId" onclick="doit();"/><input t ...