这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战
学习视频(B站):www.bilibili.com/video/BV1Mt…
GitHub 源码地址:github.com/tyronczt/sp…
简介
Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。
雪崩效应
如果在A的链路上某个或几个被调用的子服务不可用或延迟较高,则会导致调用A服务的请求被堵住。堵住的请求会消耗占用掉系统的线程、io等资源,当该类请求越来越多,占用的计算机资源越来越多的时候,会导致系统瓶颈出现,造成其他的请求同样不可用,最终导致业务系统崩溃,又称:雪崩效应。
解决方案
- 设置线程超时
- 设置限流
- 熔断器 Sentinel、Hystrix
- 降级:在高并发情况下,防止用户一直等待,使用服务降级方式(直接返回一个友好的提示给客户端,调用fallBack方法)
- 限流:服务限流就是对接口访问进行限制,常用服务限流算法令牌桶、漏桶,计数器也可以进行粗暴限流实现。
- 熔断:熔断机制目的为了保护服务,在高并发的情况下,如果请求达到一定极限(可以自己设置阔值)如果流量超出了设置阈值,让后直接拒绝访问,保护当前服务。
集成Sentinel
- provider 的 pom.xml 引入依赖
1 | xml复制代码<dependency> |
- application.yml 配置
1 | yaml复制代码# 配置限流路径 |
- 下载 Sentinel 控制台,解压,启动,下载地址:github.com/alibaba/Sen…
用户名/密码:sentinel/sentinel
实时监控
当访问provider项目中index接口时 [http://localhost:3333/index],sentinel会将流量实时记录,每十秒刷新:
簇点链路
流控规则
一般阈值类型选择QPS(Query Per Second每秒查询率)
直接限流
选择单机阈值为1时,即表示每秒查询超过1时,即被流量限制,默认提示:Blocked by Sentinel (flow limiting)
关联限流
流控模式为 **关联 **时,输入关联资源,如list,即效果为:当list超过阈值时,index限制访问
模拟访问list接口:
1 | java复制代码public static void main(String[] args) throws InterruptedException { |
效果:
链路限流
主要对service或dao层的接口进行限流保护。
pom.xml 添加依赖
1 | xml复制代码<dependency> |
修改配置文件application.yml
1 | yaml复制代码spring: |
添加配置类
1 | java复制代码@Configuration |
Service层
1 | java复制代码@Service |
Controller层
1 | java复制代码@Autowired |
配置规则
访问:http://localhost:3333/provider2,当QPS超过1时,提示500
本文转载自: 掘金