spring cloud之负载均衡

负载均衡客户端组件Ribbon

简介

- 官网:https://github.com/Netflix/ribbon
- spring cloud ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过spring cloud的封装,可以轻松面向服务的REST模板请求转换成客户端负载均衡的服务调用

Ribbon组件实现负载均衡原理

- 根据调用服务的服务ID(spring.application.name指定的服务名)去注册中心获取对应的服务列表,并将服务列表拉取到本地进行缓存,然后在本地通过默认的轮询的负载均衡策略在现有列表中选择一个可用节点提供服务。- Ribbon是客户端的负载均衡

Ribbon负载均衡策略算法

- RoundRobinRule   轮询策略按顺序循环选择server
- RandomRule    随机策略    随机选择server
- AvailabilityFilteringRule   可用过滤策略会先过滤由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
- WeightedResponseTimeRule  响应时间加权策略根据平均响应的时间计算所有服务的权重,响应时间越快,服务权重越大,被选中的概率越高。刚启动时,如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够会切换到WeightedResponseTimeRule策略
- RetryRule    重试策略先按照RoundRobinRule策略获取服务,如果获取失败则在指定的时间内进行重试,获取可用的服务
- BestAvailableRule   最低并发策略会先过滤由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
......

图片待补充

Ribbon负载均衡源码分析路径

1.查看loadBalancerClient.choose("ORDER")源码。顶层接口ServiceInstanceChooser#ServiceInstance choose(String serviceId)
2.RibbonLoadBalancerClient实现接口顶层接口ServiceInstanceChooser,重写ServiceInstance choose(String serviceId)方法
3.调用RibbonLoadBalancerClient中的方法ServiceInstance choose(String serviceId, Object hint)- Server server = getServer(getLoadBalancer(serviceId), hint);- Server getServer(ILoadBalancer loadBalancer, Object hint)- loadBalancer.chooseServer(hint != null ? hint : "default")
4.ZoneAwareLoadBalancer#Server chooseServer(Object key)- ZoneAwareLoadBalancer继承BaseLoadBalancer
5.BaseLoadBalancer#Server chooseServer(Object key)- private final static IRule DEFAULT_RULE = new RoundRobinRule()- protected IRule rule = DEFAULT_RULE;
6.最后根据IRule选择负载均衡算法(由BaseLoadBalancer类成员rule变量定义可知,默认为轮询)

修改Ribbon负载均衡策略

# 修改用户服务调用订单服务的Ribbon负载均衡策略(默认是轮询)   ORDER:服务名
ORDER.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

Ribbon已停止维护

ribbon-core、ribbon-loadbalancer依然在大规模生产实践中使用,如果需要实现服务间通信负载均衡依然可以用Ribbon

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

03.webpack中hash,chunkhash和contenthash 的区别

hash、contenthash 和 chunkhash 是通过散列函数处理之后,生成的一串字符,可用于区分文件。 作用:善用文件的哈希值,解决浏览器缓存导致的资源未及时更新的问题 1.文件名不带哈希值 const path require(path) const HtmlWebpac…

SpringBoot 2.x 实战仿B站高性能后端项目

SpringBoot 2.x 实战仿B站高性能后端项目 下栽の地止:请看文章末尾 通常SpringBoot新建项目,默认是集成了Maven,然后所有内容都在一个主模块中。 如果项目架构稍微复杂一点,就需要用到Maven多模块。 本文简单概述一下&#xff0c…

通过maven命令手动上传jar私服Nexus

Nexus3在界面上传组件时报: Ext.JSON.decode(): Youre trying to decode an invalid JSON String: 查找了很多资料,都没有解决。有哪位大佬知道的评论告诉一下,万分感谢。 于是换成maven命令上传: mvn deploy:deploy-file -Dgr…

02.webpack中多文件打包

1.module,chunk,bundle的区别 moudle - 各个源码文件,webpack中一切皆是模块chunk - 多模块合并成的,如entry, import(), splitChunkbundle - 最终的输出文件 2.多文件打包配置 2.1 webpack.common.js const path require(path) const HtmlWebpackPl…

【C++】类和对象(5)--运算符重载

目录 一 概念 二 运算符重载的实现 三 关于时间的所有运算符重载 四 默认赋值运算符 五 const取地址操作符重载 一 概念 C为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数…

一次读懂究竟什么是设计思维优漫教育

