Spring Cloud

Part0:组件总览

Part1:知识系列

Part2:常用组件总结

(一):服务治理:Eureka(实际用阿里的Nacos比较多)

(二):客户端负载均衡:Ribbon(带@LoadBalanced注解的RestTamplate)

(三):服务容错保护:Hystrix(阿里的Sentinel)

  • spring clound hystrix使用总结

  • 微服务架构如何保障双11狂欢下的99.99%高可用

  • Sentinel+Nacos实现资源流控、降级、热点、授权

  • 功能介绍
    服务熔断:当某服务出现不可用或响应超时的情况时,为了防止整个系统出现
    雪崩,暂时停止对该服务的调用;
    服务降级:它一般是和服务熔断一起使用的.当发生服务熔断后,可以调用熔断方法,把服务降级处理.比如可以记录失败log,发邮件等后面进入人工手动处理.
    线程或信号隔离:为每一个依赖服务创建一个独立的线程池,这样就算某个依赖服务出现延迟过高的情况,也只是对该依赖服务的调用产生影响,而不会拖慢其他的依赖服务;
    请求援存:Hystrix中提供了请求缓存的功能Request Context请求上下文,同一个请求接口相同,参数相同可以走缓存,我们可以方便地开启和使用请求缓存来优化系统,达到减轻高并发时的请求线程消耗、降低请求响应时间的效果;
    请求合并:HystrixCollapser实现了在HystrixCommand之前放置一个合并处理器, 将处于一个很短的时间窗(默认10毫秒)内对同一依赖服务的多个请求进行整合井以批量方式发起请求的功能
    服务监控:Hystrix 仪表盘、Turbine 集群监控等.

  • 参数配置:

    hystrix.command.default.execution.isolation.strategy 隔离策略,默认是Thread, 可选Thread|Semaphore;
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds 命令执行超时时间,默认1000ms;
    hystrix.command.default.execution.timeout.enabled 执行是否启用超时,默认启用true;
    hystrix.command.default.execution.isolation.thread.interruptOnTimeout 发生超时是是否中断,默认true;
    hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests最大并发请求数,默认10,该参数当使用ExecutionIsolationStrategy.SEMAPHORE策略时才有效.如果达到最大并发请求数,请求会被拒绝.理论上选择semaphore size的原则和选择thread size一致,但选用semaphore时每次执行的单元要比较小且执行速度快(ms级别),否则的话应该用thread;
    更多参数点这里

    注意:这里需要注意一点. Ribbon的超时与Hystrix的超时是两个概念.为了让上述实现有效,我们需要让Hystrix的超时时间大于Ribbon的超时时间,否则Hystrix命令超时后,该命令直接熔断, 重试机制就没有任何意义了。

  • 两种熔断方式:线程池和信号量
    Zuul 对 Hystrix 的线程隔离模式选择
    Hystrix的线程池隔离和信号量隔离
    在这里插入图片描述

(四):声明式服务调用Feign(实际当中还是直接使用Ribbion,即带Loadbalance注解的Resttemplate):

  • spring cloud feign使用总结
  • 参数配置:
    由于Feign整合了Ribbon与Hystrix,所以可以像配置Ribbon和Hystrix命令那样配置自己的参数.
    一:Ribbon的配置
    参考Ribbon部分。
    二:Hystrix的配置
    参考Hystrix部分。
    三:禁用/启用Hystrix
    全局配置:feign.hystrix.enabled=true/false或者hystrix.command.
    default.execution.timeout.enabled=false;
    局部配置:如果不想全局地关闭Hystrix支持,而只想针对某个服务客户端关闭Hystrix支持时,需要通过使用自Scope(“prototype”)注解为指定的客户端配置Feign.Builder实例即可.
    四:其他配置
    请求和响应压缩:支持对请求与响应进行GZIP 压缩,以减少通信过程中的性能损耗:
    feign.compression.request.enabled=true;
    feign.compression.response.enabled=true;
    压缩请求数据类型
    feign.compression.request.mime-types=text/xml ,
    application/xml , application/json;
    压缩最小下限,只有超过这个阀值才会压缩
    feign.compression.request.min-request-size=2048.
    日志配置:Spring Cloud Feign在构建被@FeignClient注解修饰的服务客户端时,会为每一个客户端都创建一个feign.Logger实例,我们可以利用该日志对象的DEBUG模式来帮助分析Feign的请求细节.

