Sentinel 实战指南:构建高可用微服务架构(1)

0 阅读3分钟

在分布式系统中,微服务保护的核心使命是确保服务的健壮性,防止因单个服务异常而引发级联失败(Cascading Failure),最终导致整个系统崩溃的**“雪崩效应”**。

本章,我们将深入探讨微服务保护的通用策略及核心技术实现。

1.1 服务保护方案

主流的微服务保护方案主要包括以下三种:

  • 请求限流(Traffic Limiting)
  • 线程隔离(Thread Isolation)
  • 服务熔断(Circuit Breaking)

从本质上讲,这些方案都属于**“有损服务”策略——即服务降级**。

  • 请求限流:牺牲了并发上限,换取流量可控;
  • 线程隔离:限制了部分资源的可用性,换取故障隔离;
  • 服务熔断:牺牲了服务的完整度(暂时不可用),换取系统的止损。

虽然这会导致短期内服务体验略有下降,但却能构筑起一道坚固的防线,确保系统在极端情况下依然屹立不倒。接下来,我们逐一解析这些方案的底层原理。

1.1.1 请求限流

服务故障的罪魁祸首,往往是突发的高并发流量。只要能有效管控流量,就能规避绝大多数系统崩溃风险。

现实中,接口流量并非恒定,而是伴随着不可预测的突发脉冲。请求限流的核心,就是对进入系统的并发流量进行整形与控制,防止瞬间的流量洪峰压垮服务。

形象地理解: 限流器就像是水电站的大坝

  • 无限流时:上游的洪水(突发流量)会直接冲毁下游村庄(服务)。
  • 有限流时:大坝起到蓄水和调节作用,无论上游洪水滔天,通过开关控制,下游的水流始终维持在一个平稳、安全的速率。这就是所谓的**“削峰填谷”**。

1.2.Sentinel

微服务保护的技术有很多,但在目前国内使用较多的还是Sentinel,所以接下来我们学习Sentinel的使用

Sentinel是阿里巴巴开源的一款服务保护框架 目前以及被集成到SpringCloudAlibaba 官方网址 home | Sentinel

我们可以采用本地安装的方式 或者docker安装的方式去安装:

docker run -d \ --name sentinel \ -p 8858:8858 \ --restart=always \ bladex/sentinel-dashboard:1.8.8

安装完了之后访问http://localhost:8858 (如果是虚拟机安装 记得把地址换成虚拟机的地址)

image.png

账号和密码都是Sentinel 登录以后就能看到这个页面

image.png

然后可以在你的微服务项目里面引入 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> 依赖

修改application.yaml文件,添加下面内容

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

启动对应微服务就可以看到控制台有了信息 - 因为我们一般开发都用的是RestFul接口 就会出现地址相同的问题 我们可以开启这个设置

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

这里我启动一个简单的Demo做演示

image.png

当我们访问这个服务的任一端口的时候 Sentinel就会检测到这个端口我们就可以做一系列操作

image.png

image.png

我们先设置为6方便测试

image.png 我们利用Jemeter做限流测试,我们每秒发出10个请求:

image.png 结果如下

image.png

可以看出这个接口的通过QPS稳定在6附近 而拒绝的QPS在4附近,符合我们的预期

这就是 Sentinel 的限流作用