设计的精髓在于创造。尽管计算机在设计,领域被广泛使用,丰富了设计的表达方法,为设计的创造性活动提供了强有力的支持,但归根结底,它只是一种将思维结果外化的手段和工具,不能取代人类的设计思维本身。设计…

UE5 C++报错:is not currently enabled for Live Coding

解决办法: 再次打开项目,以此法打开:

ToolJet:开源低代码框架,轻松构建复杂可响应界面 | 开源日报 No.78

ToolJet/ToolJet Stars: 25.0k License: AGPL-3.0 ToolJet 是一个开源的低代码框架,可以通过最小化工程投入来构建和部署内部工具。ToolJet 的拖放式前端构建器允许您在几分钟内创建复杂、响应式的前端界面。此外,您还可以集成各种数据源,包…

【Linux网络编程】高级I/O

目录 五种I/O模型 阻塞和非阻塞 非阻塞I/O I/O多路复用之Select、Poll、与Epoll 本文目的是深入浅出理解高级I/O相关的知识,结尾附上代码加深理解相关知识。 五种I/O模型 1.阻塞I/O:在内核将数据准备好之前,系统调用会一直等待。所有的套…

设计模式(5)-使用设计模式实现简易版springIoc

自定义简易版springIoc 1 spring使用回顾 自定义spring框架前,先回顾一下spring框架的使用,从而分析spring的核心,并对核心功能进行模拟。 数据访问层。定义UserDao接口及其子实现类 public interface UserDao {public void add(); }public…

mysql8创建用户并授予所有库的所有权限

要在 MySQL 8 中创建用户并授予所有库的所有权限,您可以按照以下步骤进行操作。请注意,为了执行这些操作,您需要具有足够权限的 MySQL 用户帐户。 登录到 MySQL 服务器: 使用具有足够权限的 MySQL 用户名和密码登录到 MySQL 服务器。您可以使…

CGO集成wireshark4.2.0动态链接库新错误col_set_cls_time: assertion “not reached“ failed

CGO集成wireshark4.2.0动态链接库新错误col_set_cls_time: assertion "not reached" failed 1.版本环境2.问题3.解决过程 1.版本环境 wireshark4.2.0golang1.21mac m1 和 ubuntu22 2.问题 在cgo调用wireshark进行协议解析时候遇到错误: ** (PID:73155…

django建站过程(5)添加导入导出功能

django建站过程(5)添加导入导出功能 后端添加导入导出功能django-import-export参考官方:安装命令settings.py添加到INSTALLED_APPS创建一个resource.py**配置Admin**定义导入导出的字段其他 后端添加导入导出功能 django-import-export 参…

基于静电放电算法优化概率神经网络PNN的分类预测 - 附代码

基于静电放电算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于静电放电算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于静电放电优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

Vue中给对象添加新属性时,界面不刷新怎么办?

文章目录 前言直接添加属性的问题原理分析解决方案总结后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:vue.js 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现…

微信个人号api

简要描述: 登录E云平台 请求URL: http://域名地址/member/login域名地址开发者账号密码:后台系统自助开通 请求方式: POST 请求头Headers: Content-Type:application/json 参数: 参数名必选类型说…

​如何使用ArcGIS Pro制作渐变河流效果

对于面要素的河流水系,制作渐变效果方法比较简单,如果是线要素的河流有办法制作渐变效果吗,答案是肯定的,这里为大家介绍一下制作方法,希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的水系数…

quarkus的一些注解1

path 用于指定一个类或者方法的URL路径前缀。 Inject 将一个依赖注入到一个类或方法中 Get 用于指定一个处理HTTP GET请求 Produce 注解用于指定一个方法返回的内容类型。例如,Produces(MediaType.TEXT_PLAIN) 表示该方法返回一个纯文本类型的内容 QuarkusIn…

利用WebSocket +MQ发送紧急订单消息,并在客户端收到消息的用户的页面自动刷新列表

背景:在原有通知公告的基础上,把通知公共的推送服务修改为其他业务收到紧急订单发送公告到消息队列MQ,然后在js中创建一个socket去监听公告,收到公告后刷新所有在订单页面的用户的页面列表(重点就是用户在收到紧急订单…

《网络协议》07. 其他协议

title: 《网络协议》07. 其他协议 date: 2022-10-07 18:24:02 updated: 2023-11-15 08:00:52 categories: 学习记录:网络协议 excerpt: IPv6、WebSocket、WebService(SOAP,WSDL)、HTTPDNS、FTP、邮件(SMTP,…