首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Ribbon负载均衡的简单学习认识

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

作者头像
默 语
发布2024-11-20 09:23:42
发布2024-11-20 09:23:42
12400
代码可运行
举报
文章被收录于专栏:JAVAJAVA
运行总次数:0
代码可运行

学习目标

什么是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

代码语言:javascript
代码运行次数:0
运行
复制
@Bean
public RandomRule randomRule()

{return new RandomRule();}

局部

配置文件:

代码语言:javascript
代码运行次数:0
运行
复制
service-provider:
     ribbon :
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRulg

service-provider :调用服务的名称(我们去调用service-provider采用负载均衡策略) NFLoadBalancerRuleClassName: 使用的负载均衡规则,此处是随机;(包名+类名)

Ribbon点对点直连:

1.添加依赖

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

代码语言:javascript
代码运行次数:0
运行
复制
<!-- netflix ribbon依赖-->
<dependency>
<groupId>org.springframework.cloude/ groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

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

代码语言:javascript
代码运行次数:0
运行
复制
#负载均衡策略
#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服务;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Ribbon
  • Ribbon解决了什么问题
  • 目前业界主流的负载均衡方案可分成两类:
  • Ribbon负载均衡策略
  • 1.轮询策略(默认)
  • 2.权重轮询策略
  • 3.随机策略
  • 4.最少并发数策略
  • 5.重试策略
  • 6.可用性敏感策略
  • 7.区域敏感性策略
  • Ribbon入门案例
  • 全局
  • Ribbon点对点直连:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档