微服务-Ribbon(负载均衡)

本文介绍了Ribbon负载均衡在处理多个服务时的策略,如轮询、权重响应时间、区域避免等。还讲解了如何自定义规则、使用饥饿加载加速首次访问,以及配置方式的优缺点。

负载均衡的面对多个相同的服务的时候,我们选择一定的策略去选择一个服务进行

负载均衡流程

 Ribbon结构组成

 负载均衡策略

  • RoundRobinRule:简单的轮询服务列表来选择服务器
  • AvailabilityFilteringRule

对两种情况服务器进行忽略:

1.在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路状态”,短路状态将持续30秒,如果再次连接失败,短路持续时间将会几何级的增加

2.并发数过高的服务器,如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的

<clientName><clientConfigNameSpace>.ActiveConnectionsLimit属性进行配置。

  • WeightedResponseTimeRule:为每一个服务器赋予一个权重值,服务器响应时间越长,这个服务器的权重就越小,权重值越大,被访问的概率也就越大
  • ZoneAvoidanceRule(默认的策略):以区域可用的服务器为基础进行服务器的选择,使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等,而后对Zone内的多个服务做轮询
  • BestAvailableRule:忽略那些短路的服务器,并选择并发数较低的服务器
  • RandomRule:随机选择一个可用的服务器
  • RetryRule:重试机制的选择逻辑

修改负载均衡规则

1.代码方式:在A服务的启动类中定义一个新的IRule

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

2.配置文件方式:在A服务中的application.yml文件中,添加新的配置也可以进行修改

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则

饥饿加载

       Ribbon默认是采用的是懒加载,即第一次访问时才会创建LoadBalanceClient,请求时间较长,而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,我们可以通过下面配置开启饥饿加载

ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients: # 指定饥饿加载的服务名称
       -***,
       -***

总结

1.Ribbon负载均衡规则

  • 规则接口是IRule
  • 默认实现的是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询

2.负载均衡自定义方式

  • 代码方式:配置灵活,但是修改时需要重新打包发布
  • 配置方式:直观、方便,无需重新打包发布,但是无法做到全局配置

3.饥饿加载

  • 开启饥饿加载
  • 指定饥饿加载的微服务名称
### 启用 Spring Cloud Ribbon 进行负载均衡的配置 在微服务架构中,Ribbon 是一种常用的客户端负载均衡工具。通过它,可以实现对多个服务实例之间的请求分发。以下是关于如何在微服务项目中启用并配置 Ribbon 的详细说明。 #### 1. 添加依赖项 为了使用 Ribbon,在项目的 `pom.xml` 文件中需要引入必要的依赖项: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> ``` 此依赖会自动集成 Ribbon 和其他 Spring Cloud 组件的功能[^2]。 #### 2. 创建带有负载均衡能力的 RestTemplate 实例 要让 `RestTemplate` 支持负载均衡功能,需为其添加 `@LoadBalanced` 注解。具体代码如下所示: ```java import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @Configuration public class AppConfig { @Bean @LoadBalanced public RestTemplate createRestTemplate() { return new RestTemplate(); } } ``` 上述代码片段定义了一个具有负载均衡特性的 `RestTemplate` Bean 对象[^4]。 #### 3. 使用 Eureka Server 注册服务实例 假设存在两个提供者服务实例分别运行于不同的端口上(如 `http://localhost:8081` 和 `http://localhost:8082`),这些实例均已在 Eureka Server 中完成注册操作[^3]。 #### 4. 编写控制器类调用远程服务 下面展示的是一个简单的控制层方法,用于向名为 “provider-service” 的服务发起 HTTP 请求: ```java @RestController @RequestMapping("/consumer") public class ConsumerController { private final RestTemplate restTemplate; public ConsumerController(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @GetMapping("/greeting") public String getGreetingFromProviderService() { return restTemplate.getForObject("http://provider-service/greeting", String.class); } } ``` 当访问 `/consumer/greeting` 接口时,该应用将会随机选取其中一个已注册的服务节点来执行实际的数据获取任务。 --- ### 总结 以上便是基于 Spring Cloud 微服务体系下利用 Ribbon 来达成客户端层面负载均衡效果的整体流程介绍。从 Maven 工程构建起步至最终业务逻辑编码完毕为止涵盖了全部必要环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃橘子的Crow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值