• Spring Cloud alibaba网关 sentinel zuul 四 限流熔断


    spring cloud alibaba 集成了 他内部开源的 Sentinel 熔断限流框架

    Sentinel 介绍

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

    Sentinel 具有以下特征:

    • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
      完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
    • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
    • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

    Sentinel 的主要特性:

    file

    Sentinel 的开源生态:

    file

    介绍一下 如果搭建。本次并不会一点点延伸更深层次的地方。只教大家快速使用。等spring cloud gateway更新完成之后会带大家更深层次的挖掘 Sentinel 的功能。

    Sentinel的快速搭建

    直接下载官网已经打好的jar包

    release地址 https://github.com/alibaba/Sentinel/releases

    源码编译
    git clone https://github.com/alibaba/Sentinel.git

    然后进入目录执行 mvn clean package

    命令启动

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

    如果需要docker 的话 可编写 docker Dockerfile

    # 基于哪个镜像
    FROM java:8
    # 拷贝文件到容器,也可以直接写成ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar /app.jar
    ADD ./*.jar app.jar
    RUN mkdir -p /var/logs/Sentinel
    RUN mkdir -p /var/logs/jvm
    RUN mkdir -p /var/logs/dump
    RUN bash -c 'touch /app.jar'
    # 开放8080端口
    EXPOSE 8080
    # 配置容器启动后执行的命令
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-XX:-PrintGCDetails","-XX:-PrintGCTimeStamps","-XX:-HeapDumpOnOutOfMemoryError","-XX:HeapDumpPath=/var/logs/dump/oom_dump.dump","-Xloggc:/var/logs/jvm/app.log","-Dfile.encoding=UTF8","-Duser.timezone=GMT+08","-XX:CMSInitiatingOccupancyFraction=90","-XX:MaxGCPauseMillis=200","-XX:StringTableSize=20000","-XX:+UseG1GC","-Xss256k","-Xmx1024m","-Xms512m","-jar","/app.jar"]
    
    

    执行 docker 镜像制作

    docker  build --tag sentinel:1.0 .
    

    --tag projectname:version 注意写法

    file

    file
    然后docker run 启动镜像。这里作者使用的docker镜像方式启动
    docker run -d -p9088:8080 304342c105e9

    然后控制台输入 http://localhost:9088/ 用户名密码 sentinel/sentinel

    登录参数配置:

    从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel。可以参考 鉴权模块文档 配置用户名和密码。

    • Dsentinel.dashboard.auth.username=sentinel 用于指定控制台的登录用户名为 sentinel;
    • Dsentinel.dashboard.auth.password=123456 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel;
    • Dserver.servlet.session.timeout=7200 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;

    输入密码登录

    服务已启动我们在整合 网关zuul 服务于sentinel的整合。

    pom 添加

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

    操作添加俩个文件在resources下面

    • api.json
    [
      {
        "apiName": "cloud-discovery-server",
        "predicateItems": [
          {
            "pattern": "/server/**"
          },
          {
            "pattern": "/server/server/**",
            "matchStrategy": 1
          },
          {
            "items": [
              {
                "pattern": "/server/**"
              }
            ]
          }
        ]
      },
      {
        "apiName": "cloud-discovery-client",
        "predicateItems": [
          {
            "pattern": "/client/**"
          }
        ]
      }
    ]
    

    启动服务并进行之前的一次访问

    • gateway.json
    [
      {
        "resource": "cloud-discovery-server",
        "count": 1
      },
      {
        "resource": "cloud-discovery-client",
        "count": 10,
        "intervalSec": 2,
        "controlBehavior": 1,
        "maxQueueingTimeoutMs": 200,
        "paramItem": {
          "parseStrategy": 3,
          "fieldName": "test"
        }
      }
    ]
    

    多次请求 curl http://localhost:9083/server/server/hello?name=tom

    然后在控制台
    file

    api.json 对应的是控制台 api 管理

    用户自定义的 API 定义分组,可以看做是一些 URL 匹配的组合。比如我们可以定义一个 API 叫 my_api,请求 path 模式为 /foo/** 和 /baz/** 的都归到 my_api 这个 API 分组下面。限流的时候可以针对这个自定义的 API 分组维度进行限流。

    gateway 对应的是控制台流控管理

    • resource:资源名称,可以是网关中的 route 名称或者用户自定义的API 分组名称。
    • resourceMode:规则是针对 API Gateway 的route(RESOURCE_MODE_ROUTE_ID)还是用户在 Sentinel 中定义的API 分组(RESOURCE_MODE_CUSTOM_API_NAME),默认是route。
    • grade:限流指标维度,同限流规则的grade 字段。
    • count:限流阈值
    • intervalSec:统计时间窗口,单位是秒,默认是1 秒(目前仅对参数限流生效)。
    • controlBehavior:流量整形的控制效果,同限流规则的 controlBehavior 字段,目前支持快速失败和匀速排队两种模式,默认是快速失败。
    • burst:应对突发请求时额外允许的请求数目(目前仅对参数限流生效)。
    • maxQueueingTimeoutMs:匀速排队模式下的最长排队时间,单位是毫秒,仅在匀速排队模式下生效。
    • paramItem:参数限流配置。若不提供,则代表不针对参数进行限流,该网关规则将会被转换成普通流控规则;否则会转换成热点规则。其中的字段:
    • parseStrategy:从请求中提取参数的策略,目前支持提取来源 IP(PARAM_PARSE_STRATEGY_CLIENT_IP)、
    • Host(PARAM_PARSE_STRATEGY_HOST)、任意 Header(PARAM_PARSE_STRATEGY_HEADER)和任意 URL 参数(PARAM_PARSE_STRATEGY_URL_PARAM)四种模式。
    • fieldName:若提取策略选择 Header 模式或 URL 参数模式,则需要指定对应的 header 名称或 URL 参数名称。
    • pattern 和 matchStrategy:为后续参数匹配特性预留,目前未实现。

    其实在控制台上 可以看到请求链路、还有流量规则。编辑的位置,都能匹配这是各种的组合配置。因为Sentinel 是阿里巴巴开源的流控框架。非常简单实用。文档也非常全面,强烈推荐能自己去官网学习这些资料。我这里只是做一个简单的整合。

    Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

    如何喜欢可以关注分享本公众号。
    file

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。转载请附带公众号二维码

  • 相关阅读:
    自我介绍
    《结对-结对编项目作业名称-开发过程》
    课后作业-阅读任务-阅读提问-3
    Forward团队-爬虫豆瓣top250项目-模块开发测试
    Forward团队-爬虫豆瓣top250项目-模块开发过程
    Forward团队-爬虫豆瓣top250项目-项目进度
    课后作业-阅读任务-阅读提问-2
    2017-10-06-构建之法:现代软件工程-阅读笔记
    《Forward团队-爬虫豆瓣top250项目-代码设计规范》
    《Forward团队-爬虫豆瓣top250项目-设计文档》
  • 原文地址:https://www.cnblogs.com/cloudxlr/p/11793136.html
Copyright © 2020-2023  润新知