持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
前言
前面几篇内容我们搭建了eureka,zookeeper,consul三个服务注册中心,搭建对应的工程实现
这边有个知识点,CAP理论
- C: Consistency(强一致性)
- A: Availability(可用性)
- P: Partition tolerance(分区容错性)
CAP理论关注粒度是数据,而不是整体系统设计
AP(Eureka), CP(Zookeeper/Consul)
Ribbon
今天新的组件Ribbon引入项目中使用
作用: 负载均衡 + RestTemplate调用
eureka自带了Ribbon,所以我们不用特地再特地引入
Ribbon默认自带的负载规则-轮询,所有的负载策略如下
IRule:根据特定算法从服务列表中选取一个要访问的服务。
- com.netflix.loadbalancer.RoundRobinRule 轮询
- com.netflix.loadbalancer.RandomRule 随机
- com.netflix.loadbalancer.RetryRule 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试
- WeightedResponseTimeRule 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择
- BestAvailableRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
- AvailabilityFilteringRule 先过滤掉故障实例,再选择并发较小的实例
- ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能和server的可用性选择服务器
修改默认的负载策略
Ribbon自定义配置类不能放在@ComponentScan所扫描的当前包以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的
在consumer同级新建一个myrule package
自定义bean采用新的负载策略
主启动类引入Ribbon自定义策略