快速理解微服务中Ribbon的概念
一.基本概念
1.在微服务架构中,Ribbon 是一个客户端负载均衡器,用于控制服务间的通信方式。
2.Ribbon 是一个开源的库,最早由 Netflix 开发,用于实现客户端负载均衡。
3.Ribbon 主要解决的是在微服务架构中,多个服务实例之间进行通信时如何选择合适的服务实例的问题。
但是 Ribbon 已经停止了主动维护。
Netflix 于 2018 年宣布 Ribbon 将不再作为新功能的开发重点,并在后续的版本中减少了对 Ribbon 的支持,官方表示,Ribbon 已经进入维护模式,意味着不会有新的功能更新和重大改动,但会继续提供 bug 修复和安全更新。
二.Ribbon的原理
使用方法:
就是在RestTemplate上添加@LoadBalanced注解,Ribbon就生效了,当在使用RestTemplate进行远程请求的时候,就会使用负载均衡策略。
基本原理:
1.通过拦截器对被注解@LoadBalanced修饰的RestTemplate进行拦截(通过AOP扫描到这个注解注释的RestTemplate,然后获取到这个方法的参数,根据获取到的参数就可以做2、3步的操作);
2.将RestTemplate中调用的服务名,解析成具体的IP地址(这一步需要去注册表查询),由于一个服务名会对应多个地址,那么在选择具体服务地址的时候,需要做负载均衡(比如一个Server有IP1和IP2地址的时候,Ribbon会根据不同的负载均衡算法选出合适的IP地址来进行调用)。
3.确定目标服务的IP和PORT后,通过Httpclient进行http的调用。
三.Ribbon的负载均衡算法
Ribbon的核心组件IRule自带的七种负载均衡算法:
1.轮询:RoundRobinRule;
2.随机:RandomRule;
3.重试:RetryRule(先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务);
4.RoundRobinRule的扩展:WeightedResponseTimeRule(响应速度越快的实例选择权重越多大,越容易被选择);
5.会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务: BestAvailableRule
6.先过滤掉故障实例,再选择并发较小的实例:AvailabilityFilteringRule;
7.复合判断Server所在区域的性能和Server的可用性选择服务器:ZoneAvoidanceRule(默认规则)。
自定义算法步骤(以随机算法):
1.定义配置类:
@Configuration
public class MyRibbonRuleConfig {@Bean@LoadBalancedRestTemplate restTemplate() {return new RestTemplate();}@Beanpublic IRule MyRibbonRuleConfig (){// 定义随机负载均衡算法return new RandomRule();}
}
2.主启动类上加上@RibbonClient()注解
@SpringBootApplication
@RibbonClient(name = "ORDER-SERVICE",configuration = MyRibbonRuleConfig.class)
public class OrderMain {public static void main(String[] args) {SpringApplication.run(OrderMain80.class, args);}
}
四.推荐的替代方案
对于新的微服务项目,Spring Cloud 团队推荐使用 Spring Cloud LoadBalancer 来替代 Ribbon,Spring Cloud LoadBalancer 提供了比 Ribbon 更加现代化的负载均衡支持,并与 Spring Cloud 生态系统更紧密集成,如果项目中仍然使用 Ribbon,并且无法立即迁移,可以继续使用,但要注意它不再接收新的功能和改进,且可能会逐步淘汰。
1.Spring Cloud LoadBalancer 提供了不同的负载均衡策略,例如:
(1)RoundRobinLoadBalancer:轮询负载均衡;
(2)RandomLoadBalancer:随机负载均衡;
(3)WeightedResponseTimeLoadBalancer:基于响应时间加权的负载均衡策略。
2.配置负载均衡策略:
@Configuration
public class LoadBalancerConfig {@Beanpublic LoadBalancer loadBalancer() {// 可以根据需要选择不同的负载均衡策略return new RoundRobinLoadBalancer(); // 默认使用 RoundRobin 策略}
}
也可以通过 Spring 配置文件来选择不同的负载均衡策略:
spring:cloud:loadbalancer:ribbon:enabled: false # 禁用 Ribbon(如果你之前在使用 Ribbon)
启用轮训策略:
spring:cloud:loadbalancer:round-robin:enabled: true # 启用轮询策略
总结:
1.SpringCloud LoadBalancer 是 Spring Cloud 推荐的负载均衡解决方案,逐渐替代了 Ribbon;
2.它更轻量并且与现代的服务发现和微服务架构更加兼容;
3.配置 RestTemplate 或直接使用 LoadBalancerClient,你可以在代码中实现服务调用时的负载均衡。
相关文章:
快速理解微服务中Ribbon的概念
一.基本概念 1.在微服务架构中,Ribbon 是一个客户端负载均衡器,用于控制服务间的通信方式。 2.Ribbon 是一个开源的库,最早由 Netflix 开发,用于实现客户端负载均衡。 3.Ribbon 主要解决的是在微服务架构中,多个服务…...
K8S简介、使用教程
以下是关于 Kubernetes(通常缩写为 K8S)的简介和使用教程: 一、Kubernetes 简介 定义与作用 Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌开发,后捐赠给云原生计算基…...
极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【四】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
麦肯锡报告 | 科技落地的真谛:超越技术本身的价值创造
科技创新正在以惊人的速度改变企业运作和客户体验,但实现其潜力的关键在于正确的策略、流程、文化和人才。麦肯锡强调了一个理念:Never just tech(不仅仅是技术)。这表明,成功的数字化转型不仅依赖于技术,还…...
彻底解决 macOS 下Matplotlib 中文显示乱码问题
彻底解决 macOS 下Matplotlib 中文显示乱码问题 在使用 Python 的 Matplotlib 库进行数据可视化时,中文字符的显示常常会出现乱码问题,尤其在 macOS 系统上。在网上找了一大堆方法,花了很久,发现不是要安装各种字体就是要改配置&…...
STM32-- keil 的option for target使用
keil版本号 1.device界面 如:stm32f103c8t6的工程,可以直接在device这里修改成stm32f103vct6,虽然引脚不一样,但是很多一样的地方,可以直接使用,有些不修改也可以下载程序。 2.target xtal的设置不起作用了…...
【MCU】微控制器的编程技术:ISP 与 IAP
在嵌入式领域中,将程序下载到内置 Flash 有两种技术 ISP (In-system programming) ISP 即在系统编程,是指一些可编程逻辑器件、微控制器、芯片组和其他嵌入式设备在安装到完整嵌入式系统后能够进行编程,而不需要在将芯片安装到系统中之前对…...
C#基础题总结
16.一张单据上有一个5位数的号码为6**42,其中百位数和千位数已模糊不清,但知道该数能被 57 和 67 除尽。设计一个算法,找出该单据所有可能的号码。 17.编程序求2~10000以内的完全数。一个数的因子(除了这个数本身&…...
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大家好,我是锋哥。今天分享关于【Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?】面试题。希望对大家有帮助; Elasticsearch中的节…...
《参与中型项目,领略 Spring 魅力》
一、Spring 在中型项目中的魅力展现 Spring 框架以其强大的功能和灵活性,在中型项目中发挥着重要作用。它不仅简化了开发过程,还提高了代码的可维护性和可扩展性。 Spring 在中型项目中魅力十足,其优势主要体现在以下几个方面。 首先&#…...
计算机网络-GRE(通用路由封装协议)简介
昨天我们学习了VPN的基本概念,虚拟专用网络在当前企业总部与分支间广泛使用。常用的划分方法为基于协议层次有GRE VPN、IPSec VPN、L2TP VPN、PPTP VPN、SSL VPN等。其实我有考虑该怎么讲,因为在IP阶段好像虚拟专用网络讲得不深,在IE的阶段会…...
开源电话机器人产品的优点是什么?
开源电话机器人产品的优点是什么? 作者:开源呼叫中心系统 FreeIPCC,Github地址:https://github.com/lihaiya/freeipcc 开源电话机器人产品作为人工智能技术的一种应用,近年来在电销、客户服务等多个领域展现出了显著的…...
Spring Boot 集成 Knife4j 的 Swagger 文档
在开发微服务应用时,API 文档的生成和维护是非常重要的一环。Swagger 是一个非常流行的 API 文档工具,可以帮助我们自动生成 RESTful API 的文档,并提供了一个友好的界面供开发者测试 API。本文将介绍如何在 Spring Boot 项目中集成 Knife4j …...
极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【一】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
C# 在Word文档模板中,按照占位符插入文字或图片
1,引入包:DocX 2,代码如下 public class CC{public static void Ma22in(){// 示例:加载现有模板并替换占位符string templatePath "报告模板.docx"; // 模板文件路径string outputPath "Output.docx"; // 输出文…...
在使用PCA算法进行数据压缩降维时,如何确定最佳维度是一个关键问题?
一、PCA算法的基本原理 PCA算法的核心思想是通过正交变换,将一组可能相关的变量转换成一组线性不相关的变量,称为主成分。这组主成分能够以最小的信息损失来尽可能多地保留原始数据集的变异性。具体来说,PCA算法包括以下几个步骤:…...
深度学习3
五、自动微分 1、基础概念 模块 autograd 负责自动计算张量操作的梯度,具有自动求导功能;autograd 创建一个动态计算图来跟踪张量的操作,每个张量是计算图中的一个节点,节点之间的操作构成图的边。 属性 requires_grad 决定…...
Qt5.14.2的安装与环境变量及一些依赖库的配置
目录 1.Qt5.14.2安装 2.Qt环境变量及一些依赖库的配置 1.Qt5.14.2安装 QT从入门到入土(一)——Qt5.14.2安装教程和VS2019环境配置 - 唯有自己强大 - 博客园 2.Qt环境变量及一些依赖库的配置 假设QT安装目录为: D:\Qt\Qt5.14.2 将目录: D:\Qt\Qt5.14.…...
PYNQ 框架 - 时钟系统 + pl_clk 时钟输出不准确问题
目录 1. 简介 2. PS 时钟计算 2.1 计算框架 2.2 KV260 的参考时钟 2.3 PL_CLK 设置 3. 测试 3.1 Block design 3.2 引脚绑定 3.3 使用 AD2 测量 3.4 调整分频 4. PYNQ 时钟驱动 4.1 源码解析 4.2 查看 PL_CLK 4.3 配置 PL_CLK 5. 总结 1. 简介 ZYNQ MPSoC 具有…...
CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标
注:本文为 “CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标” 几篇相关文章合辑。 文章中部分超链接、图片异常受引用之前的原文所限。 相机自动对焦原理 TriumphRay 于 2020-01-16 18:59:41 发布 凸透镜成像原理 这一部分大家中学应该就学过…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
