作者: 小柒
出处: https://blog.52itstyle.vip
Sentinel 是什么?
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Sentinel 具有以下特征:
- 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
- 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
- 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
- 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
Sentinel 的主要特性:
![94a4088d7e594398587a4f669ba5f9c1.png](https://i-blog.csdnimg.cn/blog_migrate/c047db3fe216f00954a7c0cfe6d0c2fa.jpeg)
Sentinel 的开源生态:
![88857a260ccc23911abad04a65b61c88.png](https://i-blog.csdnimg.cn/blog_migrate/3cb0c18572978317ea154d8901592e41.jpeg)
Sentinel 分为两个部分:
- 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
- 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。
控制台配置
Sentinel 控制台最少应该包含如下功能:
- 查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。
- 监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最终可以实现秒级的实时监控。
- 规则管理和推送:统一管理推送规则。
- 鉴权:生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。
可以直接从[ release 页面](https://github.com/alibaba/Sentinel/releases " release 页面") 下载最新版本的控制台 jar 包,启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本。。
启动脚本 sentinel.sh:
#!/bin/bashjava -Dsentinel.dashboard.auth.username=admin -Dsentinel.dashboard.auth.password=admin -Dserver.port=8084 -Dcsp.sentinel.dashboard.server=localhost:8084 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.6.3.jar &
用户可以通过如下参数进行配置:
- -Dsentinel.dashboard.auth.username=admin 用于指定控制台的登录用户名为 admin;
- -Dsentinel.dashboard.auth.password=admin 用于指定控制台的登录密码为 admin;如果省略这两个参数,默认用户和密码均为 sentinel;
- -Dserver.servlet.session.timeout=7200 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;
![72ceb012e4bcfea8e3fc0ec172711a14.png](https://i-blog.csdnimg.cn/blog_migrate/137a3bc0b13066bbb3898178533f6fb1.jpeg)
客户端配置
pom.xml 引入以下依赖:
org.springframework.boot spring-boot-starter-parent 2.1.5.RELEASEorg.springframework.boot spring-boot-starter-web com.alibaba.cloud spring-cloud-starter-alibaba-sentinel com.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.0.RELEASEpomimport
配置文件:
# 应用名称 https://blog.52itstyle.vipspring.application.name=blogspring.cloud.sentinel.transport.port=8720# 测试请替换为自己的地址spring.cloud.sentinel.transport.dashboard=116.190.247.112:8084
这里的 spring.cloud.sentinel.transport.port端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了1个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。
代码配置:
/** * 博文 https://blog.52itstyle.vip */@RequestMapping("{id}.shtml")@SentinelResource("blogView")public String page(@PathVariable("id") Long id, ModelMap model) { try{ Blog blog = blogService.getById(id); String key = "blog_"+id; Long views = redisUtil.size(key); blog.setViews(views+blog.getViews()); model.addAttribute("blog