微服务:保护

什么是雪崩:

  微服务见相互调用,服务提供者出现故障或阻塞,导致资源耗尽。服务被提供者也会产生相应的故障或阻塞,最终影响绝大部分服务:调用链中所有服务级联调失败,整个集群故障

解决方案:

  1.请求限流:限制访问微服务的请求的并发量,避免因服务激增而导致故障

  2.线程隔离:通过限定每个业务能使用的线程数量而将故障业务隔离,避免故障扩散

  3.服务熔断:断路器统计请求异常的比例或者慢调用比例,超过阈值会熔断该业务,拦截该请求接口。一旦发生熔断,所有请求快速失败,全都走fallback逻辑(返回默认提示)

 

接下来使用阿里的sentinel:sentinel是一款服务流量控制组件

引入过程:https://github.com/alibaba/Sentinel/releases 安装最新版sentinel

引入依赖:

        <!--sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

yaml:


spring:
cloud:
sentinel:
transport:
dashboard: localhost:8090 # 标记仪表盘的位置信息
http-method-specify: true # 把请求方式+请求路径作为簇点资源名称
 

什么是簇点链路:单机调用的链路。一次请求进入服务后经过的每一个被sentinel监控的资源链。默认sentinel只会监控endpoint

什么是endpoint:是一个restful风格的api,用于提供与应用程序运行时相关的信息和操作:可以通过endpoint查看健康状况、配置信息、日志信息等;也可以通过他来进行重新加载应用程序,关闭应用程序。简单来讲他是controller里的接口

 

如何进行请求限流:选择簇点链路添加流控 阈值类型为QPS

如何进行线程隔离:同上,但是阈值类型为并发线程数

 

如何添加fallback:

1.创建fallbackFactory,对指定client类继承,重写的是查询失败的逻辑

@Slf4j
public class ItemClientFallbackFactory implements FallbackFactory<ItemClient> {
    @Override
    public ItemClient create(Throwable cause) {
        return new ItemClient() {
            @Override
            public List<ItemDTO> queryItemsByIds(Collection<Long> ids) {
                log.info("查询商品服务失败,{}",cause.getMessage());
                return CollUtils.emptyList();
            }

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

2.在config中进行bean注册

3.在client接口处使用fallbackFactory

4.在消费者模块中添加配置feign-sentinel-enable: true

 

如何进行服务熔断:

 

 

 

posted on 2024-04-29 20:44  天启A  阅读(3)  评论(0编辑  收藏  举报

导航