简述微服务高可用之Sentinel、Seate使用
下文主要讲述使用sentinel,如何降级限流熔断及如何使用seata管理分布式事务
sentinel服务端安装与使用
1、下载
进入https://github.com/alibaba/Sentinel/releases
根据你的需求进行下载对应版本
我这里是JDK17 下载的1.8.8版本,sentinel-dashboard-1.8.8.jar
2、启动服务,需安装java环境
java -jar sentinel-dashboard-1.8.8.jar
3、在工程配置文件配置服务端地址。
在cloud:层级下配置sentinel,sentinel的默认端口为8080
sentinel:
transport:
dashboard: localhost:8080 #配置sentinel服务端
http-method-specify: true #开启请求方式前缀
4、访问sentinel服务端
此处的用户名和密码都是sentinel
5、进入主界面
在工程中配置了dashboard,接口访问后都会在此显示
6、实时监控
服务的请求情况都会记录,每秒通过多少次,拒绝多少次
7、簇点链路
用于记录每个接口的情况以及管理策略操作,可以对某接口进行限流、熔断、热点、授权等操作
(1)新增流控规则、
针对某接口进行流控,可选择QPS(每秒请求数)和并发线程数进行限制,选择QPS当每秒超过配置数会限制操作,提示Blocked by Sentinel (flow limiting)1秒后可重新访问
(2)新增熔断规则
熔断策略有三种慢调用模式,当调用时间达到最大RT,且比例阈值大于等于配置的阈值,视为该链路不可用。异常比例,当调用次数异常与总次数比例阈值>=配置阈值即熔断;异常数,当异常请求个数到达配置阈值。熔断时长表示不可用时间,在熔断时长后再次请求调用。采用了滑动时间窗算法。
滑动窗口算法是对固定窗口算法的改进,它将时间窗口分为多个小周期,每个小周期都有自己的计数器。随着时间的滑动,过期的小周期数据被删除,这样可以更精确地控制流量。
详细限流算法见https://zhuanlan.zhihu.com/p/689922080
(3)新增热点数据规则
对经常访问的数据进行限流。参数索引此处的0表示方法中的第一个参数,意为以哪个参数为索引。详情见https://blog.csdn.net/zhiqiang_cao/article/details/142937510
(4)新增权限规则
用于拦截那些允许访问、那些禁止访问。
详情参见https://blog.csdn.net/weixin_53041251/article/details/129651977
Seata 分布式事务处理
用于在微服务/分布式中保持数据的一致性
官方文档:https://seata.apache.org/zh-cn/docs/user/quickstart/
安装服务端:https://blog.csdn.net/2301_76862031/article/details/141499249
1、引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
2、在方法上增加@GlobalTransactional,此处为示例代码具体逻辑实现请自行实现
@Transactional
@GlobalTransactional
public String createOrder(String id){
System.out.println("创建订单成功");
inventoryService.reduceNum(id);
return "";
}
分布式事务处理分为两阶段,第一阶段各自服务各自进行事务提交。第二阶段seata收集提交结果,若其中一个失败,则通过undolog回滚事务。