Ribbon基础知识以及相关配置

这篇具有很好参考价值的文章主要介绍了Ribbon基础知识以及相关配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Ribbon

一、Ribbon概述

1、什么是Ribbon

Ribbon 是 Netflix 发布的一个负载均衡器,有助于控制HTTP和TCP客户端行为在 SpringCloud 中,Nacos一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Nacos中读取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。

在SpringCloud中可以将注册中心和Ribbon配合使用,Ribbon自动的从注册中心中获取服务提供者的列表信息,并基于内置的负载均衡算法,请求服务

2、Ribbon 的主要作用

(1)服务调用

基于Ribbon实现服务调用, 是通过拉取到的所有服务列表组成(服务名-请求路径的)映射关系。借助RestTemplate 最终进行调用

(2)负载均衡

当有多个服务提供者时,Ribbon 可以根据负载均衡的算法自动的选择需要调用的服务地址

二、服务调用 Ribbon

1、负载均衡描述

(1)什么是负载均衡

在搭建网站时,如果单节点的 web服务性能和可靠性都无法达到要求;或者是在使用外网服务时,经常担心被人攻破,一不小心就会有打开外网端口的情况,通常这个时候加入负载均衡就能有效解决服务问题。
负载均衡是一种基础的网络服务,其原理是通过运行在前面的负载均衡服务,按照指定的负载均衡算法,将流量分配到后端服务集群上,从而为系统提供并行扩展的能力。
负载均衡的应用场景包括流量包、转发规则以及后端服务,由于该服务有内外网个例、健康检查等功能,能够有效提供系统的安全性和可用性。

(2)客户端负载均衡与服务端负载均衡

服务端负载均衡
先发送请求到负载均衡服务器或者软件,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端再进行负载均衡算法分配

客户端负载均衡
客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,这是客户端负载均衡;即在客户端就进行负载均衡算法分配

2、基于Ribbon实现负载均衡

(1)搭建多服务实例

通过idea再启动一个 shop-product 微服务,设置其端口为8082

分别启动两次服务器验证效果,并查看两个控制台发现已轮询的方式调用了商品服务

(2)负载均衡策略

Ribbon内置了多种负载均衡策略,内部负责复杂均衡的顶级接口为 com.netflix.loadbalancer.IRule ,实现方式如下

  • com.netflix.loadbalancer.RoundRobinRule :以轮询的方式进行负载均衡
  • com.netflix.loadbalancer.RandomRule :随机策略
  • com.netflix.loadbalancer.RetryRule :重试策略
  • com.netflix.loadbalancer.WeightedResponseTimeRule :权重策略。会计算每个服务的权重,越高的被调用的可能性越大
  • com.netflix.loadbalancer.BestAvailableRule :最佳策略。遍历所有的服务实例,过滤掉故障实例,并返回请求数最小的实例返回
  • com.netflix.loadbalancer.AvailabilityFilteringRule :可用过滤策略。过滤掉故障和请 求数超过阈值的服务实例,再从剩下的实力中轮询调用
  • **ZoneAvoidanceRule:**以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询
(3)自定义负载均衡策略
  • 方式1

定义一个新的IRule:(全局设置)

@Bean
public IRule randomRule(){
    return new RandomRule();
}
  • 方式2

在yml配置文件中配置:(局部设置)

#需要调用的微服务名称
service-product:
	ribbon:
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

三、Ribbon中负载均衡的源码解析

1、Ribbon中的关键组件

  • ServerList:可以响应客户端的特定服务的服务器列表。

  • ServerListFilter:可以动态获得的具有所需特征的候选服务器列表的过滤器。

  • ServerListUpdater:用于执行动态服务器列表更新。

  • Rule:负载均衡策略,用于确定从服务器列表返回哪个服务器。

  • Ping:客户端用于快速检查服务器当时是否处于活动状态。

  • LoadBalancer:负载均衡器,负责负载均衡调度的管理

2、自动装配

根据SpringBoot中的自动装配规则可以在 spring-cloud-netflix-ribbon-2.1.0.RELEASE.jar 中可以找到 spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.springframew ork.cloud.netflix.ribbon.RibbonAutoConfiguration

3、原理流程

源码跟踪:

(1)LoadBalancerInterceptor

可以看到这里的intercept方法,拦截了用户的HttpRequest请求,然后做了几件事:

  • request.getURI():获取请求uri
  • originalUri.getHost():获取uri路径的主机名,其实就是服务id,service-product
  • this.loadBalancer.execute():处理服务id,和用户请求。

这里的this.loadBalancer是LoadBalancerClient类型

(2)LoadBalancerClient

继续跟入execute方法:

  • getLoadBalancer(serviceId):根据服务id获取ILoadBalancer,而ILoadBalancer会拿着服务id去nacos中获取服务列表并保存起来

  • getServer(loadBalancer):利用内置的负载均衡算法,从服务列表中选择一个

