前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud Alibaba - 07 Ribbon 应用篇及内置的负载均衡算法

Spring Cloud Alibaba - 07 Ribbon 应用篇及内置的负载均衡算法

作者头像
小小工匠
发布2022-02-03 16:02:05
5080
发布2022-02-03 16:02:05
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构

文章目录

在这里插入图片描述
在这里插入图片描述

Ribbon整合三部曲

我们这里通过Ribbon组件来实习负载均衡 【默认的负载均衡算法是 轮询】

在这里插入图片描述
在这里插入图片描述

artisan-cloud-ribbon-order

step1 搞依赖

代码语言:javascript
复制
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-alibaba-nacos-discoveryartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-ribbonartifactId>
        dependency>

step2 搞注解 (在RestTemplate上加入@LoadBalanced注解)

代码语言:javascript
复制
@Configuration
public class WebConfig {


    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
Step3 搞配置文件

这里是写Nacos 的配置文件,暂时没有配置Ribbon的配置

代码语言:javascript
复制
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 1.117.97.88:8848
        
  application:
    name: artisan-order-center

artisan-cloud-ribbon-product

作为服务提供方,仅需要注册到Nacos , 无需集成Ribbon, 启动多个测试Ribbon的负载策略即可。

代码语言:javascript
复制
@RestController
@Slf4j
public class ProductInfoController {

    @Value("${server.port}")
    private Integer port;

    @Autowired
    private ProductInfoMapper productInfoMapper;

    @RequestMapping("/selectProductInfoById/{productNo}")
    public Object selectProductInfoById(@PathVariable("productNo") String productNo) {
        log.info("{} 被请求了",port);
        ProductInfo productInfo = productInfoMapper.selectProductInfoById(productNo);
        return productInfo;
    }

}

验证

在这里插入图片描述
在这里插入图片描述

分别请求三次

在这里插入图片描述
在这里插入图片描述

日志如下

在这里插入图片描述
在这里插入图片描述

可以猜测,默认策略为轮询算法

修改Ribbon默认的负载策略

在这里插入图片描述
在这里插入图片描述

请求三次

在这里插入图片描述
在这里插入图片描述

Ribbon的内置的负载均衡算法

类关系 (IRule接口 AbstractLoadBalancerRule抽象类)

在这里插入图片描述
在这里插入图片描述

可以看到是采用的策略设计模式,公共的都写到了抽象类中

负载均衡算法

RandomRule

随机选择一个Server

RetryRule

对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的server.

RoundRobinRule

轮询选择, 轮询index,选择index对应位置的Server

AvailabilityFilteringRule

过滤掉一直连接失败的被标记为circuit tripped的后端Server,并过滤掉那些高并发的后端Server或者使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个Server的运行状态

BestAvailableRule

选择一个最小的并发请求的Server,逐个考察Server,如果Server被tripped了,则跳过。

WeightedResponseTimeRule

根据响应时间加权,响应时间越长,权重越小,被选中的可能性越低;

ZoneAvoidanceRule(默认)

复合判断Server所在Zone的性能和Server的可用性选择Server,在没有Zone的情况下类是轮询。

源码

https://github.com/yangshangwei/SpringCloudAlibabMaster

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-02-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • Ribbon整合三部曲
    • artisan-cloud-ribbon-order
      • step1 搞依赖
      • step2 搞注解 (在RestTemplate上加入@LoadBalanced注解)
    • artisan-cloud-ribbon-product
      • 验证
      • 修改Ribbon默认的负载策略
      • Ribbon的内置的负载均衡算法
        • 类关系 (IRule接口 AbstractLoadBalancerRule抽象类)
          • 负载均衡算法
            • RandomRule
            • RetryRule
            • RoundRobinRule
            • AvailabilityFilteringRule
            • BestAvailableRule
            • WeightedResponseTimeRule
            • ZoneAvoidanceRule(默认)
        • 源码
        相关产品与服务
        负载均衡
        负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com