Ribbon负载均衡

1 什么是负载均衡

负载均衡(Load Balancing)是一种分发网络流量的技术,它可以将传入的请求分发到多个服务器或者计算资源上,以提高系统的性能、可靠性和可伸缩性。在负载均衡的环境下,多个服务器共同处理来自客户端的请求,而不是单个服务器处理所有请求。

负载均衡器通常位于客户端和服务器之间,它可以根据预定的算法(例如轮询、加权轮询、最小连接数等)将请求转发到多个服务器上,以确保这些服务器的负载相对均衡。这样做可以避免单个服务器过载,提高整个系统的性能和可用性。

2 Ribbon负载均衡

Ribbon 是一个负载均衡客户端库,它可以与其他负载均衡解决方案(如 Eureka、Consul、Zookeeper 等)结合使用,提供了在客户端实现负载均衡的功能。Ribbon 主要用于微服务架构中,能够将请求分发到多个服务实例上,以提高系统的性能、可靠性和可伸缩性。

下面是 Ribbon 负载均衡的一些关键特性:

  1. 客户端负载均衡:Ribbon 在客户端实现负载均衡,即每个服务消费者都包含一个 Ribbon 实例,用于决定向哪个服务实例发送请求。

  2. 多种负载均衡算法:Ribbon 提供了多种负载均衡算法,如轮询、加权轮询、随机等,可以根据实际需求选择合适的算法。

  3. 服务实例的健康检查:Ribbon 可以定期检查服务实例的健康状态,如果某个服务实例不可用,它将不再接收请求,直到恢复正常。

  4. 容错和重试机制:Ribbon 具有容错和重试机制,可以处理因网络故障或服务实例不可用导致的请求失败问题。

  5. 自定义配置:Ribbon 提供了丰富的配置选项,可以根据实际情况进行定制,包括超时设置、重试策略、连接池配置等。

  6. 与 Spring Cloud 整合:Ribbon 是 Spring Cloud 中的一部分,可以与其他组件(如 Eureka、Zookeeper、Consul 等)无缝集成,实现微服务架构中的负载均衡功能。

总的来说,Ribbon 是一个功能强大、灵活易用的负载均衡解决方案,适用于构建基于微服务架构的分布式系统。

3 Ribbon 负载均衡策略

  1. RoundRobinRule(轮询策略):默认的负载均衡策略,按顺序轮询访问可用的服务实例。

  2. RandomRule(随机策略):随机选择一个可用的服务实例进行访问。

  3. RetryRule(重试策略):在一定次数内进行重试,如果请求失败,则会尝试重新选择另一个服务实例。

  4. BestAvailableRule(最佳可用策略):选择最低并发的服务实例,排除故障的实例。

  5. AvailabilityFilteringRule(可用过滤策略):过滤掉一直连接失败的服务实例,并选择其中并发量较小的实例。

  6. WeightedResponseTimeRule(加权响应时间策略):根据历史响应时间和权重,动态计算权重,选择响应时间较快的服务实例。

  7. ZoneAvoidanceRule(区域感知策略):根据服务所在的区域进行负载均衡,避免跨区域访问,提高访问效率。

  8. CustomRule(自定义策略):允许开发人员自定义负载均衡策略,根据实际需求进行定制。

4.Ribbon负载均衡策略设置

4.1 全局设置

在启动类或配置类中注入负载均衡策略对象。所有服务请求均使用该策略。

java 复制代码
@Bean
public RandomRule randomRule() {
return new RandomRule();
}

4.2局部设置

修改配置文件指定服务的负载均衡策略。

java 复制代码
# 负载均衡策略
# service-provider 为调用的服务的名称
service-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

5.Ribbon 点对点直连

点对点直连是指绕过注册中心,直接连接服务提供者获取服务,一般在测试阶 段使用比较多。

5.1 添加依赖

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

java 复制代码
<!-- netflix ribbon 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

5.2 配置文件

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

java 复制代码
# 负载均衡策略
# service-provider 为调用的服务的名称
service-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    # 点对点直连模式,指定具体的 Provider 服务列表,多个用逗号隔开
    listOfServers: http://localhost:7070,http://localhost:7071
# 关闭 Eureka 实现 Ribbon 点对点直连
ribbon:
  eureka:
    enabled: false # false:关闭,true:开启

5.3 访问

关闭 Eureka 注册中心,服务提供者由于无法连接至注册中心所以会报连接异 常。但是服务是可以正常可消费的,所以目前使用的是点对点的方式来进行调用的。

相关推荐
weixin_462428474 分钟前
使用 Caffeine 缓存并在业务方法上通过注解实现每3到5秒更新缓存
java·缓存
程序媛小果5 分钟前
基于java+SpringBoot+Vue的桂林旅游景点导游平台设计与实现
java·vue.js·spring boot
骑鱼过海的猫1237 分钟前
【java】java通过s3访问ceph报错
java·ceph·iphone
杨充13 分钟前
13.观察者模式设计思想
java·redis·观察者模式
Lizhihao_15 分钟前
JAVA-队列
java·开发语言
喵叔哟24 分钟前
重构代码之移动字段
java·数据库·重构
喵叔哟24 分钟前
重构代码之取消临时字段
java·前端·重构
fa_lsyk27 分钟前
maven环境搭建
java·maven
Daniel 大东1 小时前
idea 解决缓存损坏问题
java·缓存·intellij-idea
wind瑞1 小时前
IntelliJ IDEA插件开发-代码补全插件入门开发
java·ide·intellij-idea