(五):Netflex网关服务Zuul(实际用spring cloud 2.x版本的gateway):

  • spring cloud zuul使用总结

  • 请求路由:
    方式一:定义path和url映射关系,基本上不用;
    方式二:Zuul借助Eureka的服务发现机制,可以通过简单的path与serviceld的映射组合方式:zuul.routes.serviceId=path,其中serviceId用来指定路由的具体服务名, path用来配置匹配的请求表达式.比如
    zuul.routes.user-service=/user-service/;
    方式三:自定义路由映射规则,增加如下Bean的创建即可
    @Bean
    public PatternServiceRouteMapper serviceRouteMapper() {
    return new PatternServiceRouteMapper("","");
    };

  • 校验过滤器:做一下权限验证.
    filterType:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下:
    pre:路由之前,如内置的ServletDetectionFilter;
    routing:路由之时,如内置的RibbonRoutingFilter;
    post:路由之后,如内置的SendResponseFilter;
    error:发送错误调用。
    filterOrder:过滤的顺序
    shouldFilter:这里可以写逻辑判断,是否要过滤,若为true,永远过滤。
    run:过滤器的具体逻辑,比如去判断该请求到底有没有权限访问.
    禁用过滤器
    方法一:shouldFilter返回false,可以禁止自定义过滤器;
    方法二:zuul.SimpleClassName.filterType.disable=true;其中.
    代表过滤器的类名,代表过滤器类,该参数配置除了可以对自定义的过滤器进行禁用配置之外,也可以禁用默认定义的核心过滤器

  • 熔断机制:当我们的后端服务出现异常的时候,我们不希望将异常抛出给最外层,期望服务可以自动进行一降级实现FallbackProvider接口 .

  • Zuul限流:

    字节跳动工作总结:高并发系统中的限流算法
    SpringCloud-Zuul高并发请求下的限流处理
    Spring Cloud限流详解

  • 参数配置:
    Zuul模板对ribbon和hystrix有依赖关系,所以Zuul天生就拥有线程隔离和断路器的自我保护功能.但是需要注意,当使用path与url的映射关系来配置路由规则的时候不会用到ribbon和hystrix功能,所以应该使用path和serviceld的组合来进行配置。

(六):分布式配置中心Config(实际用的是阿里的Nacos):

  • spring cloud config使用总结


  • (1): client端获取值:使用@Value注解来获取server端参数的值.
    如果git配置改变了,为了使各个微服务能实时的获得更新的值,有以下四种解决方案:
    1:重启应用;
    2:需要给加载变量的类上面加载@RefreshScope;
    3:github的webhook;
    4:Spring Cloud Bus.

    (2): Config Server巧妙地通过git clone将配置信息存于本地,起到了缓存的作用,即使当Git服务端无法访问的时候,依然可以取Config Server中的缓存内容进行使用.可以配置固定的缓存位置:spring.cloud.config.server.git.basedir=xxx;

(七):分布式服务跟踪:Sleuth(阿里的Tracing Analysis,收费的)

  • 服务链路追踪Spring Cloud Sleuth
  • 作用:跟踪微服务调用链情况.
    在复杂的微服务架构系统中,几乎每一个前端请求都会形成一条复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟过高或错误的时候都有可能引起请求最后的失败.这时候,对于每个请求,全链路调用的跟踪就变得越来越重要,通过实现对请求调用的跟踪可以帮助我们快速发现错误根源以及监控分析每条请求链路上的性能瓶颈等.

Part3:面试题

Part4:更多文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值