微服务的限流

1 sentinel

1.1介绍

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。

Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。

Sentinel 具有以下特性

    - 丰富的应用场景

        Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

    - 完备的实时监控

        Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况

    - 广泛的开源生态

        Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

    - 完善的 SPI 扩展点

        Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

1.2 sentinel的基本组成

  • 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境,可以结合springcloud一起使用

  • 控制台(Dashboard):控制台主要负责管理推送规则、监控、集群限流分配管理等,使用账号密码登录,初始账号密码都是sentinel

1.3 sentinel的生态

1.4 启动sentinel

下载好的sentinel就是一个打包好的jar包,可以直接用控制台启动

java -jar sentinel-dashboard-1.7.2.jar --server.port=自定义端口号

1.5 配置客户端

1.5.1 已有项目 引入pom依赖

只需要在需要引入sentinel的项目中加入依赖,具体使用的版本号会自动与当前springcloud的版本号对应,比如在springcloud项目的父模块的pom文件中加入该依赖,也可以在项目的子模块中引入该依赖,即单独为模块引入

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

通过查看GitHub上alibaba提供的springcloud说明文档可以找到组件和主版本的对应关系,其中seata是做分布式事务的,dubbon是做服务调用的,rocketMQ是消息队列,nacos是做注册中心,sentinel是做流量监控的

1.5.2 新项目 springboot骨架创建时启用

如果是新项目,那么可以在springboot骨架创建项目时就引入这个组件

1.5.3 配置yml

如果是手动引入的sentinel,需要配置sentinel

spring:
  application:
    name: nacos-order
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: 127.0.0.1:8080

如果是基于springboot-alibaba骨架创建的,那么yml已经配置好了,我们只需要修改部分参数

1.6 控制台页面

1.6.1 布局

启动springboot项目,并访问一次配置了sentient客户端的模块后,就可以通过控制台查看到项目,具体使用规则可以看官方在GitHub上的文档说明

1.6.2 降级规则

可以在控制台新增降级规则,在什么时候进行服务降级,和Hystrix提供的设置很相似

资源名 就是controller的方法的请求路径

异常比例 就是Hystrix提供的错误率

时间窗口 就是降级多少秒才恢复

1.6.3 流控规则

QPS即每秒查询数

资源名 就是controller的方法的请求路径

单机阈值 就是单台机器最多发送几个查询

1.7 springboot项目中的sentinel实际就是个过滤器

在服务器上启动sentinel,然后启动配置了sentinel的springboot项目,此时sentinel在springboot上就是一个过滤器

sentient提供一个网页端控制台,运维或者开发通过控制台设定规则,然后把控制台上设定好的规则推送到所有装了sentinel的客户端上,此时各个客户端上的sentient就以过滤器的角色执行这些规则,这也就是为什么sentient是低侵入的原因

posted @ 2021-10-20 00:59  夏·舍  阅读(286)  评论(0编辑  收藏  举报