使用Sentinel都能做些什么,看完这篇文章大佬会有新的理

在这里插入图片描述

初始Sentinel

Sentinel是一款开源的分布式系统的实时监控和自动化故障恢复工具。它是阿里巴巴开源的一款分布式系统的流量控制和熔断降级组件,主要用于保护服务的稳定性。Sentinel提供了实时的流量控制、熔断降级、系统负载保护等功能,能够帮助开发者有效地保护应用程序,防止故障和异常情况的发生。

Sentinel的主要功能包括:

  1. 实时监控:Sentinel可以监控分布式系统中的各种指标,如QPS、CPU、内存等,并提供实时的监控数据和报警功能。

  2. 流量控制:Sentinel可以根据系统的负载情况来进行流量控制,以保证系统的稳定性和可靠性。

  3. 自动化故障恢复:Sentinel可以自动化地对系统中出现的故障进行恢复,以减少人工干预的成本和时间。

  4. 熔断降级:Sentinel可以根据系统的负载情况来进行熔断降级,以保证系统的稳定性和可靠性。

  5. 规则配置:Sentinel提供了丰富的规则配置功能,可以根据不同的应用场景来进行灵活的配置。

Sentinel的优点包括:

  1. 简单易用:Sentinel提供了一种简单易用的方式来保护分布式系统的稳定性和可靠性。

  2. 高效稳定:Sentinel采用了高效稳定的设计和实现,可以在大规模分布式系统中运行良好。

  3. 开源免费:Sentinel是一款开源的软件,可以免费使用和修改。

  4. 社区支持:Sentinel拥有一个活跃的开源社区,可以获得开发者们的支持和帮助。

总之,Sentinel是一款非常实用的分布式系统监控和自动化故障恢复工具,可以帮助开发者们更好地保护分布式系统的稳定性和可靠性。

Sentinel与Hystrix的对比

在之前的文章中介绍过Hystrix,也介绍过Hystrix组件提供给微服务断路器、资源隔离与自我修复功能,那么Sentinel与Hystrix有什么区别呢?

Sentinel和Hystrix都是流行的服务熔断/降级解决方案,它们的主要区别如下:

  1. 适用范围:Hystrix适用于Spring Cloud微服务框架,而Sentinel不仅适用于Spring Cloud,还适用于Dubbo、gRPC、Servlet等各种应用场景。

  2. 功能特性:Hystrix主要提供熔断、降级、限流和缓存等功能,Sentinel则提供了更丰富的功能,包括熔断、降级、限流、系统保护、热点参数限流、授权等

  3. 适用场景:Hystrix适用于单体应用和微服务架构中的服务熔断和降级,Sentinel则更适用于复杂的分布式系统中的服务治理和流量控制。

  4. 技术实现:Hystrix使用线程池和信号量来实现熔断和降级Sentinel则使用基于AOP的切面和字节码增强技术来实现流量控制和降级

对此做个小结:Hystrix更适合单体应用和简单的微服务架构,而Sentinel则更适合复杂的分布式系统和服务治理场景。

微服务整合Sentinel

在实际项目中,整合 Sentinel 可以分为以下几个步骤:

  1. 添加依赖

在项目的 pom.xml 文件中添加 Sentinel 的依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
  1. 配置 Sentinel

在项目的 application.yml 或 application.properties 文件中配置 Sentinel 的相关参数:

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080
      datasource:
        ds1:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-sentinel
            groupId: DEFAULT_GROUP
            rule-type: flow

其中,dashboard 属性指定了 Sentinel 控制台的地址,datasource 属性指定了 Sentinel 的数据源,这里使用了 Nacos 作为数据源。

  1. 配置 AOP

使用 Sentinel 需要在代码中添加 AOP 切面,对方法进行拦截和统计。在 Spring Boot 项目中,通常使用 @Aspect 注解和 @Pointcut 注解来定义切面和切点:

@Aspect
@Component
public class SentinelAspect {

    @Pointcut("@annotation(com.alibaba.csp.sentinel.annotation.SentinelResource)")
    public void sentinelPointcut() {
    }

    @Around("sentinelPointcut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        // 获取 Sentinel 资源名称
        String resourceName = point.getSignature().getName();
        SentinelResource annotation = AnnotationUtils.findAnnotation(point.getTarget().getClass(), SentinelResource.class);
        if (annotation != null && StringUtils.hasText(annotation.value())) {
            resourceName = annotation.value();
        }

        // Sentinel 限流和熔断
        Entry entry = null;
        try {
            entry = SphU.entry(resourceName);
            return point.proceed();
        } catch (BlockException e) {
            throw new RuntimeException("Blocked by Sentinel: " + e.getClass().getSimpleName());
        } finally {
            if (entry != null) {
                entry.exit();
            }
        }
    }
}

在上面的代码中,定义了一个名为 sentinelPointcut 的切点,使用 @Around 注解对该切点进行拦截和统计。在拦截方法时,先获取 Sentinel 资源名称,然后使用 SphU.entry 方法进入 Sentinel 保护的资源,如果被限流或熔断,则抛出异常。最后使用 entry.exit 方法退出资源。

  1. 使用 Sentinel

在需要保护的方法上添加 @SentinelResource 注解,指定资源名称和限流规则:

@Service
public class UserServiceImpl implements UserService {

    @Override
    @SentinelResource("getUserById")
    public User getUserById(Long id) {
        // 查询数据库
        return userDao.selectById(id);
    }
}

在上面的代码中,使用 @SentinelResource 注解指定了资源名称为 getUserById,表示该方法需要被 Sentinel 保护。如果该方法被限流或熔断,则会抛出异常。同时,可以在 Sentinel 控制台中配置限流规则,以控制该方法的访问频率和并发数。

  1. 启动 Sentinel 控制台

在本地启动 Sentinel 控制台,使用以下命令:

java -jar sentinel-dashboard-1.8.2.jar

然后在浏览器中访问 http://localhost:8080,即可进入 Sentinel 控制台,查看应用的监控数据和限流规则。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务