本文属于b站图灵课堂springcloud笔记系列。讲的好还不要钱,值得推荐。
为什么要引入限流组件?
在微服务环境下,服务之间存在复杂的调用关系,单个服务的故障或过载可能会迅速影响到整个系统,导致服务雪崩效应。流控组件可以限制进入系统的流量,防止系统因超出处理能力而崩溃。降级组件则在服务不可用或响应过慢时,提供降级逻辑,如返回备用数据或执行降级操作,以保证核心业务的正常运行.
sentinel是什么?
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
官方文档:
introduction | Sentinel
Sentinel 的使用可以分为两个部分:
- 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持(见 主流框架适配)。
- 控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。
安装sentinel 控制台
版本:
1.8.6
下载地址:Releases · alibaba/Sentinel · GitHub
启动:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
端口冲突可以更换。
访问控制台:http://127.0.0.1:8888/
从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel
注意,这只是本地测试,生成环境需要参照引入配置中心持久化规则:在生产环境中使用 Sentinel · alibaba/Sentinel Wiki · GitHub
整合微服务
以订单服务为例,引入sentinel。
1 订单服务pom引入依赖。
<!-- sentinel 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2 当 SpringBoot 应用接入 Sentinel starter 后,可以针对某个 URL 进行流控。所有的 URL 就自动成为 Sentinel 中的埋点资源,可以针对某个 URL 进行流控,就是springMVC接口不需要额外处理,非MVC接口使用@SentinelResource 注解用来标识资源是否被限流、降级。
3 修改application.yml 增加sentinel 配置。
spring:
cloud:
sentinel:
transport:
# 添加sentinel的控制台地址
dashboard: tlmall-sentinel-dashboard:8888
推荐使用nacos配置,Nacos配置中心创建一个dataId为sentinel-dashboard.yml的配置,导入sentinel的配置,在订单服务的application.yml引入sentinel-dashboard.yml
测试:
重启订单服务,先访问一次,在dashboard有记录。
配置后:postman接口就会提示限流
小结:通过sentinel可以实现微服务的流控降级。
规则持久化等后面再整理。