当前位置: 首页 > news >正文

Sentinel入门

简介:

Sentinel是阿里巴巴开源的一款用于流量控制、熔断降级和系统负载保护的库。它可以帮助开发者实现对分布式系统中的服务进行流量控制,避免因为流量激增而导致系统崩溃或服务质量下降。

Sentinel主要功能包括:

  1. 流量控制:Sentinel可以对应用程序的入口流量进行实时的监控和控制,通过设定阈值来限制并发请求的数量,防止系统因为过多请求而崩溃或过载。

  2. 熔断降级:当系统中的某个服务出现故障或不稳定时,Sentinel可以实现熔断,停止向该服务发送请求,避免整个系统的连锁故障,同时提供降级策略来保证系统的可用性。

  3. 系统负载保护:Sentinel可以监控系统的负载情况,根据系统负载自动调整流量控制策略,避免系统负载过高导致性能下降。

  4. 实时统计和监控:Sentinel提供了实时的统计信息和监控面板,方便开发人员实时查看系统的运行状态和流量情况,及时进行调整和优化。

总的来说,Sentinel是一款强大的流量控制和系统保护库,可以帮助开发者构建健壮的分布式系统,提高系统的稳定性和可靠性。

可解决问题:

服务雪崩
是指因为一个服务出现问题,导致依赖它的服务也受到影响,进而让整个系统 延迟或失效的现象
称为雪崩。
雪崩的解决方案
隔离 业务隔离、线程池隔离、信号量隔离?
超时设置 远程调用时设置最大响应时间
限流 限制系统的输入和输出流量,以达到保护系统的目的。
熔断 当下游服务因访问压力过大而变慢时,上游暂时切断对下游服务的调用。 这种牺牲局部
保全部的措施称为熔断。
降级 托底方案。

对比:

具体应用:

下载与启动:

java -jar sentinel-dashboard-1.6.3.jar

引入依赖

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
添加配置
spring:
application:
name: sentinel-service
cloud:
nacos:
discovery:
server-addr: localhost:8848
sentinel:
transport:
dashboard: localhost:8080 # dashboard服务地址
port: 8719 #??

限流

先访问,后设置规则。
@GetMapping("/byResource")
@SentinelResource(value = "根据资源", blockHandler = "handleRateLimit")
public String getResource() {
return "byResource";
}
@GetMapping("/byUrl")
public String getByUrl() {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return "byUrl";
}
public String handleRateLimit(BlockException exception) {
return "被流控了!";
}
规则持久化
1. 添加依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2. 在流控应用中添加配置 所谓流控应用,就是要施加持久流控规则的应用。在其
application.yml 中添加:
spring:
cloud:
sentinel:
datasource:
ds1:
nacos:
server-addr: localhost:8848
data-id: ${spring.application.name}
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
3. nacos 中添加对应的配置 服务名使用上述 ${spring.application.name} 指定的 user( 我的应
用服务名为 user).
[
{
"resource": "/user/{id}",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]

熔断

1. RestTemplate 熔断
使用 @SentinelRestTemplate 修饰 RestTemplate 实现
@Bean
@SentinelRestTemplate
public RestTemplate restTemplate() {
return new RestTemplate();
}
2. Feign 熔断 记得在配置中打开
feign:
sentinel:
enabled: true
定义接口
@FeignClient(value="", fallback=UserServiceFallback.class)
public interface UserService {
}

降级

Feign也支持服务降级,本质上它就是使用Hystrix来实现的。
修改Feign接口
@FeignClient(name="house", fallback = HouseFeignServiceFallback.class)
新建降级fallback类
降级类要实现上面定义的接口,并实现降级方法,另外注意在降级类上添加@Service注解,以纳入spring管理
@Service
public class OrderServiceCallback implements OrderServiceFeign{@Overridepublic Integer getOrderNumberOfUser(Long id) {return 22;}@Overridepublic Map postOrderNumberOfUser(Long id) {Map result = new HashMap();result.put("number",23);return result;}
}

改配置

因为feign也是使用hystrix实现的降级,且默认没有打开降级支持,所以这里需要打开hystrix功能

feign:hystrix:enabled: true
打开日志

打开Feign调用日志,方便查找问题。

//注意,需要放在被@Configuration修饰的类中
@Bean
Logger.Level feignLogLevel() {return Logger.Level.FULL;
}

同时,需要配置yml文件中的日志等级。

logging:level:org.example.service: debug

相关文章:

  • Linux文件IO(2):使用标准IO进行文件的打开、关闭、读写、流定位等相关操作
  • 基于Java在线考试系统系统设计与实现(源码+部署文档)
  • 算法---动态规划练习-6(地下城游戏)
  • ​马来语翻译中文去哪比较好?
  • 反序列化动态调用 [NPUCTF2020]ReadlezPHP1
  • Redis 特性,为什么要用Redis,Redis到底是多线程还是单线程
  • 如何使用 ArcGIS Pro 制作三维建筑
  • Spring和Spring Boot之间的区别
  • 非wpf应用程序项目【类库、用户控件库】中使用HandyControl
  • IDEA设置内存大小不生效
  • 二、数据库管理员密码管理
  • CSS及javascript
  • Oracle AI Vector Search Multi-Vector Similarity Search 即多向量相似度检索学习笔记
  • 解决PATH变量污染的问题
  • 银河麒麟服务器操作系统V10SP1在登录界面显示启动会话失败
  • [译]Python中的类属性与实例属性的区别
  •  D - 粉碎叛乱F - 其他起义
  • javascript面向对象之创建对象
  • Material Design
  • vue-router的history模式发布配置
  • 工程优化暨babel升级小记
  • 类orAPI - 收藏集 - 掘金
  • 前端技术周刊 2019-02-11 Serverless
  • 思否第一天
  • 算法系列——算法入门之递归分而治之思想的实现
  • 听说你叫Java(二)–Servlet请求
  • 用Python写一份独特的元宵节祝福
  • FaaS 的简单实践
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #控制台大学课堂点名问题_课堂随机点名
  • $.ajax()方法详解
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (2022 CVPR) Unbiased Teacher v2
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (蓝桥杯每日一题)love
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转) 深度模型优化性能 调参
  • .NET : 在VS2008中计算代码度量值
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .Net core 6.0 升8.0
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET微信公众号开发-2.0创建自定义菜单
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @Transaction注解失效的几种场景(附有示例代码)
  • [\u4e00-\u9fa5] //匹配中文字符
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票