vlambda博客
学习文章列表

谈谈微服务中Sentinel的熔断限流到底有多重要?


每天进步一点点,坚持下去,你总是会不一样的。加油!


最近在整理Java常用的一些基础、ZooKeeper、Spring全家桶、源码、Dubbo、Elasticsearch、Redis、MySql、RabbitMQ、Kafka、Linux 、微服务等技术栈。

持续更新中,欢迎点上面后端架构进阶 关注我!


今天主要分享的是我们的微服务安全大使 Sentinel 。他作为我 们流量管 控的重要关口,从限流 、熔断、系统负载保护、热点防护等多个维度来帮助我们者保障微服务的稳定性。

试想一下,假如一个服务的抗压能力是1000tps,如果上万个tps过来,则会大量的线程阻塞等待,严重的会造成服务的级联故障,也就是服务雪崩。那么后果是不堪设想的。

目录
一、Sentinel简介
二、Sentinel的搭建
三、Sentinel的使用
四、小结

一、Sentinel简介

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

下面这张图就囊括了sentinel的一些核心功能。

谈谈微服务中Sentinel的熔断限流到底有多重要?


sentinel分为两部分:


  • 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。

  • 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。


我们在服务调用中的容错一般有这么几种处理方案:

1、超时

比如在我们的dubbo调用的过程中,如果某个服务挂了或者调用时间过长。我们一般都会设置一个超时时间,快速释放资源。服务就不容易发生级联故障。

2、线程池隔离模式

比如A调用C,B调用D服务,AB为同一个服务,如果AB公用一个线程池,那么假如A调用把资源消耗完了,那么B也会被拖垮。所以如果AB都各自分配了线程池,A是否消耗完自己的线程池,对B没有影响。

3、断路器模式

如果一定时间内调用的次数或者失败率达到一定的值,我们就直接返回而不调用我们原有的逻辑。

了解以上几个,那么对sentinel的一些功能就更好理解了。sentinel就是我们的断路器模式,当然还有其他的一些NB的功能。
下面我们来具体的看看sentinel的搭建和使用的一些技巧和规范。

二、Sentinel的搭建

Sentinel是一个独立的客户端,直接到relsease下载dashboard的Jar包运行即可。再贴个下载dashboard的地址

https://github.com/alibaba/Sentinel/releases/tag/v1.8.0

谈谈微服务中Sentinel的熔断限流到底有多重要?

然后直接运行即可。默认是没有下面的aercool-product的。下面我们就先来集成下sentinel的控制台。

谈谈微服务中Sentinel的熔断限流到底有多重要?


我项目使用springcloud,所有我的依赖如下,一个核心,一个通信

<!--sentinel的依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<!--sentinel通信相关的包-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-transport-simple-http</artifactId>
    <version>1.8.0</version>
</dependency>


然后就是配置文件的编写,我的dashboard是在本地启动的,直接java -jar启动了,也没加参数


spring:
  cloud:
    sentinel:
      transport:
        port: 8719 # 通信的端口,不配置也可以,默认就是这个
        dashboardlocalhost:8080 # dashboard的地址


这样我们的sentinel就搭建起来了,简单方便。


三、Sentinel的使用


第一次启动的时候是要调用一个接口才会注册到dashboard上的。大概有监控,簇点链路,规则,流控,机器列表等等功能。


谈谈微服务中Sentinel的熔断限流到底有多重要?

实时监控
列出当前访问的所有请求的api和通过拒绝的QPS,自动刷新

谈谈微服务中Sentinel的熔断限流到底有多重要?


谈谈微服务中Sentinel的熔断限流到底有多重要?


簇点流控
可以对我们的请求api进行流控

谈谈微服务中Sentinel的熔断限流到底有多重要?


具体操作包含:流控、降级、热点、授权

谈谈微服务中Sentinel的熔断限流到底有多重要?


我们演示下流控,QPS每秒超过2次就限流,快速失败

谈谈微服务中Sentinel的熔断限流到底有多重要?


当我们一秒内多次调用超过阈值的时候,就出现被限流的提示了

降级就是如果出现异常,则在设置的时间内就不进行放行了。

热点就是指定时间窗口内,如果请求的参数在统计时间内超过了阈值则进行降级。

授权就是控制调用方的黑名单、白名单的操作。

四、小结

无论使用什么手段方式,保证服务的健壮性是我们的职责。当然类似于sentinel还有很多其他的框架, 比如说hystrix等。

当然框架只是辅助我们解决问题的工具,只有知道原理我们才能在使用中得心应手。

后端架构进阶 提了一个问题

关于服务的熔断、限流,你们公司是怎么做的呢?

参与讨论


- END -


好了,以上就是今天的内容。有错误的地方欢迎指正。快分享给你的朋友,一起学习吧!

坚持原创,做最有价值的分享!