Ribbon全方位解析:构建弹性的Java微服务

第1章 引言

大家好,我是小黑,咱们今天聊聊Ribbon,这货是个客户端负载均衡工具,用在Spring Cloud里面能让咱们的服务调用更加灵活和健壮。负载均衡,听起来挺高大上的,其实就是把外界的请求平摊到多个服务器上,避免某个服务器压力太大,其他的却在那儿闲着。

Ribbon的牛处在于它是运行在客户端的,意味着决策权在咱们手里。咱们可以根据实际情况来选择要请求的服务实例,而且这一切都是自动化的,不需要手动干预。

想象一下,你的应用像是个饥饿的吃货,而Ribbon就是那个智能的美食地图,它知道哪家餐馆(服务实例)的排队人数少(负载低),哪家的口味好(服务质量高),然后给你推荐最合适的那一家。

Spring Cloud和Ribbon的整合,就像是把Ribbon这个美食地图整合进了咱们的手机(应用)里,随时随地都能打开来看,非常方便。

第2章 Ribbon的工作机制

Ribbon在工作时,主要分为几个步骤:服务发现、服务选择和负载均衡。

服务发现:这一步,Ribbon需要知道有哪些服务实例可用。在Spring Cloud中,咱们通常会用Eureka这样的服务注册中心,所有的服务实例都会注册到Eureka上。Ribbon会定期从Eureka获取服务列表,这样就知道了“今天有哪些餐馆开门”。

服务选择:拿到服务列表后,Ribbon就要根据自己的策略,从这些服务实例中选一个来发送请求。这就涉及到了负载均衡策略,比如轮询、随机等。

负载均衡:这一步是Ribbon的核心,负载均衡策略决定了请求会发送到哪个具体的实例。Ribbon内置了多种策略,咱们也可以自定义策略。

让咱们来看个简单的代码示例,展示如何使用Ribbon来获取服务实例并发送请求:

// 引入Ribbon的RestTemplate
@Autowired
private RestTemplate restTemplate;public String callService(String serviceName) {// 使用Ribbon的RestTemplate来发送请求// 这里的"serviceName"是你想要调用的服务的名字,比如"order-service"// Ribbon会自动根据负载均衡策略来选择一个实例,然后用这个URL去调用服务String result = restTemplate.getForObject("http://" + serviceName + "/endpoint", String.class);return result;
}

在这段代码中,RestTemplate是Spring提供的用于发送HTTP请求的工具类。当它结合Ribbon使用时,你只需要给出服务名,Ribbon就会自动选择一个服务实例,并将请求发送到这个实例上。这里的"/endpoint"是你想要调用的服务端点。

第3章 Ribbon的核心组件

IClientConfig

这个家伙是Ribbon的配置持有者。它负责存储客户端的配置信息,比如连接超时、读取超时等。这就像是给Ribbon设定了一些基本的行为规则,告诉它在不同情况下应该怎么做。

IRule

IRule是Ribbon中定义负载均衡策略的接口。它决定了Ribbon如何从众多服务实例中选择一个来发送请求。Ribbon内置了多种实现,比如轮询、随机、根据响应时间加权等。当然,咱们也可以自定义策略,让Ribbon更符合自己的需求。

IPing

IPing接口用来检查服务实例是否存活。它就像是Ribbon的雷达,不断扫描注册的服务实例,看看哪些是可用的。这样Ribbon在选择服务实例时,就可以避免那些已经宕机的,确保请求的成功率。

ServerList

ServerList负责提供服务实例的列表。它从服务发现组件(比如Eureka)获取所有可用的服务实例信息。Ribbon就是根据这个列表,结合IRule定义的负载均衡策略,来选择一个服务实例的。

ServerListFilter

这个组件可以对服务列表进行过滤。在某些情况下,咱们可能不希望所有的服务实例都参与到负载均衡中来。比如,咱们可能只想要那些特定区域的实例。ServerListFilter就可以帮咱们实现这一点,它会根据咱们定义的规则,从ServerList中筛选出符合条件的服务实例。

现在,咱们来看一个简单的代码示例,展示如何自定义一个IRule:

