day06-SpringCloud Ribbon
SpringCloud Ribbon
1.Ribbon介绍
1.1Ribbon是什么?
- SpringCloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具
- Ribbon 主要功能是提供客户端负载均衡算法和服务调用
- Ribbon 客户端组件提供一系列完整的配置项如连接超时,重试等
- Ribbon 会基于某种规则(如简单轮询,随机连接等)去连接指定服务
- 程序员很容易使用 Ribbon 的负载均衡软法实现负载均衡
一句话:Ribbon = 负载均衡 + RestTemplate 调用
Ribbon 目前进入维护模式,未来替换方案 是 Spring Cloud LoadBalancer
1.2LB(Load Balance)-负载均衡
负载均衡(LB)的分类:
集中式LB
即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如Nginx),由该设施负责把访问的请求通过某种策略转发至服务的提供方。
进程内LB
将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后再从这些地址中选择出一个合适的服务地址。Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
前面 member-consumer 轮询负载访问 10000/10002 底层就是 Ribbon 默认的轮询负载算法
2.Ribbon原理
2.1Ribbon架构图&机制

Ribbon 机制:
- 消费者先选择 EurekaServer,它优先选择在同一个区域内负载较少的 server
- 再根据程序员指定的策略,在从 server 取到的服务注册列表中选择一个地址
- Ribbon 提供了多种策略∶ 比如轮询、随机和根据响应时间加权。
2.2Ribbon常见负载算法
| 策略名 | 描述 |
|---|---|
| BestAvailableRule | 选择一个最小并发请求的server。逐个考察server,如果server被tripped(跳闸)了,则忽略,再选择其中ActiveRequestsCount最小的Server |
| AvailabilityFilteringRule | 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的后端server(active connections超过配置的阈值) |
| WeightedResponseTimeRule | 根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低 |
| RetryRule | 对选定的负载均衡策略机上重试机制。在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的server |
| RoundRobbinRule | 轮询index,选择index对应位置的server |
| RandomRule | 随机选择一个server,在index上随机,选择index对应位置的server |
| ZoneAvoidanceRule | 复合判断server所在区域的性能和server的可用性,来选择server |
3.切换负载均衡算法-应用实例
需求:将默认的轮询算法改为随机算法RandomRule,浏览去访问消费方,要求消费方访问服务方端口是随机的
(1)创建消费方的RibbonRule.java,指定负载均衡的策略
package com.li.springcloud.config;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author 李
* @version 1.0
* 配置自己的负载均衡算法
*/
@Configuration
public class RibbonRule {
//注入指定的均衡算法
@Bean
public IRule myRibbonRule(){
//这里指定RandomRule
return new RandomRule();
}
}
(2)在主程序中使用注解指定Ribbon的配置
在上面RibbonRule的配置是全局的,不在主程序中配置也可以使用,这里在主程序中指定只是更加明确

day06-SpringCloud Ribbon的更多相关文章
- springcloud Ribbon学习笔记二
之前介绍了如何搭建eureka服务并开发了一个用户服务成功注册到了eureka中,接下来介绍如何通过ribbon来从eureka中获取用户服务: springcloud ribbon提供客户端的负载均 ...
- 客户端实现负载均衡:springCloud Ribbon的使用
Netfilx发布的负载均衡器,是一个基于http.tcp的客户端负载均衡工具,具有控制http.tcp客户端的行为,为ribbon配置服务提供者的地址后,ribbon就 可以经过springClou ...
- springcloud ribbon的 @LoadBalanced注解
在使用springcloud ribbon客户端负载均衡的时候,可以给RestTemplate bean 加一个@LoadBalanced注解,就能让这个RestTemplate在请求时拥有客户端负载 ...
- springcloud Ribbon学习笔记一
上篇已经介绍了如何开发eureka服务并让多个服务进行相互注册,接下来记录如何开发一个服务然后注册到eureka中并能通过ribbon成功被调用 开发一个用户服务并注册到eureka中,用户服务负责访 ...
- SpringCloud Ribbon 负载均衡 通过服务器名无法连接的神坑一个
一,问题 采取eureka集群.客户端通过Ribbon调用服务,Ribbon端报下列异常 java.net.UnknownHostException: SERVICE-HI java.lang.Ill ...
- springcloud ribbon Finchley 版本,自定义算法
引用上一个项目,在原有的基础上进行更改,添加springcloud的内荣. eureka-server 和上一个springcloud eureka的一样,没有改动. 添加cloud-api pack ...
- SpringCloud Ribbon的分析(二)
上文我们分析到 loadBalancer 根据具体的算法选择相应的server. protected Server getServer(ILoadBalancer loadBalancer) { if ...
- SpringCloud Ribbon的分析
Spring Cloud Ribbon主要用于客户端的负载均衡.最基本的用法便是使用RestTemplate进行动态的负载均衡.我们只需要加入如下的配置便能完成客户端的负载均衡. @Configura ...
- springcloud ribbon 客户端负载均衡用法
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...
- SpringCloud Ribbon组成和负载均衡规则
Ribbon饥饿加载 默认情况下Ribbon是懒加载的.当服务起动好之后,第一次请求是非常慢的,第二次之后就快很多. 解决方式:开启饥饿加载 ribbon: eager-load: enabled: ...
随机推荐
- Vue组件template中html代码自动补齐设置
1.vscode设置==>扩展==>JSON==>在settings.json中编辑 2.在最后 } 前添加如下代码保存文件即可 // 自动补全模板字符串 "emmet.t ...
- vue导出文件
/**导出 */ async toExcel() { // let result = await this.axios({ // method: 'get', // url: `issdc-manag ...
- vue下载图片
async works(obj) { await this.axios({ method: 'get', url: `entryFormControll ...
- 后端返回字符流,前端处理进行excel文件导出操作
针对于这种的文件导出,最关键的是响应类型的设置,也就是responseType的设置(responseType:"arraybuffer"或者responseType:" ...
- docker安装nginx挂载启动
docker pull nginx 命令安装 查找 Docker Hub 上的 nginx 镜像: docker search nginx 这里我们拉取官方的镜像 docker pull nginx ...
- jdbc连接数据库access denied for user 'root'@'localhost'(using password:YES)
navicat可以进行连接,一般原因为mysql未启用远程连接 以下为解决方案 解决方法-更新用户加密方式: MySQL [mysql]> ALTER USER 'root'@'%' IDENT ...
- HarmonyOS_Text_Image
Text组件 ohos:属性 id="$+id:text_helloworld" #在程序中控制,需要id="$+id:name",转回MainAbilityS ...
- Crypto入门 (六)幂数加密(云影密码)
前言: 这次题目说的是幂数加密,但是它本身 幂数加密: 题目:8842101220480224404014224202480122 分析一波,只有8.4.2.1.0五种数字,然后先根据提示百度一下幂数 ...
- 中兴radius属性列表new.xls
标准属性 自定义属性
- 我是如何被我的c++大作业榨干的
手把手教你用git上传项目到GitHub(图文并茂,这一篇就够了),相信你一定能成功!! - 知乎 (zhihu.com) C++ 类对象数组_Slience_Perseverance的博客-CSDN ...