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 的封装,可以让我们轻松的将面向服 ...
随机推荐
- ci完整集成
http://www.cnblogs.com/zhanchenjin/p/5032218.html http://blog.csdn.net/williamwanglei/article/detail ...
- KVPhone,VOS官方的SIP软电话电脑客户端
来自官方,品质纯正.但是可能因为JAVA环境等问题无法安装,可以试试! 下载地址: 解压密码:www.51voip.org
- 常用的八大排序算法,含java实例(copy)
说明:转载于http://www.cnblogs.com/qqzy168/archive/2013/08/03/3219201.html 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序( ...
- 清北考前刷题day3下午好
/* 可以并查集维护 可以发现,某个联通快出现大于等于2个环,一定无法分配. 有解要么一个环,要么没有环. 一个环时答案等于点数乘2(顺时针或逆时针). 没有环是树,对于一个n个点的树,方案一定有n种 ...
- Unity WebGL请求Http接口出现的Cors跨域问题
1.运行环境 (1)WebGL运行浏览器:Firfox Quantum 67.0(64位) (2)服务端API运行环境:IIS,.Net Core 2.1 API 2.问题:CORS 头缺少Acces ...
- May Challenge 2019 Division 2 水题讲解
Reduce to One 这题其实蛮水的? 题意就是说: 给定一个 1~n 的序列,每次挑两个数 x y 合并,合并值为 \(x+y+xy\) ,然后求不断合并最后剩下的一个的最大值 随便搞搞发现答 ...
- spring controller接口中,用pojo对象接收页面传递的参数,发现spring在对pojo对象赋值时,有一定顺序的问题
1.我的项目中的实体类都继承了基类entityBase,里面封装了分页的一些属性,pageindex.pagesize.pagerownum等. 2.思路是页面可以灵活的传递分页参数,比如当前页pag ...
- Office Excel的几个快捷键记录
Office Excel的几个快捷键记录: 切换Sheet:CTRL + PageUP/PageDown 另存为:F12
- JSP/Servlet Web应用中.properties文件的放置与读取
本地项目 在本地类库中,我经常使用当前目录来放置.properties文件,这时调用方只要引用我的jar,并且将我的.properties放在他的classpath里面即可,比如: p.load(ne ...
- 专题六:UDP编程
引用: 前一个专题简单介绍了TCP编程的一些知识,UDP与TCP地位相当的另一个传输层协议,它也是当下流行的很多主流网络应用(例如QQ.MSN和Skype等一些即时通信软件传输层都是应用UDP协议的) ...