// 自定义一个负载均衡策略,总是选择第一个服务实例
public class MyRule implements IRule {private ILoadBalancer lb; // Ribbon的负载均衡器// 设置负载均衡器@Overridepublic void setLoadBalancer(ILoadBalancer lb) {this.lb = lb;}

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

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

相关文章

Netty连接通道中的Channel参数模型

ChannelOption(Channel中的连接参数) ChannelOption.SOBACKLOG ChannelOption.SO_BACKLOG对应的是tcp/ip协议listen函数中的backlog参数,服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接,多个客户端来的时候&…

传输层协议 ——— TCP协议

TCP协议 TCP协议谈谈可靠性为什么网络中会存在不可靠?TCP协议格式TCP如何将报头与有效载荷进行分离?序号与确认序号 确认应答机制(ACK)超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字…

使用ESP-01/ESP-01S接入Homekit远程控制电器

一、准备材料 ESP-01/ESP-01s 芯片 、 继电器模块 、 烧录器 二、下载固件和烧录软件 固件地址https://github.com/RavenSystem/esp-homekit-devices 烧录软件下载地址:https://drive.google.com/file/d/1_M4EzolaJWpYXts_FwUIqH8pZWqy-fye/view 三、烧录固件 …

【原创】Qt库open62541 MinGW编译

一、前言 为了统一公司的驱动层开发,准备采用OpcUA的方式转发底层数据,而服务器有Windows Server,也有CentOS,因此想用Qt开发一个基于MinGW的OpcUA Server,这样就能跨平台部署。这里记录一下,希望对你也有用…

神经网络 | 常见的激活函数

Hi,大家好,我是半亩花海。本文主要介绍神经网络中必要的激活函数的定义、分类、作用以及常见的激活函数的功能。 目录 一、激活函数定义 二、激活函数分类 三、常见的几种激活函数 1. Sigmoid 函数 (1)公式 (2&a…

问题:创业者在组建创业团队时,在个人特征和动机方面更应该注重创业者的( ) #知识分享#微信#媒体

问题:创业者在组建创业团队时,在个人特征和动机方面更应该注重创业者的( ) 参考答案如图所示

hook函数——useState

useState useState是React中的一个Hook函数,用于在函数组件中添加状态。基本使用语法如下: const [state, setState] useState(initialState) state:表示当前状态的值setState:更新状态的函数initialState:初始状态…

为什么是0.1uF电容?

旁路电容是电子设计中常用的电容器之一,主要用于过滤电源噪声和稳定电源电压。在实际应用中,0.1uF电容器是最常用的旁路电容值之一,那么为什么常用旁路电容是0.1uF而不是其他值?这个值又是怎么来的呢?本文将深入探讨这…

基于微信小程序的校园二手交易平台

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

UDP 用户数据报协议

目录 1 UDP 1.1 UDP 的主要特点 1.1.1 UDP 是面向报文的 1.1.2 UDP 通信和端口号的关系 1.2 UDP 的首部格式 1.2.1 UDP 基于端口的分用 1.3 UDP抓包 1 UDP UDP 只在 IP 的数据报服务之上增加了一些功能: 1.复用和分用 2.差错检测 1.1 UDP 的主要特点 1.无连…

PSM-Net根据Stereo图像生成depth图像

一、新建文件夹 在KITTI数据集下新建depth_0目录 二、激活anaconda环境 conda activate pt14py37三、修改submission.py文件 3.1 KITTI数据集路径 parser.add_argument(--datapath, default/home/njust/KITTI_DataSet/00/, helpselect model)3.2 深度图像输出路径 save…

Vision Pro新机测评!“这才是MR硬件该有的模样!”

期盼很久的Vision Pro终于到了,小编迫不及待地体验了一把,效果相当非常震撼,操作非常丝滑,画面非常清晰…来不急解释了,快和小编一起来看一下吧~ 新机一到公司,为解大家对Vision Pro 的“相思之苦”&#x…

一篇文章理解时间复杂度和空间复杂度

今天也是很开心的学到了数据结构,也是打算把我自己对知识的理解给写出来了。第一篇数据结构开始咯。开始之前我们先理解一个概念。 什么是算法效率? 算法效率是指算法执行的速度或完成任务所需的资源(如时间和空间)的度量。它通…

Pymysql之Cursor常用API

Cursor常用API 1、cursor.execute(query, argsNone):执行sql语句。 参数: query (str):sql语句。 args (tuple, list or dict):sql语句中如果有变量,或者格式化输出,会在这里填充数据。 Returns:返…

日志报错 git -c dif.mnemonicprefix=false -c core.guotepath=false 解决方法

前言: 在进行下面操作前,必须确保,你是否安装了Git。 查看Git 在命令行窗口中输入`git --version`: 如果这个命令成功显示了Git的版本信息,这表明Git已经被安装。 1. 使用Sourcetree SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端…

react将选中文本自动滑动到容器可视区域内

// 自动滚动到可视区域内useEffect(() > {const target ref;const wrapper wrapperRef?.current;if (target && wrapperRef) {const rect target.getBoundingClientRect();const wrapperRect wrapper.getBoundingClientRect();const isVisible rect.bottom &l…

NLP入门系列—词嵌入 Word embedding

NLP入门系列—词嵌入 Word embedding 2013年,Word2Vec横空出世,自然语言处理领域各项任务效果均得到极大提升。自从Word2Vec这个神奇的算法出世以后,导致了一波嵌入(Embedding)热,基于句子、文档表达的wor…

幻兽帕鲁服务器全自动部署教程,小白也能轻松上手

幻兽帕鲁太火了,官方palworld服务器不稳定?不如自建服务器,基于腾讯云幻兽帕鲁服务器成本32元全自动部署幻兽帕鲁服务器,超简单有手就行,全程自动化一键部署10秒钟即可搞定,无需玩家手动部署幻兽帕鲁游戏程…

深入探索:缓冲区溢出漏洞及其防范策略

在网络安全的广阔领域中,缓冲区溢出漏洞一直是一个重要的议题。这种漏洞,如果被恶意利用,可能会导致严重的安全问题,包括数据泄露、系统崩溃,甚至可能被攻击者利用来执行恶意代码。在本文中,我们将深入探讨…

【stm32】hal库学习笔记-ADC模数转换(超详细)

【stm32】hal库学习笔记-ADC模数转换(超详细) 本篇章介绍了ADC实现电压检测的三种方式 ADC原理及选型 ADC将连续的模拟电压信号转换为二进制的数字信号 选型参数 速度(采样频率) 功耗 精度 转换原理 ADC hal库驱动函数 普通…