3.springcloudAlibaba-负载均衡器Ribbon

 1.springcloudAlibaba-nacos

2.springcloudAlibaba-openFeign

3.springcloudAlibaba-负载均衡器Ribbon

4.springcloudAlibaba-nacos配置中心

5.springcloudAlibaba-Seata 分布式事务

6.springcloudAlibaba-sentinel

7.springcloudAlibaba-网关gateway


目录

1.什么是Ribbon

负载均衡策略

IRule

AbstractLoadBalancerRule

ribbon使用

yml配置的方式

config类注入放式

自定义策略

饥饿加载


1.什么是Ribbon

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

集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如 Nginx)。

客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡。

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

负载均衡策略

IRule

这是所有负载均衡策略的父接口,里边的核心方法就是choose方法,用来选择一个服务实例。

AbstractLoadBalancerRule

AbstractLoadBalancerRule是一个抽象类,里边主要定义了一个ILoadBalancer,这里定义它的目的主要是辅助负责均衡策略选取合适的服务端实例

规则分类

默认情况下Ribbon的负载均衡策略是轮询,Ribbon常用的负载均衡规则:

1、简单轮询策略(RoundRobinRule)

以轮询的方式依次将请求调度不同的服务器

2、随机策略 (RandomRule)

随机选择状态为UP的Server

3、加权响应时间策略 (WeightedResponseTimeRule)

根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。

4、区域权重策略(ZoneAwareRule)

综合判断server所在区域的性能和server的可用性选择server

5、最低并发策略(BestAvailableRule)

逐个查看server,选择一个并发连接最低的server

6、重试策略(RetryRule)

对选定的负载均衡策略机上重试机制

7、可用过滤策略(AvailabilityFilteringRule)

过滤掉一直失败并被标记为circuit tripped的server

8、ResponseTimeWeightedRule

已废弃,作用同WeightedResponseTimeRule

ribbon使用

yml配置的方式

nacos中已有ribbon

重新复制order module 改名为 orderCopy 端口号改为9996

在customer 配置文件yml 中加入单个负载均衡配置

order-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule

然后重启项目调用原 http://localhost:9998/getUserInfo

可以看到轮训配置成功,其他的策略 可以自行操作

config类注入放式

还有一种配置方式是通过 配置类来注入

注意这个中配置方式 该类不能放到SpringbootApplication 能扫到的地方

在config中指定策略

@Configuration
public class RibbonConfig {

    /**
     * 全局配置
     * 指定负载均衡策略
     *
     * @return
     */
    @Bean
    public IRule iRule() {
        return new RoundRobinRule();
    }
}

然后再在application中指定服务的策略

自定义策略

通过继承 AbstractLoadBalancerRule 来自定义策略

public class NacosRandomWithWeightRule extends AbstractLoadBalancerRule {

    @Autowired
    private NacosDiscoveryProperties nacosDiscoveryProperties;

    @Override
    public Server choose(Object key) {
        DynamicServerListLoadBalancer loadBalancer = (DynamicServerListLoadBalancer) getLoadBalancer();
        String serviceName = loadBalancer.getName();
        NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();
        try {
            //nacos基于权重的算法
            Instance instance = namingService.selectOneHealthyInstance(serviceName);
            return new NacosServer(instance);
        } catch (NacosException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public void initWithNiwsConfig(IClientConfig clientConfig) {

    }
}

在配置文件中修改类

order-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.config.NacosRandomWithWeightRule

饥饿加载

Ribbon默认懒加载 只有在第一次调用的时候才会去初始化策略配置,在第一次调用时容易超时

在yml中开启鸡儿加载使项目加载时初始化ribbon策略

ribbon:
  eager‐load:
    enabled: true
    clients: order-service #多个使用逗号分隔

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

毛利小伍琪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值