springcloud

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 根据路径路由到不同服务

服务理由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
原文地址:https://www.cnblogs.com/albertXe/p/14635266.html