基本流程如下:文章来源地址https://www.toymoban.com/news/detail-690877.html

  • 拦截我们的RestTemplate请求http://service-product/product/1
  • RibbonLoadBalancerClient会从请求url中获取服务名称,也就是service-product
  • DynamicServerListLoadBalancer根据service-product到nacos拉取服务列表
  • nacos返回列表,localhost:8081、localhost:8082
  • IRule利用内置负载均衡规则,从列表中选择一个,例如localhost:8081
  • RibbonLoadBalancerClient修改请求地址,用localhost:8081替代service-product,得到http://localhost:8081/user/1,发起真实请求

到了这里,关于Ribbon基础知识以及相关配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 密码学相关基础知识

    明文:没有经过加密,任何人都能看得懂的文字 密文:经过加密后的文字 密钥:明文与密文转换的参数 是现代密码学和古典密码学的重要区别 现代密码原则:密码系统的安全性不依赖于算法的保密而依赖于密钥的安全 古典密码原则:密码系统的安全性依赖于算法的保密和

    2023年04月27日
    浏览(40)
  • 注册中心Eureka和Nacos,以及负载均衡Ribbon

    微服务,就是把服务拆分成为若干个服务,降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联

    2024年02月12日
    浏览(45)
  • 信号完整性相关基础知识

    一、GHz传输链路信号损耗的特征,高频和低频分量信号损耗问题 • 1. 信号沿 FR4 传播,两种有功损耗 : 导体损耗和介质损耗两种损耗的高频衰减大于低频衰减。当信号传播 4in 长时, 8GHz 以上高频分量的功率衰减量大于 50 %,而对低频分量的影响却小得多。 • 2.FR4 板上 4i

    2024年02月08日
    浏览(40)
  • 交易所行情基础相关知识

    目录 一、行情基本概念 二、简单交易模型 三、行情系统结构 四、各种行情协议 1.FIX  2.STEP 3.FAST 4.Binary  五、集合竞价和连续竞价 1.集合竞价 2.连续竞价 六、上交所LDDS和深交所Binary行情对比 行情是描述市场繁荣状态的数据,比较笼统,例如买卖交易量。准确一些的描述是

    2024年02月12日
    浏览(54)
  • Go web 基础相关知识

    浏览器本身是一个客户端,当你输入 URL 的时候,首先浏览器会去请求 DNS服务器 ,通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器后,要求建立 TCP连接 ,等浏览器发送完 HTTP Request包 后,服务器接收到请求包之后才开始处理请求包,服务器调用自身服务

    2024年04月17日
    浏览(32)
  • 单片机面试相关的基础知识

    在嵌入式系统领域中,单片机工程师是非常重要的角色。他们负责设计、开发和维护各种嵌入式设备,其中单片机是最常见的一种。在单片机工程师的面试过程中,一些基础知识是必不可少的。本文将介绍一些常见的单片机面试相关基础知识。 什么是单片机? 单片机是一种

    2024年03月08日
    浏览(68)
  • 坐标系基础相关知识:右手定则

    如果坐标系的原点在右手掌,拇指向上延伸的方向对应于某个坐标轴的方向,则可以利用常规的右手定则确定其他坐标轴的方向。例如,在下图中,假设拇指指向Z轴的正方向,食指伸直的方向对应于X轴的正方向,中指向外延伸的方向则为Y轴的正方向。 当拇指伸直并且与给定

    2024年02月16日
    浏览(56)
  • YOLOv5基础知识入门(3)— 目标检测相关知识点

      前言 : Hello大家好,我是小哥谈。 YOLO算法发展历程和YOLOv5核心基础知识学习完成之后,接下来我们就需要学习目标检测相关知识了。为了让大家后面可以顺利地用YOLOv5进行目标检测实战,本节课就带领大家学习一下目标检测的基础知识点,希望大家学习之后有所收获!

    2024年02月13日
    浏览(39)
  • Springcloud基础(4)-Ribbon负载均衡

    Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具。Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配

    2024年02月16日
    浏览(37)
  • 【Java基础】Java容器相关知识小结

    目录 0. 前言 1. Collection接口 1.1. List接口 1.1.1. ArrayList 1.1.2. LinkedList 1.1.3. Vector 1.1.4. Stack 1.2. Set接口 1.2.1. HashSet 1.2.2. LinkedHashSet 1.2.3. TreeSet 1.3. Queue接口 1.3.1. PriorityQueue 1.3.2. LinkedList 2. Map接口 2.1. HashMap 2.2. TreeMap 2.3. LinkedHashMap 3.常见用法——增/删/改/查/排序/容量 后记 参考文章

    2024年02月05日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包