sentinel 分布式系统流量防卫兵

Posted by Beyonderwei on 2021-01-06
Words 720 and Reading Time 2 Minutes
Viewed Times

一、 Docker 安装 Sentinel

注:测试时直接在本地运行jar包进行测试,不使用Docker,不然微服务也要在云服务器运行才可以。

  • 拉取镜像

    docker pull bladex/sentinel-dashboard

  • 运行镜像(默认8858端口)

    docker run --name my-sentinel -d -p 8858:8858 -v /etc/localtime:/etc/localtime:ro bladex/sentinel-dashboard:使用宿主机的时间,如果sentinel的时间和服务时间不一致会导致控制台不显示监控数据

    该问题的 :官方解释

  • 访问 dashboard :http://ip:8858

  • 登录:默认用户名和密码均为 sentinel

二、微服务注册到Sentinel

  • pom依赖,通常包括下面三个,配合Nacos一起用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    <dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    </dependency>

    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
  • yaml 配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    spring:
    application:
    name: 微服务名
    cloud:
    nacos:
    discovery:
    server-addr: ip:8848
    sentinel:
    transport:
    dashboard: ip:8858
    port: 8719 #默认8719,假如被占用了会自动从8719开始依次+1扫描。直至找到未被占用的端口
    client-ip: 微服务IP # 用sentinel在云服务器Docker时配置,微服务在其他云服务器,本地运行时不用配置

    management:
    endpoints:
    web:
    exposure:
    include: '*'
  • 主启动类还是添加 @EnableDiscoveryClient 常用注解

  • 启动微服务,调用微服务的任一端口后,微服务即被Sentinel 监控。

三、流量控制

1. QPS与线程数(直接失败)

适用场景:如抢课系统,直接在界面上对接口添加流控,同时有QPS和线程数,保证了进入来的线程(用户)可以得到快速的响应。

2. 流控的关联

适用场景:如先调用订单接口调用支付接口,支付接口已经达到饱和的情况下,订单接口便应该被限流。如下图:即B达到限流要求时(B的QPS > 1),对A限流,A直接失败。

3. 流控预热

适用场景:某时刻的秒杀活动。当系统之前处于较低的访问量,突然增加的访问量会导致系统崩溃,因此使QPS和线程数的限流阈值慢慢变大,有一个缓冲的过程。默认开始的限流数为设定值的三分之一,经过预定时间达到设定的流控值。

4. 流控的排队等候

适用场景:间隔性的突发流量。如消息队列,突然有很多请求,然后后面空闲,为了在空闲时间处理这些请求,防止直接被拒绝。对应 漏桶算法 ,严格控制流量。


本文为作者原创文章,未经作者允许不得转载。

...

...

00:00
00:00