Spring Cloud Alibaba 实战(五) - 负载均衡

欢迎关注全是干货的公众号:JavaEdge
本文链接: https://blog.csdn.net/qq_33589510/article/details/102713299

Ribbon是什么?

Netflix开源的客户端侧负载均衡器

  • 可以简化如下代码
  • 简化后
  • 架构演进

Ribbon的组成

Ribbon内置的负载均衡规则

细粒度配置自定义

Java代码配置

  • 代码

  • 与启动类非同目录下建立, 即, 单独为该类建立一个包

  • 该类有一个config注解

  • 而config注解又有conp注解

    即config注解也是一种特殊的comp

  • 而启动类的注解

  • 又包含以下注解,用来扫描comp注解,即默认会扫描启动类所在包所有的comp注解

因为sb扫描的是主上下文,而ribbon也有一个上下文(子上下文)

  • 具体原因推荐阅读
    Spring+SpringMVC 配置事务管理无效原因及解决方案。
    所以父子上下文不能重叠!!!

  • 官方文档告警原文
    如果你把它放在了和启动类同目录下, 那么内容中心不管是调用用户中心还是微服务A都会调用该规则,成了全局的配置了,就不是粒度了

用配置属性配置

简单而且无坑!

代码配置方式 VS 属性配置方式

最佳实践

◆ 尽量使用属性配置,属性方式实现不了的情况下再考虑用代码配置
◆ 在同一个微服务内尽量保持单一性,比如统一使用属性配置,不要两种方式混用,增加定位代码的复杂性

全局配置

通过前面细粒度可知

方式一 : 让EComponentScan上下交重叠

强烈不建议使用

方式二 : 唯一正确的途径

  • @RibbonClients(defaultConfiguration= xxx.class)

支持的配置项

  • 前面的配置表格举例

配置属性方式

<clientName>. ribbon. 如下属性:
● NFLoadBal ancerClassName: ILoadBalancer 实现类
● NFLoadBalancerRuleClassName: IRule 买现类
● NFLoadBalancerP ingClassName: IPing 实现类
● NIWSServerListClassName: ServerList 实现类
● NIWSServerListFil terClassName : ServerListFilter 实现类

饥饿加载

默认服务都是懒加载的, 当以下代码第一次被调用时,才会创建一个名为user-center的ribbon client,会导致localhost8080/shares/1首次请求过慢的问题

因此在content-center改为饥饿加载方式



站在巨人肩膀,实现负载均衡算法

既然NACOs已经内置了负载均衡算法,SCA为何还要整合ribbbon呢?直接用NACOS不就ok了吗
主要为了符合SC的标准
SC的子项目spring cloud commons --> 定义了标准
SCC的子项目 spring cloud loadbalancer --> 没有权重,所以SCA遵循标准整合了ribbon

猜你喜欢

转载自blog.csdn.net/qq_33589510/article/details/102713299