?🎉🎉欢迎来到我的CSDN主页!🎉🎉
🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚
🌟推荐给大家我的博客专栏《SpringCloud开发之Sentinel--服务容错的应用》。🎯🎯
🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁
? ? ? ? 在上一期的博客分享中我们对其网关的概念基知识有了一个初步的了解,以及还对其网关的路由进行了一个初步的了解。本期博客基于上一期的博客进行一个扩展延伸对其使用示例,本期带来的是Sentinel--服务容错的应用。
???????? Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量 为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。这个框架的主要目标是在分布式系统中解决服务的可用性、稳定性和性能问题。它能够帮助开发者在复杂的微服务架构中实现对服务的保护和管理。
丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即 突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
完备的实时监控:Sentinel 提供了实时的监控功能。通过控制台可以看到接入应用的单台机器秒 级数据, 甚至 500 台以下规模的集群的汇总运行情况。
广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块, 例如与 Spring Cloud、Dubbo、gRPC 的整合。只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
????????Sentinel的主要功能就是容错,主要体现为下面这三个:
流量控制: Sentinel 提供了各种流量控制的策略,包括基于 QPS(每秒查询率)的流量控制、并发线程数控制等,可以有效地对服务的访问进行限制和管理,防止突发流量对系统造成影响。
熔断降级: 通过定义规则和监控系统状态,Sentinel 能够在服务出现故障或超出阈值时,进行熔断降级,避免故障的传递和影响到整个系统,保障核心服务的可用性。
系统负载保护: Sentinel 可以根据系统负载情况动态调整流量控制策略,防止因为负载过重而导致系统性能下降。
实时监控和统计: Sentinel 提供了实时的监控和统计功能,可以实时查看服务的运行状态和流量情况,帮助开发者及时发现问题并进行调整。
灵活扩展性: Sentinel 提供了灵活的扩展点和插件机制,可以根据具体业务场景定制化定制相关的策略和功能。
? ? ? ? 总之通过以上功能,Sentinel 可以帮助开发者有效地保护和管理分布式系统中的服务,提升系统的稳定性、可用性和性能。在微服务架构中,Sentinel 扮演着重要的角色,为服务的健壮性提供了强有力的支持。
核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等 应用容器。
????????为微服务集成Sentinel非常简单, 只需要加入Sentinel的依赖即可。我们在生产者的pom文件中引入
<!--引入sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
????????Sentinel 提供一个轻量级的控制台, 它提供机器发现、单机资源实时监控以及规则管理等功能。 ????????
? ? ? ? 网址:Releases · alibaba/Sentinel · GitHub
# 直接使用jar命令启动项目(控制台本身是一个SpringBoot项目)
java -Dserver.port=9999 -Dcsp.sentinel.dashboard.server=localhost:9999 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.0.jar#参考1
java -jar sentinel-dashboard-1.8.1.jar --server.port=8080
#参考2
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar
? ? ? ? 启动与启动成功?
? ? ? ? 因为我们所有的服务都是在nacos中所以我们要进行对应的配置
sentinel:
transport:
port: 8719
dashboard: localhost:9999
# 是否提前加载
eager: true
? ? ? ? 我们启动服务进行网页访问,这是我们启动后进行访问的登陆界面
? ? ? ? ?我们输入账号和密码进行登陆进入首页
????????了解控制台的使用原理:
?
? ? ? ? 我们启动生产者的服务,访问生成者的请求方法。
? ? ? ? 由上述动图所示,我们的多次请求一个请求方法,我们到Sentinel控制台官网中可以对其服务进行一个监管查看
? ? ? ? 我们采用jmeter工具进行模拟测试,网址如下
Apache JMeter - Apache JMeter?
下载进行解压,在bin目录下的又一个jmeter.bat是我们window进行启动使用的,双击使用。启动后的黑窗口别叉掉,启动之后会自动弹出一个窗口????????
? ? ? ? 我们新建一个线程组进行简单测试
?
? ? ? ? 然后我们进行线程测试?
????????流量控制,其原理是监控应用流量的QPS(每秒查询率) 或并发线程数等指标,当达到指定的阈值时 对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
?????????第1步: 点击簇点链路,我们就可以看到访问过的接口地址,然后点击对应的流控按钮,进入流控规则配置页面。新增流控规则界面如下:
? ? ? ? 方法测试?
? ? ? ? 右上图所示,我们一秒访问两次则第二次会显示限流的提示,因为我设置的是一秒只允许访问一个。?
资源名:唯一名称,默认是请求路径,可自定义 针对来源:指定对哪个微服务进行限流,默认指default,意思是不区分来源,全部限制
阈值类型/单机阈值:
QPS(每秒请求数量): 当调用该接口的QPS达到阈值的时候,进行限流
线程数:当调用该接口的线程数达到阈值的时候,进行限流
是否集群:暂不需要集群 接下来我们以QPS为例来研究限流规则的配置。