ppt模板网站大全,哈尔滨网站建设教程,网站建设素材模板,手机网站404页面文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离2.3、熔断降级2.3.1、断路器状态机2.3.2、断路器熔断策略2.3.2.1、慢调用2.3.2.2、异常比例#xff0c;异常数… 文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离2.3、熔断降级2.3.1、断路器状态机2.3.2、断路器熔断策略2.3.2.1、慢调用2.3.2.2、异常比例异常数 2.4、授权规则 一、微服务雪崩及解决方法 微服务中服务间调用关系错综复杂一个微服务往往依赖于多个其它微服务。如果有服务提供者发生故障当前应用的部分业务因为依赖于这些服务提供者因此也会被阻塞。用户得不到响应则微服务的这个线程不会释放于是越来越多的用户请求到来越来越多的线程会阻塞微服务支持的线程和并发数有限请求一直阻塞会导致服务器资源耗尽从而导致所有其它服务都不可用那么当前服务也就不可用了。
解决雪崩问题的常见方式有四种
1.1、超时处理 设定超时时间请求超过一定时间没有响应就返回错误信息不会无休止等待。
1.2、仓壁模式
仓壁模式来源于船舱的设计 船舱都会被隔板分离为多个独立空间当船体破损时只会导致部分空间进水将故障控制在一定范围内避免整个船体都被淹没。 与此类似我们可以限定每个业务能使用的线程数避免耗尽整个服务器的资源因此也叫线程隔离。如图每个业务分配10个线程服务c的故障导致业务2的资源耗尽但不会影响业务1从而不会影响服务A也就不会引发雪崩。
1.3、断路器 由断路器统计业务执行的异常比例如果超出阈值则会熔断该业务拦截访问该业务的一切请求。 如上图所示总共有三个请求两个都失败了此时认为任务请求失败率过高需要断开服务A对服务D的请求于是后续服务A到服务D的请求都会被熔断如下图
1.4、限流 流量控制限制业务访问的QPS避免服务因流量的突增而故障。 总结
限流是对服务的保护避免因瞬间高并发流量而导致服务故障进而避免雪崩。是一种预防措施。超时处理、线程隔离、降级熔断是在部分服务故障时将故障控制在一定范围避免雪崩。是一种补救措施。
二、Sentinel 在SpringCloud当中支持多种服务保护技术Netfix Hystrix、Sentinel、Resilience4。早期比较流行的是Hystrix框架但目前国内实用最广泛的还是阿里巴巴的Sentinel框架。Sentinel是阿里巴巴开源的一款微服务流量控制组件。Sentinel 具有以下特征:
丰富的应用场景Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景例如秒杀即突发流量控制在系统容量可以承受的范围、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据甚至 500 台以下规模的集群的汇总运行情况。广泛的开源生态Sentinel 提供开箱即用的与其它开源框架/库的整合模块例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。完善的 SPI 扩展点Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
2.1、流量控制
2.1.1、普通限流 当请求进入微服务时首先会访问DispatcherServlet然后进入Controller、Service、Mapper这样的一个调用链就叫做簇点链路。簇点链路中被监控的每一个接口就是一个资源。 默认情况下sentinel会监控SpringMVC的每一个端点Endpoint也就是controller中的方法因此SpringMVC的每一个端点Endpoint就是调用链路中的一个资源。 例如我们刚才访问的order-service中的OrderController中的端点/order/{orderId}访问Sentinel网址可以看到下图 流控、熔断等都是针对簇点链路中的资源来设置的因此我们可以点击对应资源后面的按钮来设置规则
流控流量控制降级降级熔断热点热点参数限流是限流的一种授权请求的权限控制 点击资源/order/{orderId}后面的流控按钮就可以弹出表单。在表单中可以填写设置信息还可以利用压测工具进行测试等。 点击图中的高级选项还可以设置流控模式和流控效果。目前工作中还未接触到微服务保护的内容这次只做基本记录知道有这个东西即可。
2.1.2、热点参数限流 之前的限流是统计访问某个资源的所有请求判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求判断是否超过QPS阈值。 限流是一种预防措施虽然限流可以尽量避免因高并发而引起的服务故障但服务还会因为其它原因而故障。而要将这些故障控制在一定范围避免雪崩就要靠线程隔离舱壁模式和熔断降级手段了。
2.2、线程隔离 线程隔离之前讲到过调用者在调用服务提供者时给每个调用的请求分配独立线程池出现故障时最多消耗这个线程池内资源避免把调用者的所有资源耗尽。线程隔离是对客户端调用方的保护需要在调用方 发起远程调用时做线程隔离。
2.3、熔断降级 熔断降级是解决雪崩问题的重要手段。其思路是由断路器统计服务调用的异常比例或慢请求比例如果超出阈值则会熔断该服务即拦截访问该服务的一切请求。而当服务恢复时断路器会放行访问该服务的请求。
2.3.1、断路器状态机 断路器控制熔断和放行是通过状态机来完成的。状态机有三个状态 状态机包括三个状态
closed关闭状态断路器放行所有请求并开始统计异常比例、慢请求比例。超过阈值则切换到open状态open打开状态服务调用被熔断访问被熔断服务的请求会被拒绝快速失败直接走降级逻辑。Open状态5秒后会进入half-open状态half-open半开状态放行一次请求根据执行结果来判断接下来的操作。 请求成功则切换到closed状态请求失败则切换到open状态
2.3.2、断路器熔断策略
断路器熔断策略有三种慢调用、异常比例、异常数。
2.3.2.1、慢调用 业务的响应时长RT大于指定时长的请求认定为慢调用请求。在指定时间内如果请求数量超过设定的最小数量慢调用比例大于设定的阈值则触发熔断。
例如 解读 RT超过500ms的调用是慢调用统计最近10000ms内的请求如果请求量超过10次并且慢调用比例不低于0.5则触发熔断熔断时长为5秒。然后进入half-open状态放行一次请求做测试。
2.3.2.2、异常比例异常数 统计指定时间内的调用如果调用次数超过指定请求数并且出现异常的比例达到设定的比例阈值或超过指定异常数则触发熔断。
例如一个异常比例设置 解读统计最近1000ms内的请求如果请求量超过10次并且异常比例不低于0.4则触发熔断。 一个异常数设置 解读统计最近1000ms内的请求如果请求量超过10次并且异常比例不低于2次则触发熔断。
2.4、授权规则 授权规则可以对调用方的来源做控制有白名单和黑名单两种方式。前面学习微服务时可以利用网关实现访问控制但是如果出现“内鬼”直接泄露微服务信息外部人员可以绕过网关直接访问微服务此时就可以利用授权规则来避免。 白名单来源origin在白名单内的调用者允许访问 黑名单来源origin在黑名单内的调用者不允许访问
点击左侧菜单的授权可以看到授权规则 比如 我们允许请求从gateway到order-service不允许浏览器访问order-service那么白名单中就要填写网关的来源名称origin。