阿里巴巴 Sentinel 是一个强大的、面向分布式服务架构的高可用流量防护组件,主要用于保障微服务架构下的系统稳定性。它主要提供了以下几个方面的功能:
流量控制:Sentinel 可以根据不同的条件(如QPS、线程数等)对流量进行控制,防止系统被瞬时的流量高峰冲垮,确保系统的稳定性和可用性。
熔断降级:当检测到某个服务出现异常或响应时间过长时,Sentinel 可以自动对该服务进行熔断,减少对其它服务的影响,并在一定时间后尝试恢复。
系统自适应保护:通过监控系统当前的负载情况(如CPU使用率),Sentinel 能够动态调整流量控制策略,保护系统免受过多请求的影响。
实时监控和规则管理:Sentinel 提供了丰富的监控数据视图以及灵活的规则配置方式,方便用户及时了解系统运行状态并对流量控制策略进行调整。
Sentinel 支持多种编程语言,包括Java、Go等,并且可以很好地与Spring Cloud、Dubbo等流行的微服务框架集成,为开发者提供了一站式的流量防护解决方案。
sentinel下载地址:
https://github.com/alibaba/Sentinel/releases
通过java -jar命令运行sentinel
启动成功后,打开sentinel,默认的账号密码为sentinel
SpringCloud项目需要导入sentinel依赖,连接sentinel服务器
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
配置sentinel服务器的地址,sentinel服务器默认情况下,调用接口后才会进行连接,为了启动时就进行连接,需要在配置中手动开启
spring:
application:
name: service-order #项目名称
sentinel:
transport:
dashboard: localhost:8080 #sentinel控制台的访问地址
eager: true #启动时加载sentinel规则
定义/order请求每秒只能接受一个请求,如果请求数量超过一个将会阻塞
上面是sentinel默认的异常阻塞信息,我们可以在order微服务中自定义限流异常信息
package com.atguigu.exception;
import com.alibaba.csp.sentinel.adapter.spring.webmvc_v6x.callback.BlockExceptionHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import java.io.PrintWriter;
@Component
public class MyBlockExceptionHandler implements BlockExceptionHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, String resourceName, BlockException e) throws Exception {
response.setContentType("application/json;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.write(resourceName + "被Sentinel限流了,原因"+e.getClass());
writer.flush();
writer.close();
}
}
这里是我们自定义返回的阻塞信息
但上面请求中,我们仅仅是对controller请求进行限流,那么我们如何给Service层方法进行限流呢?
@SentineResource用于对非controller层进行限流,blockHandler定义限流后返回的数据,若未定义回调数据,高并发环境下会被全局异常处理器拦截,如果都没有定义,在高并发环境下会抛出500异常
Seata 是一个由阿里巴巴开源的分布式事务解决方案,旨在解决微服务架构下的分布式事务问题。它提供了高性能和易于使用的分布式事务服务,支持多种分布式事务模式,帮助企业快速构建可靠的分布式应用。
apache-incubator-seata-2.1.0安装包下载_开源镜像站-阿里云
启动seata
账号密码,默认为seata
在resources下创建一个file.conf文件,配置seata的地址
service {
vgroupMapping.default_tx_group = "default"
default.grouplist = "127.0.0.1:8091"
enableDegrade = false
disableGlobalTransaction = false
}
重启服务器,可以查看到seata连接成功
在需要使用事务的方法中使用 @GlobalTransactional注解,即可实现分布式事务。