谷粒商城:Feign+Sentinel 测试熔断降级

简介: 谷粒商城:Feign+Sentinel 测试熔断降级

参考文档

什么是熔断降级

除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。由于调用关 系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。

Sentinel 和 Hystrix 的原则是一致的: 当检测到调用链路中某个资源出现不稳定的表现,例如请求响应时间长或异常比例升高的时候,则对这个资源的调用进行限制,让请求快速失败, 避免影响到其它的资源而导致级联故障。

熔断降级设计理念

在限制的手段上,Sentinel 和 Hystrix 采取了完全不一样的方法。Hystrix 通过 线程池隔离的方式,来对依赖(在 Sentinel 的概念中对应 资源)进行了隔离。这样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换的成本(过多的线程池导致线程数目过多),还需要预先给各个资源做线程池大小的分配。

Sentinel 对这个问题采取了两种手段

 通过并发线程数进行限制

和资源池隔离的方法不同,Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其 它资源的影响。这样不但没有线程切换的损耗,也不需要您预先分配线程池的大小。当某个 资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步 堆积。当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积 的线程完成任务后才开始继续接收请求。

 通过响应时间对资源进行降级

除了对并发线程数进行控制以外,Sentinel 还可以通过响应时间来快速降级不稳定的资源。 当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的 时间窗口之后才重新恢复。

整合测试

1、引入依赖

1. <dependency>
2.     <groupId>org.springframework.cloud</groupId>
3.     <artifactId>spring-cloud-starter-openfeign</artifactId>
4. </dependency>
5. <dependency>
6.     <groupId>com.alibaba.cloud</groupId>
7.     <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
8. </dependency>

2、使用 Nacos 注册中心

1. <dependency>
2.     <groupId>com.alibaba.cloud</groupId>
3.     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
4. </dependency>

3、定义 fallback 实现

1. public class OrderFeignServiceFallBack implements OrderFeignService {
2. 
3. @Override
4. public Resp<OrderVo> getOrderInfo(String orderSn) {
5. return null;
6.     }
7. }

4、定义 fallbackfactory 并放在容器中

1. @Component
2. public class OrderFeignFallbackFactory implements
3. FallbackFactory<OrderFeignServiceFallBack> {
4. @Override
5. public OrderFeignServiceFallBack create(Throwable throwable) {
6. 
7. return new OrderFeignServiceFallBack(throwable);
8.     }
9. }

5、改造 fallback 类接受异常并实现容错方法

1. public class OrderFeignServiceFallBack implements OrderFeignService {
2. 
3. private Throwable throwable;
4. 
5. public OrderFeignServiceFallBack(Throwable throwable){
6. 
7. this.throwable = throwable;
8.     }
9. 
10. @Override
11. public Resp<OrderVo> getOrderInfo(String orderSn) {
12. return Resp.fail(new OrderVo());
13.     }
14. }

6、远程接口配置 feign 客户端容错

1. @FeignClient(value = "gulimall-oms",fallbackFactory =OrderFeignFallbackFactory.class)
2. public interface OrderFeignService {
3. 
4. @GetMapping("/oms/order/bysn/{orderSn}")
5. public Resp<OrderVo> getOrderInfo(@PathVariable("orderSn") StringorderSn);
6. }

7、开启 sentinel 代理 feign 功能;在 application.properties 中配置

feign.sentinel.enabled=true

更快的容错方式

1、使用@SentinelResource,并定义 fallback

@SentinelResource(value = "order",fallback = "e")

Fallback 和原方法签名一致,但是最多多一个 Throwable 类型的变量接受异常。

需要给容器中配置注解切面

1. 
2. @Bean
3. public SentinelResourceAspect sentinelResourceAspect() {
4. 
5. return new SentinelResourceAspect();
6. }

在控制台添加降级策略

2、测试降级效果

当远程服务停止,前几个服务会尝试调用远程服务,满足降级策略条件以后则不会再尝试调 用远程服务

相关文章
|
5月前
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
151 3
|
2月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
1月前
|
JavaScript
vue尚品汇商城项目-day07【55.编码测试与打包发布项目】
vue尚品汇商城项目-day07【55.编码测试与打包发布项目】
31 3
|
1月前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
40 0
|
2月前
|
监控 Java API
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
先简单介绍熔断、降级等核心概念,然后阐述SpringBoot整合Sentinel的实现方式,最后介绍Sentinel在本项目中的应用。
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
|
4月前
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
|
5月前
|
监控 Java API
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
131 0
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
|
5月前
|
自然语言处理 监控 开发者
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
122 0
|
9天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
38 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
59 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)