手机版

百科生活 投稿

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)

百科 2026-05-30 02:00:04 投稿 阅读:3189次

关于【ribbon什么意思】:ribbon什么意思,今天涌涌小编给您分享一下,如果对您有所帮助别忘了关注本站哦。

  • 内容导航:
  • 1、万字长文深入分析客户端负载均衡Netflix Ribbon
  • 2、ribbon什么意思
  • 3、Ribbon英文意思是什么
  • 4、ribbon是什么意思
  • 5、ribbon意思
  • 6、rebbon 是什么意思

1、万字长文深入分析客户端负载均衡Netflix Ribbon

1. 什么是负载均衡?

负载均衡是一种基础的网络服务,它的核心原理是按照指定的负载均衡算法,将请求分配到后端服务集群上,从而为系统提供并行处理和高可用的能力。提到负载均衡,你可能想到nginx。对于负载均衡,一般分为服务端负载均衡和客户端负载均衡

  • 服务端负载均衡:在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的负载均衡器,比如 F5,也有软件,比如 Nginx。
  • 客户端负载均衡:所谓客户端负载均衡,就是客户端根据自己的请求情况做负载,本文介绍的Netflix Ribbon就是客户端负载均衡的组件

2. 什么是Netflix Ribbon?

在上一章的学习中,我们知道了微服务的基本概念,知道怎么基于Ribbon+restTemplate的方式实现服务调用,接着上篇博客,我们再比较详细学习客户端负载均衡Netflix Ribbon,学习本博客之前请先学习上篇博客,然后再学习本篇博客

Ribbon 是由 Netflix 发布的负载均衡器,它有助于控制 HTTP 和 TCP 的客户端的行为。Ribbon 属于客户端负载均衡。

3. Netflix Ribbon实验环境准备

环境准备:

  • JDK 1.8
  • SpringBoot2.2.3
  • SpringCloud(Hoxton.SR6)
  • Maven 3.2+
  • 开发工具IntelliJ IDEAsmartGit

创建一个SpringBoot Initialize项目,详情可以参考我之前博客:SpringBoot系列之快速创建项目教程

可以引入Eureka Discovery Client,也可以单独添加Ribbon

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)

Spring Cloud Hoxton.SR6版本不需要引入spring-cloud-starter-netflix-ribbon,已经默认集成

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)


也可以单独添加Ribbon依赖:

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)


本博客的是基于spring-cloud-starter-netflix-eureka-client进行试验,试验前要运行eureka服务端,eureka服务提供者,代码请参考上一章博客

补充:IDEA中多实例运行方法

step1:如图,不要加上勾选

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)

step2:指定不同的server端口和实例id,如图:

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)


启动成功后,是可以看到多个实例的

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)

4. Netflix Ribbon API使用

使用LoadBalancerClient:

@Autowired LoadBalancerClient loadBalancerClient; @Test void contextLoads() { ServiceInstance serviceInstance = loadBalancerClient.choose("EUREKA-SERVICE-PROVIDER"); URI uri = URI.create(String.format("http://%s:%s", serviceInstance.getHost() , serviceInstance.getPort())); System.out.println(uri.toString()); }

构建BaseLoadBalancer实例例子:

@Test void testLoadBalancer(){ // 服务列表 List serverList = Arrays.asList(new Server("localhost", 8083), new Server("localhost", 8084)); // 构建负载实例 BaseLoadBalancer loadBalancer = LoadBalancerBuilder.newBuilder().buildFixedServerListLoadBalancer(serverList); loadBalancer.setRule(new RandomRule()); for (int i = 0; i < 5; i++) { String result = LoadBalancerCommand.builder().withLoadBalancer(loadBalancer).build() .submit(new ServerOperation() { public Observable call(Server server) { try { String address = "http://" + server.getHost() + ":" + server.getPort()+"/EUREKA-SERVICE-PROVIDER/api/users/mojombo"; System.out.println("调用地址:" + address); return Observable.just(""); } catch (Exception e) { return Observable.error(e); } } }).toBlocking().first(); System.out.println("result:" + result); } }

5. 负载均衡@LoadBalanced

Ribbon负载均衡实现,RestTemplate 要加上@LoadBalanced

package com.example.springcloud.ribbon.configuration;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.client.RestTemplate;@Configurationpublic class RestConfiguration { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); }}

yaml配置:

server: port: 8082spring: application: name: eureka-service-consumereureka: client: service-url: defaultZone: http://localhost:8761/eureka/ fetch-registry: true register-with-eureka: false healthcheck: enabled: false instance: status-page-url-path: http://localhost:8761/actuator/info health-check-url-path: http://localhost:8761/actuator//health prefer-ip-address: true instance-id: eureka-service-consumer8082

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)


关键点,使用SpringCloud的@LoadBalanced,才能调http://EUREKA-SERVICE-PROVIDER/api/users/? 接口的数据,浏览器是不能直接调的

import com.example.springcloud.ribbon.bean.User;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.web.bind.annotation.*;import org.springframework.web.client.RestTemplate;import java.net.URI;@SpringBootApplication@EnableEurekaClient@RestController@Slf4jpublic class SpringcloudRibbonApplication { @Autowired RestTemplate restTemplate; public static void main(String[] args) { SpringApplication.run(SpringcloudRibbonApplication.class, args); } @GetMapping("/findUser/{username}") public User index(@PathVariable("username")String username){ return restTemplate.getForObject("http://EUREKA-SERVICE-PROVIDER/api/users/"+username,User.class); }}

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)

