springcloud汇总学习
eureka 注册中心
- ribbon负责负载均衡
- eureka淘汰原因 本地服务列表更新不及时 根据定时任务
- zk 基于事件 更新服务列表
- actuator健康检查
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ JdbcTemplate.class, AbstractRoutingDataSource.class })
@ConditionalOnBean(DataSource.class)
@ConditionalOnEnabledHealthIndicator("db")
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class DataSourceHealthContributorAutoConfiguration extends
CompositeHealthContributorConfiguration<AbstractHealthIndicator, DataSource> implements InitializingBean {
zk
服务隔离 hastrix
- 解决服务雪崩问题 一个坏接口导致其他正常接口也不能用了. 只给10个线程解决;给接口指定的并发量
- 接口并发
- 服务降级 类似有个钩子方法
- 服务熔断 open 请求次数 成功率
- 服务监控 监控工程搭建
dubbo
- 降级或mock调用
feign client 包装异常
分布式配置中心
- 公共配置
- 配置动态加载
- 配置信息加密
- refreshScop注解+刷新接口 很烂 只刷下一个应用接口
- 消息总线 bus 整合mq来 动态加载 刷新所有应用接口 垃圾
- 自定义scope就相当于从自定义的缓存中拿对象
- @RefreshScope的类对象会重新实例化 相当于多例
- 自己动态实现数据源的刷新 可以吗?
服务网关
Spring Cloud Gateway
路由转发、权限校验、限流控制
使用了一个RouteLocatorBuilder的bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加各种predicates和filters,predicates断言的意思,顾名思义就是根据具体的请求的规则,由具体的route去处理,filters是各种过滤器,用来对请求做各种判断和修改
RoutePredicateHandlerMapping
1 GatewayLoadBalancerClientAutoConfiguration这个是gateway负载均衡的过滤器实现的加载,他将LoadBalancerClientFilter 注入到了容器中
2 LoadBalancerClient的实现类就是RibbonLoadBalancerClient,做负载均衡都离不开ribbon3
3 最重要的 GatewayAutoConfiguration
@Configuration
@ConditionalOnClass({LoadBalancerClient.class, RibbonAutoConfiguration.class, DispatcherHandler.class})
@AutoConfigureAfter(RibbonAutoConfiguration.class)
public class GatewayLoadBalancerClientAutoConfiguration {
// GlobalFilter beans
@Bean
@ConditionalOnBean(LoadBalancerClient.class)
public LoadBalancerClientFilter loadBalancerClientFilter(LoadBalancerClient client) {
return new LoadBalancerClientFilter(client);
}
}
public class LoadBalancerClientFilter implements GlobalFilter, Ordered {
/**
* Filter order for {@link LoadBalancerClientFilter}.
*/
public static final int LOAD_BALANCER_CLIENT_FILTER_ORDER = 10100;
private static final Log log = LogFactory.getLog(LoadBalancerClientFilter.class);
protected final LoadBalancerClient loadBalancer;
private LoadBalancerProperties properties;
zuul 连接配置中心eureka 根据路径路由到不同服务
- 流量入口 路由
- ZuulFilter介绍
https://blog.csdn.net/xingxiupaioxue/article/details/104603930?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242 - 支持分布式配置中心配置路由 不需要重启机器
- springbootadmin 监控
服务理由ribbon
在实例化ZoneAwareLoadBalancer的时候注入了,config、rule、ping、serverList、serverListFilter、serverListUpdater实例。
config:配置实例。
rule:负载均衡策略实例。
ping:ping实例。
serverList:获取和更新服务的实例。
serverListFilter:服务过滤实例。
serverListUpdater:服务列表信息更新实例。
策略类 | 命名 | 描述 |
---|---|---|
RandomRule | 随机策略 | 随机选择server |
RoundRobinRule | 轮询策略 | 按照顺序选择server(ribbon默认策略) |
RetryRule | 重试策略 | 在一个配置时间段内,当选择server不成功,则一直尝试选择一个可用的server |
BestAvailableRule | 最低并发策略 | 逐个考察server,如果server断路器打开,则忽略,再选择其中并发链接最低的server |
AvailabilityFilteringRule | 可用过滤策略 | 过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值) |
ResponseTimeWeightedRule | 响应时间加权重策略 | 根据server的响应时间分配权重,响应时间越长,权重越低,被选择到的概率也就越低。响应时间越短,权重越高,被选中的概率越高,这个策略很贴切,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间 |
ZoneAvoidanceRule | 区域权重策略 | 综合判断server所在区域的性能,和server的可用性,轮询选择server并且判断一个AWS Zone的运行性能是否可用,剔除不可用的Zone中的所有server |