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