03_Ribbon

Ribbon

Ribbon-负载均衡介绍

目前主流的负载方案分为以下两种;

  • 集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如F5),也有软件的(比如 Nginx)
  • 客户端根据自己的请求情况做负载均衡,Ribbon就属于客户端自己做负载均衡。

springcloud Ribbon 是基 于netflex Ribbon实现的一套客户端的负载均衡工具, Ribbon客户端组件提供一系列的完整的配置,如超时,重试等、通过Lo adBalaner获取到服务提供的所有机器实到, Ribbon会自动基于某种规则.(轮询,随机)去调用这些服务。Ribbon也可以实现我们自己的负载均衡算法。

常见负载均衡算法

  • 随机,通过随机选择服务进行执行,一般这种方式使用较少;
  • 轮询,负载均衡默认实现方式,请求来之后排队处理;
  • 加权轮训,通过对服务器性能的分型,给高配置,低负载的服务器分配更高的权重,均衡各个服务器的压力;
  • 地址Hash,通过客户端请求的地址的HASH值取模映射进行服务器调度。ip -->hash
  • 最小链接数,即使请求均衡了,压力不一定会均衡,最小连接数法就是根据服务器的情况,比如请求积压数等参数,将请求分配到当前压力最小的服务器上。

Nacos使用Ribbon

1.nacos-discovery依赖了ribbon,可以不用再引入ribbon依赖

2.添加 @LoadBanlanced 注解

@Configruation
public class RestConfig(){
    @Bean
    @LoadBanlanced
    public RestTemplate restemplate(){
        return new RestTemplate();
    }
}

3.使用

在这里插入图片描述

Ribbon-负载均衡策略

在这里插入图片描述

在这里插入图片描述

Ribbon-修改默认负载均衡策略

  • 配置类

复制order-nacos项目 为 order-ribbon

1.编写配置类 注意包位置(不能被扫描到,要不然就是全局使用)

package com.tian.ribbon;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RibbonRandomRuleConfig {

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

2.主启动类加上注解

@SpringBootApplication
@RibbonClients(value = {
        @RibbonClient(name = "stock-service",configuration = RibbonRandomRuleConfig.class)
})
public class OrderNacosApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderNacosApplication.class,args);
    }


    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate restTemplate=builder.build();
        return  restTemplate;
    }
}

3.更改配置文件端口

server:
  port: 8030
#应用名称 nacos会将该名称当作服务名称
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public

4.启动nacos

5.访问测试

http://localhost:8030/order/add

  • 配置文件

先把主启动类的@RibbonClients 注释掉

1.编写配置文件

server:
  port: 8030
#应用名称 nacos会将该名称当作服务名称
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public
stock-service: #提供服务者
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #权重

2.更改权重

在这里插入图片描述

3.访问测试

http://localhost:8030/order/add

负载均衡策略

1.编写负载均衡策略类

package com.tian.ribbon.rule;


import com.alibaba.nacos.client.naming.utils.ThreadLocalRandom;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;

import java.util.List;

public class CustomRule extends AbstractLoadBalancerRule{

    public void initWithNiwsConfig(IClientConfig iClientConfig) {

    }

    public Server choose(Object key) {
        ILoadBalancer loadBalancer = this.getLoadBalancer();
        //获得当前请求的服务的实例
        List<Server> reachableServers = loadBalancer.getReachableServers();
        int random = ThreadLocalRandom.current().nextInt(reachableServers.size());
        Server server = reachableServers.get(random);
        return server;
    }
}

2.修改配置文件

server:
  port: 8030
#应用名称 nacos会将该名称当作服务名称
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public
stock-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.tian.ribbon.rule.CustomRule
ribbon:
  eager-load:
    #开启ribbon饥饿加载 为了第一次调用快点~
    enabled: true
    #配置服务名使用ribbon饥饿加载 ,多个逗号分隔
    clients: stock-service

3.启动访问

http://localhost:8030/order/add

使用LoadBalance替代Ribbon

什么是Spring Cloud LoadBalancer

Spring Cloud LoadBalancer是spring cloud官方自己提供的客户端负载均衡器,用来替代Ribbon.(目前还是ribbon更强,他只提供一种负载均衡策略)

复制order-ribbon项目

1.引入loadbalancer依赖排除ribbon依赖

<!--    nacos服务注册发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <exclusions>
        <!--      将ribbon排除了          -->
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--   添加loadbalancer ,添加springcloud的依赖    -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>

注意: nacos-discovery中引入了ribbon,需要移除ribbon的包如果不移除,也可以在yml中配置不使用ribbon

2.配置文件

server:
  port: 8031
#应用名称 nacos会将该名称当作服务名称
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public
    loadbalancer:
      ribbon:
        enabled: false

3.主启动类

@SpringBootApplication
public class OrderNacosApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderNacosApplication.class,args);
    }


    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate restTemplate=builder.build();
        return  restTemplate;
    }
}

4.测试访问

http://localhost:8031/order/add

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值