SpringCloud系列教程(十三):Sentinel流量控制

SpringCloud中的注册、发现、网关、服务调用都已经完成了,现在就剩下最后一部分,就是关于网络控制。SpringCloud Alibaba这一套中间件做的非常好,把平时常用的功能都集成进来了,而且非常简单高效。我们下一步就完成最后一块拼图Sentinel,它是为了控制流量和控制服务的健壮性而做的一款工具,也是非常符合我们日常工作中面对的那些非功能性要求。

开始操作之前,不得不说一下关于微服务的限流和熔断,限流通常用在一些秒杀的场景,为了防止大量请求突然间涌进服务器导致服务宕机,所以把一部分请求故意中断掉,从而保护我们的服务器稳定运行;熔断就是在服务出现亚健康情况时,减少流量进入,从而尽可能的让客户的使用不受影响,如果服务彻底失效,那么流量就完全不再分配给故障节点,但是有时候过一段时间故障节点会自己恢复,所以我们还要能过一段时间把恢复正常的节点纳入进来。从我个人理解来看,其实这两个功能有点超出开发人员范围,更接近运维人员的工作,所以我特别推崇云原生service mesh的架构,把限流和熔断放在容器层实现。

1、搭建Sentinel非常简单,下载jar文件,直接运行就可以了,Sentinel不用搞什么集群模式,因为它不参与业务功能,即使宕机了也不影响业务的正常运转,具体说其实就是一个配置管理中心。

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=192.168.3.41:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.8.jar

通过浏览器打开:http://192.168.3.41:8080/#/login 账号密码都是sentinel。

2、还是以nacos-client-demo这个项目为例子,添加对sentinel的依赖。

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

3、修改application.yml文件,配置sentinel信息。

spring:
  application:
    # nacos会使用该名字进行注册发现
    name: nacos-client-demo
  cloud:
    nacos:
      # nacos的地址,集群形式添加多个地址
      server-addr: 192.168.3.54:80
      # nacos的账号
      username: nacos
      # nacos的密码
      password: nacos
      discovery:
        group: devops
        namespace: sit
      config:
        namespace: sit
        group: devops
    sentinel:
      transport:
        dashboard: 192.168.3.41:8080
        clientIp: 192.168.3.164
  config:
    # 加载两个dataId,要是key冲突,则后面的value会覆盖前面的value
    import:
      - nacos:user?refresh=true
      - nacos:project?refresh=true
server:
  servlet:
    context-path: /${spring.application.name}
  port: 8081
mj:
  jwt:
    ttl: 30

clientIp可以不写,不过有时候默认的ip可能读取本地ip不准确(比如第一个网卡是虚拟网卡)。

4、刚开始sentinel里面是什么都没有的,需要调用一下接口,sentinel才能抓取到数据从而更新页面。

curl -H "token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyTmFtZSI6InpoYW5nc2FuIiwidXNlcklkIjoiMTIzIiwiZXhwIjoxN zQwNzU1NDE2fQ.Xqpgk_lqhpxIIvxSo70mb3LQuozREIOituLyZKKYYaA" http://127.0.0.1:8888/nacos-client-demo/api/talk

5、这样就可以通过界面对接口进行操作了

6、限流,就是对这个接口做流量限制,防止大流量把服务器冲垮,像秒杀这种场景,我们平时抢优惠卷失败就是这个功能在作祟。

如果勾选集群,还可以控制集群总量,或者也可以是单机阈值,非常方便。

7、熔断,就是对服务亚健康状态时的减少流量,如果宕机,就彻底不分配流量。

熔断时长就是配置宕机之后如果恢复,SpringCloud会过一会再来查看是不是真正恢复了,没恢复就继续熔断,恢复了就又纳入到集群里面。

8、热点规则,这个比限流更精细,就是用来限制http请求里某个参数的请求并发数,比如userId,让这个用户不要那么频繁操作。

参数索引就是表示http请求时候以哪个参数为限制标准。

9、授权,就是表示该接口被调用的权限,有些安全性很高的接口,比如支付接口,就限制只能由某几个微服务才能调用。

相关推荐
sky丶Mamba12 小时前
Spring框架中的单例Bean是线程安全的吗
java·安全·spring
stayhungerstayflush15 小时前
spring webclient介绍
java·python·spring
ashane131415 小时前
Spring 构造器注入和setter注入的比较
java·spring·log4j
Justice link17 小时前
Docker参数,以及仓库搭建
后端·spring·spring cloud
hikktn18 小时前
【开源宝藏】Spring Trace 一种轻量级的日志追踪新方式
java·spring·开源
customer081 天前
【开源免费】基于SpringBoot+Vue.JS旅游管理系统(JAVA毕业设计)
java·vue.js·spring boot·spring cloud·开源
浪九天1 天前
Java直通车系列15【Spring MVC】(ModelAndView 使用)
java·后端·spring
我爱Jack1 天前
Spring Web MVC(1)
java·后端·spring·mvc
stayhungerstayflush1 天前
spring websocket 介绍
java·websocket·spring
岁岁岁平安1 天前
SpringMVC学习(controller层加载控制与(业务、功能)bean加载控制、Web容器初始化配置类)(3)
java·学习·spring·mybatis·springmvc