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

SpringCloud系列教程:微服务的未来(十八)雪崩问题、服务保护方案、Sentinel快速入门

前言

在分布式系统中,雪崩效应(Avalanche Effect)是一种常见的故障现象,通常发生在系统中某个组件出现故障时,导致其他组件级联失败,最终引发整个系统的崩溃。为了有效应对雪崩效应,服务保护方案应运而生。本文将围绕雪崩问题展开,介绍如何通过 Sentinel 来实现服务保护和快速入门。


雪崩问题

微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。
在这里插入图片描述
雪崩问题产生的原因是什么?

  • 微服务相互调用,服务提供者出现故障或阻塞。
  • 服务调用者没有做好异常处理,导致自身故障。
  • 调用链中的所有服务级联失败,导致整个集群故障

解决问题的思路有哪些?

  • 尽量避免服务出现故障或阻塞。
    • 保证代码的健壮性;
    • 保证网络畅通
    • 能应对较高的并发请求;
  • 服务调用者做好远程调用异常的后备方案,避免故障扩散

服务保护方案

请求限流

请求限流:限制访问微服务的请求的并发量,避免服务因流量激增出现故障,
在这里插入图片描述

线程隔离

线程隔离:也叫做舱壁模式,模拟船舱隔板的防水原理。通过限定每个业务能使用的线程数量而将故障业务隔离,避免故障扩散。
在这里插入图片描述

服务熔断

服务熔断:由断路器统计请求的异常比例或慢调用比例,如果超出阈值则会熔断该业务,则拦截该接口的请求。
熔断期间,所有请求快速失败,全都走fallback逻辑。
在这里插入图片描述
解决雪崩问题的常见方案有哪些?

  • 请求限流:限制流量在服务可以处理的范围,避免因突发流量而故障
  • **线程隔离:**控制业务可用的线程数量,将故障隔离在一定范围
  • **服务熔断:**将异常比例过高的接口断开,拒绝所有请求,直接走faltback
  • **失败处理:**定义fallback逻辑,让业务失败时不再抛出异常,而是返回默认数据或友好提示

服务保护技术

在这里插入图片描述

Sentinel

初始Sentinel

Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址:https://sentinelguard.io/zh-cn/
在这里插入图片描述
Sentinel 的使用可以分为两个部分:

  • 核心库(Jar包):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。在项目中引入依赖即可实现服务限流、隔离、熔断等功能。
  • 控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。

安装Sentinel步骤:
(1)下载jar包
https://github.com/alibaba/Sentinel/releases
(2)运行
将jar包放在任意非中文、不包含特殊字符的目录下,重命名为sentinel-dashboard.jar:
在这里插入图片描述
打开控制台运行如下命令

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

如果报以下错误只需在对应代码上加上’ '即可
在这里插入图片描述

java '-Dserver.port=8090' '-Dcsp.sentinel.dashboard.server=localhost:8090' '-Dproject.name=sentinel-dashboard' '-jar' sentinel-dashboard.jar

命令相关参数可查看如下文档
https://github.com/alibaba/Sentinel/wiki/%E5%90%AF%E5%8A%A8%E9%85%8D%E7%BD%AE%E9%A1%B9
(3)访问
访问http://localhost:8090就可以看到sentinel的控制台
在这里插入图片描述
账号和密码都是sentinel。
控制台如下:
在这里插入图片描述

微服务整合

在cart-service微服务中整合sentinel,连接sentinel-dashboard控制台
(1)引入sentinel坐标

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

在这里插入图片描述
(2)修改对应的application.yaml文件,添加如下内容

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8090

(3)访问cart-service服务的任意端口,就可以在sentinel-dashboard控制台查看到对应信息。
在这里插入图片描述

簇点链路

簇点链路,就是单机调用链路。是一次请求进入服务后经过的每一个被Sentinel监控的资源链。默认Sentinel会监控SpringMVC的每一个Endpoint(http接口)。限流、熔断等都是针对簇点链路中的资源设置的。而资源名默认就是接口的请求路径:
在这里插入图片描述
在这里插入图片描述
只靠请求路径无法准确的区分究竟是哪一个端口。
Restful风格的API请求路径一般都相同,这会导致簇点资源名称重复。因此我们要修改配置,把请求方式+请求路径作为簇点资源名称:

spring:
  cloud:
    sentinel:
      transport:
        dashboard:localhost:8090http-method-specify:true #开启请求方式前缓

在这里插入图片描述


总结

本文首先探讨了雪崩效应的概念及其对系统稳定性的影响,提出了有效的服务保护方案,并介绍了如何使用 Sentinel 进行服务保护。通过实际操作,快速入门 Sentinel 的核心功能和配置,能够帮助开发者更好地应对复杂的分布式环境中的故障问题,提高系统的可用性和容错性。


http://www.kler.cn/a/522970.html

相关文章:

  • 项目部署(springboot项目)
  • Autogen_core 测试代码:test_cache_store.py
  • 第19篇:python高级编程进阶:使用Flask进行Web开发
  • Oracle Primavera P6 最新版 v24.12 更新 1/2
  • ResNeSt: Split-Attention Networks 参考论文
  • JAVA实战开源项目:蜗牛兼职平台(Vue+SpringBoot) 附源码
  • 接口技术-第3次作业
  • 供应链系统设计-供应链中台系统设计(九)- 商品中心设计篇
  • DBO优化最近邻分类预测matlab
  • c语言初级的复习
  • 2025牛客寒假算法营3
  • leetcode刷题-贪心03
  • 磁盘调度算法
  • 【PySide6快速入门】 QRadioButton单选按钮
  • 全程Kali linux---CTFshow misc入门
  • Python-基于PyQt5,json和playsound的通用闹钟
  • 汉语向编程指南
  • LeetCode:62.不同路径
  • 开发者交流平台项目部署到阿里云服务器教程
  • 【Redis】hash 类型的介绍和常用命令
  • 编解码技术:最大秩距离码(Maximum Rank Distance Code)
  • 代码随想录刷题day18|(哈希表篇)01.两数之和
  • QT:图像上绘制图形
  • 基于Django的个人博客系统的设计与实现
  • 【现代深度学习技术】深度学习计算 | 参数管理
  • Flink (十三) :Table API 与 DataStream API 的转换 (一)