前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍Sentinel的概念,优点,与Hystrix的对比以及微服务中整合Sentinel,后续文章将详细介绍Sentinel的细节部分。
如果文章有什么需要改进的地方还请大佬不吝赐教
小威在此先感谢各位大佬啦~~

个人主页:小威要向诸佬学习呀
个人简介:大家好,我是小威,一个想要与大家共同进步的男人
目前状况:24届毕业生,在一家满意的公司实习

欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬

以下正文开始

文章目录

  • 初始Sentinel
  • Sentinel与Hystrix的对比
  • 微服务整合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:8080datasource:ds1:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-sentinelgroupId: DEFAULT_GROUPrule-type: flow

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

  1. 配置 AOP

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

@Aspect@Componentpublic 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 注解,指定资源名称和限流规则:

@Servicepublic 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 控制台,查看应用的监控数据和限流规则。

图书推荐

本期图书推荐为《Java并发编程实战》

《Java并发编程实战》适读人群 :有Java开发经验的开发者。
*十年畅销100000册,Java并发编程经典图书。本书不仅讲解了并发的理论基础,还介绍了各种实际的开发技术。书中并不是简单罗列出各种并发API及机制,而是详细介绍了许多设计原则、设计模式及思维模式,可帮助开发人员构建出正确的、高性能的并发程序。

粉丝福利:评论区任意留言可参与活动抽奖(可评论最多五条,抽取三名欧皇)

京东自营购买链接:点击查看详情

好了,本篇文章就先分享到这里了,后续将会继续介绍sentinel详细的限流规则等方面的知识,感谢大佬认真读完支持咯~

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论
希望能和诸佬们一起努力,今后我们顶峰相见
再次感谢各位小伙伴儿们的支持