SpringClouldAlibaba 之 初识 Sentinel

·  阅读 316

这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,[点击查看活动详情]

Sentinel.png

前言

sentinel 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

sentinel

sentinel 就是资源保护主要从以下几点 :

  • 流量控制
  • 熔断降级
  • 系统负载保护

流量控制: 流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。
流量控制的角度:

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
  • 运行指标,例如 QPS、线程池、系统负载等;
  • 控制的效果,例如直接限流、冷启动、排队等。

熔断降级: 除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。这个问题和 Hystrix 里面描述的问题是一样的

image.png 当一个服务因为网络波动或者掉线 导致服务不可用时进行调用限制 或者快速请求失败 而不是一直等待到 timeOut 避免请求大量堆积而导致所有服务宕机。
熔断降级设计上的区别:
hystrix:hystrix是 资源线程池使得资源彻底的进行了隔离当然也增加了线程的切换成本,并且需要提前设置线程池的大小。
snetinel:

  • 通过并发线程数进行限制(当一个服务出现问题是会有多个线程被挂起(或者大量堆积),当线程数到了一定的数量就会进行熔断降级处理,新的请求会被拒绝直到线程池的请求都被处理掉)
  • 通过响应时间对资源进行降级(当请求的响应时间达到一个阈值就会快速降级处理这个资源,知道过了一段时间后会再次尝试)

当然更多的资料我们还是要关注官方的文档 sentinelguard.io/zh-cn/docs/…

image.png

下面我们使用一下

首先我们引入下依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <!--注意这里的版本和自己微服务的其他组件一致就行 -->
    <version>${cloud-alibaba.version}</version>
</dependency>
复制代码

下面我们配置下yml中sentinel的控制面板地址(怎么安装这里就不说了)

spring:
  cloud:
    sentinel:
      transport:
        dashboard: 192.168.1.7:8858 # 控制面版地址
复制代码

注意 : 上面这样写控制面版 可能什么都看不到下面这样写就能看到各种监控信息了

spring:
  cloud:
    sentinel:
      transport:
        port: 9091 #本地的sentinel 的端口
        dashboard: 192.168.1.7:8858
        client-ip: 192.168.1.9 #以及本地的IP地址因为我的控制面版是再liunx虚拟机上的
复制代码

image.png

因为是一个测试接口索引可以看到响应时间很短几乎是毫秒级别
下面我们简单的使用流控规则

image.png

qps设置为1

image.png 我们再测试接口(重复多次请求就会偶尔报 Blocked by Sentinel (flow limiting)

image.png 当然还有很多好玩的功能,简单的整合就到这里。

实践是检验真理的唯一准则,感兴趣的可以去试试呀!明天见咯 😃😃😃😃

收藏成功!
已添加到「」, 点击更改