在一些互联网项目中高并发的场景很多,瞬间流量很大,会导致我们服务不可用。
sentinel则可以保证我们服务的正常运行,提供限流、熔断、降级等方法来实现
一.限流:
1.导入坐标
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2.配置
spring:
cloud:
sentinel:
transport:
port: 8179
dashboard: 127.0.0.1:8333
3.下在sentinel对应的版本服务并启动
4.按照界面操作
二.熔断降级
开启熔断之后,实现远程调用的接口并实现方法(在方法内定义熔断之后的返回值),通过fallback指定实现类则完成简单服务的调用方熔断。
feign:
sentinel:
enabled: true # 开启远程的熔断
@FeignClient(value = "product",fallback = ProductFeignBack.class)
public interface ProductFeignService {
@GetMapping("/sentinelFeign")
String sentinelFeign();
}
@Slf4j
@Component
public class ProductFeignBack implements ProductFeignService {
@Override
public String sentinelFeign() {
log.info("被降级了....");
return "error";
}
}
三.网关限流
在前面的提到的限流是针对服务本身的限流,在sentinel里面也支持网关的限流,这样请求直接在网关就被拦截,不会到指定的服务才被拦截。
实现网关的限流也非常简单,导入坐标然后直接操作界面就行
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
四.链路追踪+zipkin界面展示
在前面的操作中不管是限流还是熔断降级,我们目的是为了保证在高并发的情况下服务能正常运行。
但是在实际的业务中我们一个功能的实现需要调用多个服务才能实现功能,那在服务调用的过程中我们怎样分析查看各个服务的执行时间或者是否成功,以便后期我们分析优化。链路追踪就很好的帮我们完成该统计。zipkin通过界面化的展示更加直观清晰
实现步骤:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
logging:
level:
org:
springframework:
cloud:
openfeign: debug
sleuth: debug
在通过导入坐标和配置之后,我们就可以通过日志的方式查看链路,但是实际的实际的生产环境中我们不可能根据日志查看链路。我们可以通过zipkin界面的方式查看。
zipkin的实现步骤:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
注意:导入zipkin坐标之后,sleuth坐标就可以不用导入了,因为里面包括了sleuth
spring:
zipkin:
base-url: http://192.168.127.129:9411
discovery-client-enabled: false # 关闭服务发现 佛欧泽cloud会把zipkin的url当服务名称
sender:
type: web # 设置http的方式传输数据
sleuth:
sampler:
probability: 1 # 设置抽样采集率和100% 默认10%
在导入坐标和配置之后,还需要下载并启动zipkin的服务,因为链路追踪可视化的数据来源于zipkin的服务,最终通过访问zipkin的服务就可以通过界面的方式查看到每一次访问的链路情况。