6. 定制Netflix Ribbon client

具体怎么定制?可以参考官网,@RibbonClient指定定制的配置类即可

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)

package com.example.springcloud.ribbon.configuration;import com.example.springcloud.ribbon.component.MyRule;import com.netflix.loadbalancer.IPing;import com.netflix.loadbalancer.IRule;import com.netflix.loadbalancer.PingUrl;import org.springframework.cloud.netflix.ribbon.ZonePreferenceServerListFilter;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;//@Configuration(proxyBeanMethods = false)//@IgnoreComponentScanpublic class RibbonClientConfiguration {// @Autowired// IClientConfig config; @Bean public IRule roundRobinRule() { return new MyRule(); } @Bean public ZonePreferenceServerListFilter serverListFilter() { ZonePreferenceServerListFilter filter = new ZonePreferenceServerListFilter(); filter.setZone("myTestZone"); return filter; } @Bean public IPing ribbonPing() { return new PingUrl(); }}

在Application类加上@RibbonClient,name是为服务名称,跟bootstrap.yml配置的一样既可

@RibbonClient(name = "eureka-service-provider",configuration = RibbonClientConfiguration.class)

特别注意:官网这里特意提醒,这里的意思是说@RibbonClient指定的配置类必须加@Configuration(不过在Hoxton.SR6版本经过我的验证,其实是可以不加的,加了反而可能报错),@ComponentScan扫描要排除自定义的配置类,否则,它由所有@RibbonClients共享。如果你使用@ComponentScan(或@SpringBootApplication)

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)


其实就是想让我们排除这个配置的全局扫描,所以我们可以进行编码,写个注解类@IgnoreComponentScan,作用于类,指定@Target(ElementType.TYPE)

package com.example.springcloud.ribbon.configuration;import java.lang.annotation.*;@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface IgnoreComponentScan {}

加上自定义的注解类

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)

任何在Application加上代码,避免全局扫描:

@ComponentScan(excludeFilters={@ComponentScan.Filter(type= FilterType.ANNOTATION,value= http://www.029ztxx.com/tg/IgnoreComponentScan.class)})

7. Netflix Ribbon常用组件

ps:介绍Netflix Ribbon的负载策略之前,先介绍Netflix Ribbon常用组件及其作用:

组件作用ILoadBalancer定义一系列的操作接口,比如选择服务实例。IRule负载算法策略,内置算法策略来为服务实例的选择提供服务。ServerList负责服务实例信息的获取(可以获取配置文件中的,也可以从注册中心获取。)ServerListFilter过滤掉某些不想要的服务实例信息。ServerListUpdater更新本地缓存的服务实例信息。IPing对已有的服务实例进行可用性检查,保证选择的服务都是可用的。

8. 定制Netflix Ribbon策略

因为服务提供者是多实例的,所以再写个接口测试,调用了哪个实例,来看看Netflix Ribbon的负载策略

@Autowired LoadBalancerClient loadBalancerClient; @GetMapping(value = http://www.029ztxx.com/tg/{"/test"}) public String test(){ ServiceInstance serviceInstance = loadBalancerClient.choose("EUREKA-SERVICE-PROVIDER"); URI uri = URI.create(String.format("http://%s:%s", serviceInstance.getHost() , serviceInstance.getPort())); System.out.println(uri.toString()); return uri.toString(); }

部署成功,多次调用,可以看到每次调用的服务实例都不一样?其实Netflix Ribbon默认是按照轮询的方式调用的

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)

要定制Netflix Ribbon的负载均衡策略,需要实现AbstractLoadBalancerRule抽象类,下面给出类图:

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)


Netflix Ribbon内置了如下的负载均衡策略,引用的归纳:

ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)

ok,接着我们可以在配置类,修改规则

2、ribbon什么意思

ribbons这个单词的意思是什么

  ribbon英音:['ribən]美音:['rɪbən] 以下结果由译典通提供词典解释 名词 n. 1.缎带;丝带;饰带[U][C] The young girl's hair was tied up with a red ribbon. 这个小女孩的头发用一条红缎带扎了起来。
   2.带;带状物[C] 3.钢卷尺;。

3、Ribbon英文意思是什么

  ribbon [rib·bon || 'rɪbən] n. 缎带, 带状物, 色带

4、ribbon是什么意思

  ribbon:丝带的意思 其他意思: 色带;带;缎带 ;带子;飘带; 当用做动词时意思为:用丝带装饰

5、ribbon意思

  n. 带;缎带;(勋章等的)绶带;带状物;勋表 vi. 形成带状 vt. 把…撕成条带;用缎带装饰 词语举例: red ribbon n. 红丝带 blue ribbon 蓝带程序;最高的荣誉;一流的 silk ribbon 丝带;绸带 cut the ribbon 剪彩 satin ribbon 缎带

6、rebbon 是什么意思

  你说的找不到,请问是不是ribbon? ribbon英音:['ribən]美音:['rɪbən] n.1.缎带;带;饰带[U][C] The young girl's hair was tied up with a red ribbon. 这个小女孩的头发用一条红缎带扎了起来。
   2. 带;带状物[C]3. 钢卷尺;带锯。

本文关键词:ribbon什么意思 负载均衡,ribbon什么意思,ribbon什么意思faded,paper ribbon什么意思,yellow ribbon什么意思。这就是关于《ribbon什么意思,rebbon 是什么意思(万字长文深入分析客户端负载均衡Netflix)》的所有内容,希望对您能有所帮助!

本文链接:https://bk.89qw.com/a-470179/

最近发表
网站分类