设为首页 加入收藏

TOP

Sentinel入门到实操 (限流熔断降级)(一)
2023-07-26 08:16:09 】 浏览:135
Tags:Sentinel

微服务保护——Sentinel

介绍Sentinel

1.背景

Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址:https://sentinelguard.io/zh-cn/index.html

Sentinel 具有以下特征:

?丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

?完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

?广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

?完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

2. 服务保护技术对比

在SpringCloud当中支持多种服务保护技术:

早期比较流行的是Hystrix框架,但目前国内实用最广泛的还是阿里巴巴的Sentinel框架,这里我们做下对比:

Sentinel Hystrix
隔离策略 信号量隔离 线程池隔离/信号量隔离
熔断降级策略 基于慢调用比例或异常比例 基于失败比率
实时指标实现 滑动窗口 滑动窗口(基于 RxJava)
规则配置 支持多种数据源 支持多种数据源
扩展性 多个扩展点 插件的形式
基于注解的支持 支持 支持
限流 基于 QPS,支持基于调用关系的限流 有限的支持
流量整形 支持慢启动、匀速排队模式 不支持
系统自适应保护 支持 不支持
控制台 开箱即用,可配置规则、查看秒级监控、机器发现等 不完善
常见框架的适配 Servlet、Spring Cloud、Dubbo、gRPC 等 Servlet、Spring Cloud Netflix

3.安装Sentinel

1)下载

sentinel官方提供了UI控制台,方便我们对系统做限流设置。大家可以在GitHub下载。

课前资料也提供了下载好的jar包:

image

2)运行

将jar包放到任意非中文目录,执行命令:

java -jar sentinel-dashboard-1.8.1.jar

如果要修改Sentinel的默认端口、账户、密码,可以通过下列配置:

配置项 默认值 说明
server.port 8080 服务端口
sentinel.dashboard.auth.username sentinel 默认用户名
sentinel.dashboard.auth.password sentinel 默认密码

例如,修改端口:

java -Dserver.port=8090 -jar sentinel-dashboard-1.8.1.jar

3)访问

访问http://localhost:8080页面,就可以看到sentinel的控制台了:需要输入账号和密码,默认都是:sentinel

image

登录后,发现一片空白,什么都没有:这是因为我们还没有与微服务整合。

image

微服务整合Sentinel

四步骤:

0. 启动Nacos

进入到nacos的bin文件夹中cmd:startup.cmd -m standalone

1. 依赖

在指定微服务中导入该依赖

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

2. yaml配置文件

修改application.yaml文件,添加下面内容:

server:
  port: 8088 #微服务地址
spring:
  cloud: 
    sentinel:
      transport:
        dashboard: localhost:8080 #sentinel控制台访问地址

3. 访问任意接口

打开浏览器,访问任意接口 如:http://localhost:8088/order/101,这样才能触发sentinel的监控。

然后再访问sentinel的控制台,查看效果:

image

FeignClient整合Sentinel

整合后编写失败降级逻辑:就是请求失败后不是直接返回一个异常而是返回一个空对象(保证用户体验)

SpringCloud中,微服务调用都是通过Feign来实现的,因此做客户端保护必须整合Feign和Sentinel。

1. 修改配置文件

保证已经有了Feign和sentinel依赖

修改OrderService的application.yml文件,开启Feign的Sentinel功能:

feign:
  sentinel:
    enabled: true # 开启feign对sentinel的支持

2. 编写请求失败降级逻辑

业务失败后,不能直接报错,而应该返回用户一个友好提示或者默认结果,这个就是失败降级逻辑。

给FeignClient编写请求失败后的降级逻辑

①方式一:FallbackClass,无法对远程调用的异常做处理【不推荐】

②方式二:FallbackFactory,可以对远程调用的异常做处理【推荐】

这里我们演示方式二的请求失败降级处理。

步骤一:在feing-api项目中定义类,实现FallbackFactory:

image

代码:

package cn.itcast.feign.clients.fallback;

import cn.itcast.feign.clients.UserClient;
import cn.itcast.feign.pojo.User;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class UserClientFallbackFactory implements FallbackFactory<UserClient> {
    @Override
    public UserClient create(Throwable throwable) {
        return new UserClient() { //前提是必须有UserClient类和findById方法
            @Override
            public User findById(Long id) {
                log.error("查询用户异常", throwable);
                return new User();
            }
        };
    }
}

步骤二:在feing-api项目中的DefaultFeignConfiguration类中将UserCl

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【Spring】Bean装配类注解 下一篇二维数组的定义方式有几种

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目