Spring Cloud 5大组件有哪些?
随着SpringCloudAlibba在国内兴起 , 我们项目中使用了一些阿里巴巴的组件
注册中心/配置中心 Nacos
负载均衡 Ribbon
服务调用 Feign
服务保护 sentinel
服务网关 Gateway
Ribbon负载均衡策略有哪些 ?
RoundRobinRule:简单轮询服务列表来选择服务器
WeightedResponseTimeRule:按照权重来选择服务器,响应时间越长,权重越小
RandomRule:随机选择一个可用的服务器
BestAvailableRule:忽略那些短路的服务器,并选择并发数较低的服务器
RetryRule:重试机制的选择逻辑
AvailabilityFilteringRule:可用性敏感策略,先过滤非健康的,再选择连接数较小的实例
ZoneAvoidanceRule:以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询
如果想自定义负载均衡策略如何实现 ?
指定负载均衡策略(全局)
可以配置某一个服务调用的负载均衡策略(局部)
你们项目中有没有做过限流 ? 怎么做的 ?
限流的实现方式:
Tomcat:可以设置最大连接数
Nginx,漏桶算法
网关,令牌桶算法
自定义拦截器
Nginx限流
key:定义限流对象,binary_remote_addr就是一种key,基于客户端ip限流
Zone:定义共享存储区来存储访问信息,10m可以存储16wip地址访问信息
Rate:最大访问速率,rate=10r/s 表示每秒最多请求10个请求
burst=20:相当于桶的大小
Nodelay:快速处理
网关限流
key-resolver :定义限流对象( ip 、路径、参数),需代码实现,使用spel表达式获取 replenishRate :令牌桶每秒填充平均速率。
urstCapacity :令牌桶总容量。
分布式服务的接口幂等性如何设计?
需要幂等场景
用户重复点击(网络波动)
MQ消息重复
应用使用失败或超时重试机制
基于RESTful API的角度对部分常见类型请求的幂等性特点进行分析
token+redis
你们项目中使用了什么分布式任务调度
xxl-Job
解决集群任务的重复执行问题
cron表达式定义灵活
定时任务失败了,重试和统计
任务量大,分片执行
xxl-job路由策略有哪些?
xxl-job任务执行失败怎么解决?
故障转移+失败重试
如果有大数据量的任务同时都需要执行,怎么解决?
执行器集群部署时,任务路由策略选择分片广播情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务
在任务执行的代码中可以获取分片总数和当前分片,按照取模的方式分摊到各个实例执行