前言
sentinel 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
sentinel
sentinel 就是资源保护主要从以下几点 :
流量控制
熔断降级
系统负载保护
流量控制: 流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。
流量控制的角度:
资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
运行指标,例如 QPS、线程池、系统负载等;
控制的效果,例如直接限流、冷启动、排队等。
熔断降级:除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。这个问题和 Hystrix 里面描述的问题是一样的
当一个服务因为网络波动或者掉线 导致服务不可用时进行调用限制 或者快速请求失败 而不是一直等待到 timeOut 避免请求大量堆积而导致所有服务宕机。
熔断降级设计上的区别:hystrix
:hystrix是 资源线程池使得资源彻底的进行了隔离当然也增加了线程的切换成本,并且需要提前设置线程池的大小。snetinel
:
通过并发线程数进行限制(当一个服务出现问题是会有多个线程被挂起(或者大量堆积),当线程数到了一定的数量就会进行熔断降级处理,新的请求会被拒绝直到线程池的请求都被处理掉)
通过响应时间对资源进行降级(当请求的响应时间达到一个阈值就会快速降级处理这个资源,知道过了一段时间后会再次尝试)
当然更多的资料我们还是要关注官方的文档 sentinelguard.io/zh-cn/docs/…
下面我们使用一下
首先我们引入下依赖
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
-
- <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虚拟机上的复制代码
因为是一个测试接口索引可以看到响应时间很短几乎是毫秒级别
下面我们简单的使用流控规则
qps设置为1
我们再测试接口(重复多次请求就会偶尔报 Blocked by Sentinel (flow limiting)
)
当然还有很多好玩的功能,简单的整合就到这里。
实践是检验真理的唯一准则,感兴趣的可以去试试呀!