Sentinel请求限流、线程隔离、服务熔断和Fallback

请求限流

新增限流规则,单机的QPS限制为6,1000次请求100s完成,只有60%通过,符合预期

响应的错误信息为,

线程隔离

限流可以降低服务器压力,尽量减少因并发流量引起的服务故障的概率,但并不能完全避免服务故障。一旦某个服务出现故障,我们必须隔离对这个服务的调用,避免发生雪崩。

比如,查询购物车的时候需要查询商品,为了避免因商品服务出现故障导致购物车服务级联失败

现在测试当cart查询请求过多,查询item商品模拟耗时慢,导致cart服务tomcat资源耗尽了

需要注意的是,默认情况下SpringBoot项目的tomcat最大线程数是200,允许的最大连接是8492,单机测试很难打满。

所以我们需要配置一下cart-service模块的application.yml文件,修改tomcat连接:

server:
  port: 8082
  tomcat:
    threads:
      max: 50 # 允许的最大线程数
    accept-count: 50 # 最大排队等待数量
    max-connections: 100 # 允许的最大连接

1.在查询items,sleep(500ms),模拟耗时,此时调用cart修改服务耗时正常

查询item异常(耗时久)

2.此时开启并发,对购物车进行查询,修改购物车和查询也变得很慢了

3.对get:/carts线程访问数量减少到5,减少tomcat压力。

这样限制完后对其他请求服务提供了保护,但是查询的效果变差了。

Fallback

fallback就是线程隔离后,失败的请求进行友好响应,直接把商品信息返回null

1.创建ItemClientFallbackFactory,实现FallbackFactory接口

@Slf4j
public class ItemClientFallbackFactory implements FallbackFactory<ItemClient> {

    @Override
    public ItemClient create(Throwable cause) {

        return new ItemClient() {
            @Override
            public List<ItemDTO> queryItemByIds(Collection<Long> ids) {
                log.error("查询商品失败!",cause);
                return CollUtils.emptyList();
            }

            @Override
            public void deductStock(List<OrderDetailDTO> items) {
                log.error("扣减商品失败!",cause);
                throw new RuntimeException(cause);
            }
        };
    }
}

2.注册到spring中管理

@Bean
public ItemClientFallbackFactory itemClientFallbackFactory(){
    return new ItemClientFallbackFactory();
}

3.配置到Feign客户端

进行测试,添加流控规则

此时就没有错误请求了,是直接给调用item客户端返回的异常修改为返回emptyList。

服务熔断

这个的作用是给一个规则,判断这个服务是否正常,如果不正常,就直接不调用这个服务直接熔断。从而减少资源的浪费。

思路是由断路器统计服务调用的异常比例、慢请求比例,如果超出阈值则会熔断该服务。即拦截访问该服务的一切请求;而当服务恢复时,断路器会放行访问该服务的请求。

对于商品服务这种不太健康的接口,我们应该停止调用,直接走降级逻辑,避免影响到当前服务。也就是将商品查询接口熔断。当商品服务接口恢复正常后,再允许调用。这其实就是断路器的工作模式了。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值