欢迎光临
我们一直在努力

后端学习日记1.30

文章目录

  • 前言
  • 一、雪崩问题
  • 二、如何解决
  • 三、Sentinel
  • 四、Sentinel解决雪崩前置
  • 总结

前言

微服务中,雪崩问题可以用Sentinel来实现限流,隔离,熔断等操作。浅学一下,掌握原理和基本操作。


一、雪崩问题

这里区别于之前在缓存中提到的缓存雪崩。在微服务中,由于整个项目功能被拆分成若干个模块,而模块间存在一些相互远程调用的需要。而在一整个体系中如果某一个服务发生故障,会引起整个链路所有服务集体失效。下图参考雪崩中故障扩散的模式。 在这里插入图片描述

发生雪崩的原因无非就是从服务提供者,服务调用者和服务链路来看:

  • 微服务相互调用中,服务提供者出现故障或阻塞。

  • 服务调用者没有做好异常处理,导致自身故障。

  • 调用链中的所有服务级联失败,导致整个集群故障。

二、如何解决

针对上述三个原因,解决的思路也是从这些角度思考。第一个,服务提供者尽量避免服务的堵塞,比如:保证代码的健壮性;保证服务网络畅通;对于高并发请求有较好性能等。第二个,服务调用者做好远程调用异常的方案,避免故障扩散。

依据上述思路,解决雪崩问题的常见方案有四个:

  • 请求限流——将流量限制在服务接受范围内,避免流量过高等突发情况导致故障。

  • 线程隔离——控制业务可用的线程数量,将故障隔离在一定范围内。

  • 服务熔断——将异常比例过高的接口断开,拒绝所有请求,直接走fallback。

  • 失败处理——定义fallback逻辑,让业务失败时不在抛出异常,而是返回默认数据或友好提示。

三、Sentinel

Alibaba Sentinel是指阿里开源的微服务流量治理组件,和 Redis Sentinel 不是同一个工具 —— 它专门解决微服务架构中的流量控制、熔断降级、系统负载保护等问题,能防止服务被突发流量压垮,保障微服务的稳定性。如何使用一个已配置好的sentinel呢?

第一步,安装对应的控制台-jar包。sentinel是由控制台和相应的DashBoard构成。相关包下载链接

第二步,cmd启动jar包。输入下述命令,server命令指定端口为8090,name命令指定了项目名,-jar则是运行对应的jar包。

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

下图为jar包启动成功。 在这里插入图片描述

第三步,回到java编译器中,在pom文件引入相关依赖。

<!sentinel>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>springcloudstarteralibabasentinel</artifactId>
</dependency>

第四步,配置文件,这里可以用nacos进行共享配置。

spring:
cloud:
sentinel:
transport:
dashboard: localhost:8090
httpmethodspecify: true #开启请求访问路径

这里就可以运行好一个已配置的sentinel。 在这里插入图片描述

四、Sentinel解决雪崩前置

在解决问题前,先要提一个概念:簇点链路。它是单机调用链路。是一次请求进入服务后经过的每一个被Sentinel监控的资源链。默认Sentinel会监控SpringMVC的每一个Endpoint(http接口)。限流、熔断等都是针对簇点链路中的资源设置的。而资源名默认就是接口的请求路径——也就是Controllor中RequestMapping中"“的值。但Restful风格都以同一个字段开头,比如”\\cart"。 这会导致所有接口的资源名都相同,所以为了区分开,配置中还要加一句:

httpmethodspecify: true #开启请求访问路径

这样我们就可以开始模拟解决雪崩问题了。


总结

只差最后实践部分,等之后学明白了,再来填坑。

赞(0)
未经允许不得转载:171主机测评 » 后端学习日记1.30
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址