Spring Cloud Ribbon客户端负载均衡(四)
序言
Ribbon 是一个客户端负载均衡器(Nginx 为服务端负载均衡),它赋予了应用一些支配 HTTP 与 TCP 行为的能力,可以得知,这里的客户端负载均衡也是进程内负载均衡的一种。它在 Spring Cloud 生态内是一个不可缺少的组件,少了它,服务便不能横向扩展,这显然是有违云原生12要素的。此外 Feign 与 Zuul 中已经默认集成了 Ribbon,在我们的服务之间凡是涉及调用的,都可以集成它并应用,从而使我们的调用链具备良好的伸缩性。
附带拓展福利,云原生12要素:https://12factor.net/zh_cn/
Ribbon是Netflix公司开源的一个负载均衡的项目,它属于上述的第二种,是一个客户端负载均衡器,运行在客户端上。它是一个经过了云端测试的IPC库,可以很好地控制HTTP和TCP客户端的一些行为。 Feign已经默认使用了Ribbon。
- 负载均衡
- 容错
- 多协议(HTTP,TCP,UDP)支持异步和反应模型
- 缓存和批处理
ribbon:https://github.com/Netflix/ribbon
Feign集成Ribbon示例
@RestController
@RequestMapping(value = "/Promotion",method = RequestMethod.GET)
public class PromotionController implements PromotionFacade {
@Value("${server.port}")
String port;
@Value("${spring.profiles.active}")
String environment;
@Override
@RequestMapping(value = "/delete")
public String releasePromotion(@RequestParam int orderID){
try {
if ("local".equals(environment)) {
Thread.sleep(200L);
}
return port;
}
catch (Exception ex)
{
return port+"---"+ex.getMessage();
}
}
}
注册服务如下
上述trade-promotion服务,有2个站点部署,feign调用他们如下。
@FeignClient(name = "trade-promotion")
public interface PromotionClient {
@RequestMapping(value = "/Promotion/delete", method = RequestMethod.GET)
String releasePromotion(@RequestParam int orderID);
}
默认情况下,调用结果是:8085,8082,8085,8082,8085,8082,8085,8082... 这样轮询调用执行。
原因就是默认集成啦Ribbon,可以通过spring-cloud-starter-openfeign这个依赖看下他的父依赖中,就有spring-cloud-starter-netflix-ribbon这个包的依赖。
Ribbon的负载均衡策略
- RandomRule (随机策略): 随机选择 Server
- RoundRobinRule (轮训策略): 按顺序循环选择 Server
- RetryRule (重试策略): 在一个配置时问段内当选择 Server 不成功,则一直尝试选择一个可用的 Server
- BestAvailableRule (最低并发策略): 逐个考察 Server,如果 Server 断路器打开,则忽略,再选择其中并发连接最低的 Server
- AvailabilityFilteringRule (可用过滤策略): 过滤掉一直连接失败并被标记为 circuit tripped 的 Server,过滤掉那些高并发连接的 Server(active connections 超过配置的网值)
- ResponseTimeWeightedRule (响应时间加权策略): 根据 Server 的响应时间分配权重。响应时间越长,权重越低,被选择到的概率就越低;响应时间越短,权重越高,被选择到的概率就越高。这个策略很贴切,综合了各种因素,如:网络、磁盘、IO等,这些因素直接影响着响应时间
- ZoneAvoidanceRule (区域权衡策略): 综合判断 Server 所在区域的性能和 Server 的可用性轮询选择 Server,并且判定一个 AWS Zone 的运行性能是否可用,剔除不可用的 Zone 中的所有 Server
默认为轮询策略
全局策略设置
@Configuration
public class RibbonConfig {
/**
* 随机规则
*/
@Bean
public IRule ribbonRule() {
return new RetryRule();
}
}
配置文件配置
#trade-promotion:这个是eureka中的被调用的服务名称
trade-promotion.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
note:第一个new的对象与上面的轮询规则匹配,第二个配置文件最后的词语也是与轮询规则匹配
Ribbon 超时与重试
针对单个服务的重试与超时配置:
#负载均衡策略
trade-promotion.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
#http建立socket超时时间,毫秒
trade-promotion.ribbon.ConnectTimeout=2000
#http读取响应socket超时时间
trade-promotion.ribbon.ReadTimeout=5000
#同一台实例最大重试次数,不包括首次调用
trade-promotion.ribbon.MaxAutoRetries=0
#重试负载均衡其他的实例最大重试次数,不包括首次server
trade-promotion.ribbon.MaxAutoRetriesNextServer=2
# 是否所有操作都重试,POST请求注意多次提交错误。
# 默认false,设定为false的话,只有get请求会重试
trade-promotion.ribbon.OkToRetryOnAllOperations=true
全局服务的重试与超时配置
#http建立socket超时时间,毫秒
ribbon.ConnectTimeout=2000
#http读取响应socket超时时间
ribbon.ReadTimeout=5000
#同一台实例最大重试次数,不包括首次调用
ribbon.MaxAutoRetries=0
#重试负载均衡其他的实例最大重试次数,不包括首次server
ribbon.MaxAutoRetriesNextServer=2
# 是否所有操作都重试,POST请求注意多次提交错误。
# 默认false,设定为false的话,只有get请求会重试
ribbon.OkToRetryOnAllOperations=true
Ribbon脱离Eureka进行负载
ribbon.eureka.enabled=false
trade-promotion.ribbon.listOfServers:http://localhost:8085,http://localhost:8082
Ribbon饥饿加载
ribbon.eager-load.enabled=true
ribbon.eager-load.clients=trade-promotion,trade-order
总结
多看文档,多翻资料
Spring Cloud 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 ...
- 笔记:Spring Cloud Ribbon 客户端负载均衡
Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服 ...
- Spring Cloud Ribbon——客户端负载均衡
一.负载均衡负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.其意思 ...
- Spring Cloud Ribbon 客户端负载均衡 4.3
在分布式架构中,服务器端负载均衡通常是由Nginx实现分发请求的,而客户端的同一个实例部署在多个应用上时,也需要实现负载均衡.那么Spring Cloud中是否提供了这种负载均衡的功能呢?答案是肯 ...
- Spring Cloud Ribbon 客户端负载均衡
Ribbon客户端组件提供一系列完善的配置选项,比如连接超时.重试.重试算法等,内置可插拔.可定制的负载均衡组件.下面是用到的一些负载均衡策略: 简单轮询负载均衡 加权轮询负载均衡 区域感知轮询负载均 ...
- Spring Cloud 2-Ribbon 客户端负载均衡(二)
Spring Cloud Eureka 1.Hello-Service服务端配置 pom.xml application.yml 启动两个service 2.Ribbon客户端配置 pom.xml ...
- spring cloud 之 客户端负载均衡 Ribbon
一.负载均衡 负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.其意 ...
- 【Spring Cloud】客户端负载均衡组件——Ribbon(三)
一.负载均衡 负载均衡技术是提高系统可用性.缓解网络压力和处理能力扩容的重要手段之一. 负载均衡可以分为服务器负载均衡和客户端负载均衡,服务器负载均衡由服务器实现,客户端只需正常访问:客户端负载均衡技 ...
随机推荐
- antV G2 为柱状图添加背景颜色
工作中需要在基础柱状图的基础上添加一个自定义高度的背景颜色, 基础柱状图: 目标柱状图: 由于chart绘图可以重叠,通过该特性,我们可以在画两次图重叠在一起,第一次绘图描述背景,第二次绘图描述数据, ...
- python基础(19):random模块、time模块、sys模块、os模块
1. random模块 导入的是random模块,格式是: import random 1.1 随机小数 取随机小数 : 数学计算. print(random.random()) # 取0-1之间的小 ...
- Python爬取十四万条书籍信息告诉你哪本网络小说更好看
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: TM0831 PS:如有需要Python学习资料的小伙伴可以加点击 ...
- springcloud vue 微服务分布式 activiti工作流 前后分离 集成代码生成器 shiro权限
1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...
- 完美解决linux下vim在终端不能用鼠标复制的问题
在vim 中输入 :set mouse=r 就行了,还不行的话 :set mouse=v
- uni-app自定义Modal弹窗组件|仿ios、微信弹窗效果
介绍 uniapp自定义弹窗组件uniPop,基于uni-app开发的自定义模态弹窗|msg信息框|alert对话框|confirm确认框|toast弱提示框 支持多种动画效果.多弹窗类型ios/an ...
- 【微信小程序】template模板使用详解
WXML提供模板(template),可以在模板中定义代码片段,然后在不同的地方调用. 模板的作用域: 模板拥有自己的作用域,只能使用 data 传入的数据以及模板定义文件中定义的 <wxs / ...
- linux权限管理-基本权限
目录 linux权限管理-基本权限 权限修改命令chmod linux权限管理-基本权限 权限 针对某些文件和进程,对用户进行限制 权限与用户的关系 rwx rwx r-x User Group Ot ...
- bayaim_当前国内外Hadoop的实际使用案例
当前国内外Hadoop的实际使用案例 说到Hadoop,很多朋友都想知道到底它是如何被应用的呢?通过下文,笔者就向大家介绍一下具体的情况. 1.Yahoo Yahoo是Hadoop的最大支持者,截至2 ...
- zabbix入门
第一章 监控知识基本概述 1.1 为什么要使用监控 1.对系统不间断实时监控2.实时反馈系统当前状态3.保证服务可靠性安全性4.保证业务持续稳定运行 1.2 如何进行监控,比如我们需要监控磁盘的使用率 ...