Ribbon负载均衡的简单学习认识

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: Ribbon负载均衡的简单学习认识

学习目标:


什么是Ribbon


Ribbon是一个基于HTTP和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。


它不像Spring Cloud 服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个Spring Cloud微服务中。包括eign提供的声明式服务调用也是基于该 Ribbon实现的。


Ribbon 默认提供很多种负载均衡算法,例如轮询、随机等等。甚至包含自定义的负载均衡算法。


Ribbon解决了什么问题


Ribbon提供了—套微服务的负载均衡解决方案。(Nignx 同理)


目前业界主流的负载均衡方案可分成两类:


集中式负或均衡T(服务器负载均衡),即在consumer和provider之间使用独立的负载均衡设施(可以是硬件,如F5,也可以是软件,如 nginx),由该设施负麦把访问请求通过某种策略转发至provider;


进程内负载均衡(客户端负载均衡),将负载均衡逻辑集成到consumer, consumer 从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的provider。Ribbon属于后者,它只是一个类库,集成于consumer进程,consumer通过它来获取 provider的地址。


集中式负或均衡

进程内负载均衡



Ribbon负载均衡策略


1.轮询策略(默认)

策略对应类名:RoundRobinRule


实现原理:策略表示每次都顺序取下一个provider,比如一共有5个provider,第1次取第1个,第2次取第2个,第3次取第3个,以此类推。


2.权重轮询策略

策略对应类名:weightedResponseTimeRule


实现原理:根据每个provider的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性越低。


原理:一开始为轮询策略,并开启一个计时器,每30秒收集一次每个provider的平均响应时间,当信息足够时,给每个provider附上一个权重,并按权重随机选择provider,高权越重的provider 会被高概率选中。


3.随机策略

策略对应类名:RandomRule

实现原理:从provider列表中随机选择一个。


4.最少并发数策略

策略对应类名:BestAvailableRule

实现原理:选择正在请求中的并发数最小的provider,除非这个provider在熔断中。(谁闲给谁)


5.重试策略

策略对应类名:RetryRule

实现原理:其实就是轮询策略的增强版,轮询策略服务不可用时不做处理,重试策略服务不可用时会重新尝试集群中的其他节点。(重试轮训)


6.可用性敏感策略

策略对应类名:AvailabilityFilteringRule


实现原理:过滤性能差的 provider


第一种:过滤掉在Eureka中处于—直连接失败的 provider.·

第二种:过滤掉高并发(繁忙)的 provider。


7.区域敏感性策略

策略对应类名:ZoneAvoidanceRule

实现原理:以一个区域为单位考察可用性,对于不可用的区域整个丢弃,从剩下区域中选可用的provider。

如果这个ip区域内有一个或多个实例不可达或响应变慢,都会降低该ip区域内其他ip被选中的权重。(区域性考察)


Ribbon入门案例


Ribbon 中对于集群的服务采用负载均衡策略默认的是轮询;

Eureka 默认是轮询策略:


全局


随机 randomRule

@Bean
public RandomRule randomRule()
{return new RandomRule();}


局部


配置文件:


service-provider:
     ribbon :
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRulg


service-provider :调用服务的名称(我们去调用service-provider采用负载均衡策略)

NFLoadBalancerRuleClassName: 使用的负载均衡规则,此处是随机;(包名+类名)


Ribbon点对点直连:


1.添加依赖


在pom文件中引入Ribbon,需要注意的是如果pom中有Eureka的依赖,则需要去除Eureka的依赖。

<!-- netflix ribbon依赖-->
<dependency>
<groupId>org.springframework.cloude/ groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>


2.配置文件

配置文件中关闭Eureka,添加直连的服务地址。如果不设置负载均衡策略默认使用轮询策略。


#负载均衡策略
#service-provider为调用的服务的名称
 service-provider :
     ribbon :
NFLoadBalancerRuleClassName: com.netflix.loadbalancer. RandomRule
     #指定具体的Provider服务列表,多个用逗号隔开(直连的服务有哪些)
    listofServers: http://localhost:7870, http://localhost:7071 
#关闭Eureka实现Ribbon点对点直连 不关闭无法实现
   ribbon:
   eureka:
      enabled:false #false 关闭 true 开启


随机访问70,71服务;

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3月前
|
负载均衡 算法 架构师
Ribbon负载均衡
上一节就已经实现的负载均衡笔者并未深入探讨,本节通过分析负载均衡算法、Ribbon实现负载均衡的底层原理和实现过程,让大家对负载均衡有了一个大体认识,同时针对Ribbon自定义负载均衡策略,饥饿加载让大家对于Ribbon的了解又多一些。Ribbon实现的负载均衡只是方案之一,我们可以尽量多了解但不要局限于此。
|
15天前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
75 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
13天前
|
缓存 负载均衡 算法
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
Nginx 是一款高性能的 HTTP 和反向代理服务器,也是一个通用的 TCP/UDP 代理服务器,以及一个邮件代理服务器和通用的 HTTP 缓存服务器。
19 0
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
|
24天前
|
Kubernetes 负载均衡 网络协议
k8s学习--负载均衡器matelLB的详细解释与安装
k8s学习--负载均衡器matelLB的详细解释与安装
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
3月前
|
存储 设计模式 缓存
OpenFeign集成Ribbon负载均衡-过滤和选择服务核心实现
该文章主要介绍了如何在OpenFeign中集成Ribbon以实现负载均衡,并详细分析了Ribbon中服务选择和服务过滤的核心实现过程。文章还涉及了Ribbon中负载均衡器(ILoadBalancer)和负载均衡策略(IRule)的初始化方式。
OpenFeign集成Ribbon负载均衡-过滤和选择服务核心实现
|
3月前
|
缓存 负载均衡 Java
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
文章标题为“OpenFeign的Ribbon负载均衡详解”,是继OpenFeign十大可扩展组件讨论之后,深入探讨了Ribbon如何为OpenFeign提供负载均衡能力的详解。
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
|
2月前
|
负载均衡 Java 开发者
Ribbon框架实现客户端负载均衡的方法与技巧
Ribbon框架为微服务架构中的客户端负载均衡提供了强大的支持。通过简单的配置和集成,开发者可以轻松地在应用中实现服务的发现、选择和负载均衡。适当地使用Ribbon,配合其他Spring Cloud组件,可以有效提升微服务架构的可用性和性能。
28 0
|
4月前
|
负载均衡 算法 网络协议
Ribbon 负载均衡源码解读
Ribbon 负载均衡源码解读
57 15
Ribbon 负载均衡源码解读
|
4月前
|
负载均衡 Java API
Feign 进行rpc 调用时使用ribbon负载均衡源码解析
Feign 进行rpc 调用时使用ribbon负载均衡源码解析
70 11