IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Cloud Alibaba 快速入门(四):Sentinel接口限流和熔断降级 -> 正文阅读

[Java知识库]Spring Cloud Alibaba 快速入门(四):Sentinel接口限流和熔断降级

前言:随着微服务的流行,服务和服务之间的稳定性变得越来越重要。阿里开源的Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩”效应,为微服务系统提供了稳定性的解决方案。

?一、服务降级和服务熔断的区别

一个分布式应用会依赖多个服务,每个服务可能会存在多个实例,服务依赖的中间件也可能是分布式的,当应用规模足够大,某个节点出现故障的概率也因此增加。在分布式系统中,应把故障当作应用的一部分,我们需要保证当某个节点出现故障时整个应用依然能正常运行,要避免服务雪崩。

  • 服务雪崩:服务雪崩效应是一种因“服务提供者的不可用”(原因)导致“服务调用者不可用”(结果),并将不可用逐渐放大的现象。为了防止服务雪崩,我们一般采用熔断降级的方式应对。

  • 服务熔断:当下游的服务因为某种原因突然变得不可用或响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

  • 服务降级:当系统负荷过载或响应慢,舍弃一些非核心业务,缓解系统压力,维持核心业务正常运行,保证整个系统的稳定性和可用性。

熔断和降级的到底有啥区别,我个人理解是: 服务降级有很多种降级方式,服务熔断属于降级方式的一种,服务降级是更广泛的方案。服务降级需要将服务按级别进行分类,优先对影响较小的服务进行降级。

服务降级方式:

  • 页面拒绝服务:此服务暂停,页面提示由于服务繁忙。

  • 服务接口拒绝服务:只读,对于增删改接口提示服务器繁忙。

  • 延迟持久化:页面正常访问,涉及变更将数据记录到异步队列或log,服务恢复后执行。

  • 随机拒绝服务:服务接口随机拒绝服务,让用户重试,用户体验不佳。

熔断降级的开源方案:Neflix的Hystrix和阿里巴巴的Sentinel,随着Hytrxi进入了维护期,推荐使用Sentinel。


?二、Sentinel简介

2.1、什么是Sentinel

阿里开源的Sentinel组件,中文翻译为哨兵,是为微服务提供流量控制、熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩”效应,为微服务系统提供了稳定性的解决方案。随着Spring Cloud的Hytrxi进入了维护期,不再提供新功能,Sentinel是一个不错的替代方案。

通常情况,Hystrix采用线程池对服务的调用进行隔离,Sentinel才用了用户线程对接口进行隔离,二者相比,Hystrxi是服务级别的隔离,Sentinel提供了接口级别的隔离,Sentinel隔离级别更加精细,另外Sentinel直接使用用户线程进行限制,相比Hystrix的线程池隔离,减少了线程切换的开销。另外Sentinel的DashBoard提供了在线更改限流规则的配置,也更加的优化。

2.2、Sentinel 特征

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

2.3、Sentinel 的主要特性

Sentinel 分为两个部分:

核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。

控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

2.4、Sentinel主要功能:流量控制、熔断降级、系统负载保护

  • 流量控制:流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:

bd29d078ac6c8ec201dde13ad36c74e9.png

  • 熔断降级:Sentinel的熔断降级功能和Hystrix要解决的问题及设计原则是一致的,就是在分布式系统中某个依赖服务出现问题的时候,不要让问题蔓延到整个系统。但是Sentinel的设计思路和Hystrix不同,它采取了两种手段来实现这个目标——限制并发线程;通过响应时间对资源访问进行降级。

  • 系统过载保护:当系统负载过高的时候,如果还持续让请求进入。则可能导致系统崩溃、无法响应。Sentinel提供了对应的保护机制,把系统处理请求的过程想象为一个水管,让系统的入口流量和系统的负载达到平衡,保证系统在能力范围之内处理更多请求。

9064f29d083b8b40f543abe67f61f474.png


三、Sentinel安装

Sentinel分为:服务端和客户端

服务端有可视化界面,便于操作,功能十分强大和实用。

客户端如果是maven项目,需引入jar后,大家都知道,既然分为服务端和客户端,客户端必须配置连接服务端的地址,即可和服务端通信并完成限流功能。

找到Sentinel服务端官方地址,下载jar,地址:https://github.com/alibaba/Sentinel/releases


启动jar即可,由于我是在windows搭建的,进入jar所在目录,在地址栏目输入 cmd,进入命令窗口,输入命令:java -jar sentinel-dashboard-1.8.2.jar

?访问web地址:http://localhost:8080 ? 默认用户名和密码都是sentinel/sentinel,然后进入首页

?至此Sentinel服务端搭建完成,接下来使用微服务快速集成sentinel


四、Sentinel快速集成

4.1、pom.xml中引入依赖

<!-- sentinel -->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
	<version>2.1.0.RELEASE</version>
</dependency>

4.2、order-service服务添加Sentinel配置项

# 应用名称
spring.application.name=order-service
server.port=9001

# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public

# sentinel 配置
# Sentinel 控制台地址(启动Sentinel时可以指定端口,这里配置与之保持一致即可) 
spring.cloud.sentinel.transport.dashboard=localhost:8080
#心跳发送周期,默认值null,但在SimpleHttpHeartbeatSender会用默认值10秒
spring.cloud.sentinel.transport.heartbeat-interval-ms=500

4.3、启动客户端服务order-service,调用OrderController的接口,可在Sentinel管理界面查看客户端信息,如图:

4.4、流量控制规则配置

给remoteProduct接口添加流控规则,它的QPS(每秒请求数)为1,如图:

通过频繁调用remoteProduct查询接口,通过监控可以看到如图信息:?

?发现刷新点快了,确实会被限流拒绝

?4.5、熔断降级规则配置

给remoteProduct接口添加一个熔断降级规则配置,如果QPS大于1,且平均响应时间大于20ms,则接口下来接口在2秒钟无法访问,之后自动恢复。

?热点,授权等操作,根据自己需求自行配置即可,至此集成完毕。

4.6、Sentinel 提供了@SentinelResource注解用于定义资源,并提供了AspectJ的扩展用于自定义资源,处理BlockException等。

现在我们了解到通过Sentinel控制对Spring mvc接口层级的控制,那么在我们实际项目开发时不仅仅限于接口,可能对于某个方法的调用限流,对于某个外部资源的调用限流等都希望做到控制。


?参考链接:

服务降级和服务熔断的区别

Spring Boot2 集成 Sentinel 实现接口流制和降级

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 08:53:50  更:2021-08-28 08:54:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:32:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码