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

服务保护和分布式事务

背景

在这里插入图片描述

雪崩问题

原因

在这里插入图片描述

最开始只有商品服务有问题,后来购物车服务和其他服务都陷入了瘫痪状态

在这里插入图片描述

原因总结

在这里插入图片描述

解决方案

服务保护方案-请求限流(被调用者)

请求限流:限制访问微服务的请求的并发量,避免服务因流量激增出现故障。

在这里插入图片描述

服务无保护方案-线程隔离(调用者)

在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述
在这里插入图片描述

阿里解决方案sentinel

安装

Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站:
https://sentinelguard.io/zh-cn/

Sentinel 的使用可以分为两个部分:

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

1. 下载

下载地址: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

其它启动时可配置参数可参考官方文档:

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
登录后,即可看到控制台,默认会监控sentinel-dashboard服务本身:

在这里插入图片描述

微服务整合

我们在cart-service模块中整合sentinel,连接sentinel-dashboard控制台,步骤如下:

maven坐标

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

配置yaml

2)配置控制台 修改application.yaml文件,添加下面内容:

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

测试

3)访问cart-service的任意端点
重启cart-service,然后访问查询购物车接口,sentinel的客户端就会将服务访问的信息提交到sentinel-dashboard控制台。并展示出统计信息:

在这里插入图片描述

点击簇点链路菜单,会看到下面的页面:

在这里插入图片描述

所谓簇点链路,就是单机调用链路,是一次请求进入服务后经过的每一个被Sentinel监控的资源。默认情况下,Sentinel会监控SpringMVC的每一个Endpoint(接口)。
因此,我们看到/carts这个接口路径就是其中一个簇点,我们可以对其进行限流、熔断、隔离等保护措施。

不过,需要注意的是,我们的SpringMVC接口是按照Restful风格设计,因此购物车的查询、删除、修改等接口全部都是/carts路径:

在这里插入图片描述

默认情况下Sentinel会把路径作为簇点资源的名称,无法区分路径相同但请求方式不同的接口,查询、删除、修改等都被识别为一个簇点资源,这显然是不合适的。

所以我们可以选择打开Sentinel的请求方式前缀,把请求方式 + 请求路径作为簇点资源名:
首先,在cart-service的application.yml中添加下面的配置:

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

然后,重启服务,通过页面访问购物车的相关接口,可以看到sentinel控制台的簇点链路发生了变化:

在这里插入图片描述

请求限流

在簇点链路后面点击流控按钮,即可对其做限流配置:

在这里插入图片描述

在弹出的菜单中这样填写:

在这里插入图片描述

这样就把查询购物车列表这个簇点资源的流量限制在了每秒6个,也就是最大QPS为6.

使用api-fox新建接口

在这里插入图片描述
在这里插入图片描述

如果总是报错,可以去掉校验功能

在这里插入图片描述

新建自动化测试,加入刚刚建立的接口

在这里插入图片描述

选择性能测试,模拟20个用户,测试1分钟

在这里插入图片描述

测试报告中可以看到被控制6个左右

在这里插入图片描述

sentinel中的流量监控也是相同的结果

在这里插入图片描述

相关文章:

  • buu-get_started_3dsctf_2016-好久不见39
  • WordPress自定义排序插件:Simple Custom Post Order完全指南(SEO优化版)
  • 探讨一下游戏的重要性
  • netcore libreoffice
  • Windows - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式
  • 2024年数字政府服务能力优秀创新案例汇编(附下载)
  • 【QT中的一些高级数据结构,持续更新中...】
  • 高精度算法解析与实现(c++)
  • QT实战-基于QWidget实现的异形tip窗口
  • Python爬虫实战:获取12306特定日期、城市车票信息,并做数据分析以供出行参考
  • AcWing走迷宫-最短路问题-BFS求解
  • 小型字符级语言模型的改进方向和策略
  • 面阵工业相机提高餐饮业生产效率
  • TDengine 产品组件: 客户端 taosc
  • 【rt-thread】rt-thread 控制 led 的两种方式
  • DeepSeek掘金——调用DeepSeek API接口 实现智能数据挖掘与分析
  • wordpress adrotate插件 文件上传漏洞
  • 汽车自动驾驶辅助L2++是什么?
  • ARM Linux平台下 OpenCV Camera 实验
  • Apache Flink架构深度解析:任务调度、算子数据同步与TaskSlot资源管理机制
  • 上海皮影戏《九色鹿》闪耀塞尔维亚,再获2项国际大奖
  • 中国华能:1-4月新能源装机突破1亿千瓦,利润总额再创新高
  • 凤阳文旅局长回应鼓楼瓦片脱落事件:楼宇是否属于文物?施工经费用在何处?
  • “高原笑匠”、西藏著名表演艺术家扎西顿珠去世
  • 19世纪的“表征之场”:弗洛伊德的精神分析椅
  • 前四月国家铁路发送货物12.99亿吨,同比增长3.6%