Ribbon

@Autowired
Private LoadBalancerClient  loadBalancerClient;     //ribbon 负载均衡客户端

ServiceInstance si = loadBalancerClient.choose(“微服务名称”);    //负载均衡筛选

si.getHost(); //获取host地址
si.getPort();//获取端口号

什么Ribbon,解决什么问题

  • Ribbon 是一个基于http和tcp的客户端负载均衡工具,它是机遇Netflix Ribbon实现的
  • 它不像spring cloud服务注册中心、配置中心、api网关那样独立部署,但是它几乎存在于每个spring cloud微服务中。包括feign提供的声明式服务调用也是基于该Ribbon实现
  • Ribbon默认提供很多种负载均衡算法,例如 轮询、随机。甚至包含自定义的负载均衡算法
  • 它解决并提供了微服务的负载均衡问题

负载均衡解决方案分类

  • 集中式负载均衡

    • 在consumer和provider之间使用独立的负载均衡设施(可以是硬件、如F5,也可以是软件,如nginx),由该设施负责把访问请求通过某种策略转发至provider
  • 进程内负载均衡

    • 将负载均衡逻辑集成到consumer,consumer从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的provider
  • Ribbon属于后者,是只是一个类库,继承与consumer进程,consumer通过它来获取到provide的地址

Ribbon七种负载规则

  • 轮询策略(默认)RoundRobinRule

    • 顺序轮询
  • 权重轮询策略 WeightedResponseTimeRule

    • 根据响应时间分配权重,响应时间越长权重越小,被选中的可能性越低。轮询策略开始后,每30秒收集一次
  • 随机策略 RandomRule

  • 最少并发数策略 BestAvailableRule

  • 选定负载均衡策略基础上进行重试机制 RetryRule

    • 负载A服务链接失败,会去重试其他服务
  • 可用性敏感策略 AvailabilityFilteringRule

  • 区域敏感性策略

配置文件设置:

 provider-NAME(Eureka服务名称).ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

程序设置

@Bean
Public Rule ribbonRule(){
    return new RandomRule();
}

点对点直联方式

  • Pom 文件无需加载eureka
  • 配置文件:
    • ribbon.eureka.enabled=false //禁用eureka
    • provider-NAME(provider服务名称).ribbon.listOfServers=192.168.10.61:8081 //指定provider服务器地址,可写多个地址逗号分隔

你可能感兴趣的:(Ribbon)