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 全局设置

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

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


4.2局部设置


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

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


5.Ribbon 点对点直连


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

5.1 添加依赖

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

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


5.2 配置文件

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

# 负载均衡策略
# 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 注册中心,服务提供者由于无法连接至注册中心所以会报连接异 常。但是服务是可以正常可消费的,所以目前使用的是点对点的方式来进行调用的。

 

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-14 10:00:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-14 10:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-14 10:00:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-14 10:00:02       20 阅读

热门阅读

  1. 3、ETAS INCA标定系统建立过程

    2024-03-14 10:00:02       24 阅读
  2. MCU简单的前后台软件架构

    2024-03-14 10:00:02       22 阅读
  3. 蓝桥杯 递增三元组

    2024-03-14 10:00:02       20 阅读
  4. Elastic boosting的使用

    2024-03-14 10:00:02       19 阅读
  5. vue element input让浏览器不保存密码

    2024-03-14 10:00:02       19 阅读
  6. Redis实现全局唯一id

    2024-03-14 10:00:02       23 阅读
  7. Redisson

    2024-03-14 10:00:02       19 阅读
  8. Http 请求状态码

    2024-03-14 10:00:02       18 阅读
  9. 前端框架的发展史

    2024-03-14 10:00:02       19 阅读
  10. git命令行提交——github

    2024-03-14 10:00:02       23 阅读
  11. react diff 原理

    2024-03-14 10:00:02       21 阅读