zoukankan      html  css  js  c++  java
  • SpringCloud Alibaba (三):Sentinel 流量控制组件

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

    Sentinel 基本概念
    资源
    资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。

    只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

    规则
    围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

    规则的种类
    Sentinel 的所有规则都可以在内存态中动态地查询及修改,修改之后立即生效。同时 Sentinel 也提供相关 API,供您来定制自己的规则策略。

    Sentinel 支持以下几种规则:流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则 和 热点参数规则。

    流量控制规则 (FlowRule)
    流量规则的定义0
    重要属性:

    Field 说明 默认值
    resource 资源名,资源名是限流规则的作用对象
    count 限流阈值
    grade 限流阈值类型,QPS 或线程数模式 QPS 模式
    limitApp 流控针对的调用来源 default,代表不区分调用来源
    strategy 调用关系限流策略:直接、链路、关联 根据资源本身(直接)
    controlBehavior 流控效果(直接拒绝 / 排队等待 / 慢启动模式),不支持按调用关系限流 直接拒绝
    同一个资源可以同时有多个限流规则。

    通过代码定义流量控制规则
    理解上面规则的定义之后,我们可以通过调用 FlowRuleManager.loadRules() 方法来用硬编码的方式定义流量控制规则,比如:

    复制代码
    private static void initFlowQpsRule() {

    List<FlowRule> rules = new ArrayList<>();
    FlowRule rule1 = new FlowRule();
    rule1.setResource(resource);
    // Set max qps to 20
    rule1.setCount(20);
    rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule1.setLimitApp("default");
    rules.add(rule1);
    FlowRuleManager.loadRules(rules);

    }
    复制代码
    更多详细内容可以参考 流量控制。

    熔断降级规则 (DegradeRule)
    熔断降级规则包含下面几个重要的属性:

    Field 说明 默认值
    resource 资源名,即限流规则的作用对象
    count 阈值
    grade 熔断策略,支持秒级 RT/秒级异常比例/分钟级异常数 秒级平均 RT
    timeWindow 降级的时间,单位为 s
    同一个资源可以同时有多个降级规则。

    理解上面规则的定义之后,我们可以通过调用 DegradeRuleManager.loadRules() 方法来用硬编码的方式定义流量控制规则。

    复制代码
    private static void initDegradeRule() {

        List<DegradeRule> rules = new ArrayList<>();
        DegradeRule rule = new DegradeRule();
        rule.setResource(KEY);
        // set threshold rt, 10 ms
        rule.setCount(10);
        rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
        rule.setTimeWindow(10);
        rules.add(rule);
        DegradeRuleManager.loadRules(rules);
    }

    复制代码
    更多详情可以参考 熔断降级。

    系统保护规则 (SystemRule)
    规则包含下面几个重要的属性:

    Field 说明 默认值
    highestSystemLoad load1 阈值,参考值 -1 (不生效)
    avgRt 所有入口流量的平均响应时间 -1 (不生效)
    maxThread 入口流量的最大并发数 -1 (不生效)
    qps 所有入口资源的 QPS -1 (不生效)
    highestCpuUsage 当前系统的 CPU 使用率(0.0-1.0) -1 (不生效)
    理解上面规则的定义之后,我们可以通过调用 SystemRuleManager.loadRules() 方法来用硬编码的方式定义流量控制规则。

    复制代码
    private void initSystemProtectionRule() {
    List<SystemRule> rules = new ArrayList<>();
    SystemRule rule = new SystemRule();
    rule.setHighestSystemLoad(10);
    rules.add(rule);
    SystemRuleManager.loadRules(rules);
    }
    复制代码
    更多详情可以参考 系统自适应保护。

    访问控制规则 (AuthorityRule)
    很多时候,我们需要根据调用方来限制资源是否通过,这时候可以使用 Sentinel 的访问控制(黑白名单)的功能。黑白名单根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。

    授权规则,即黑白名单规则(AuthorityRule)非常简单,主要有以下配置项:

    resource:资源名,即限流规则的作用对象

    limitApp:对应的黑名单/白名单,不同 origin 用 , 分隔,如 appA,appB

    strategy:限制模式,AUTHORITY_WHITE 为白名单模式,AUTHORITY_BLACK 为黑名单模式,默认为白名单模式

    更多详情可以参考 来源访问控制。

    热点规则 (ParamFlowRule)
    详情可以参考 热点参数限流。

    Sentinel控制台
    概述
    Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。另外,鉴权在生产环境中也必不可少。这里,我们将会详细讲述如何通过简单的步骤就可以使用这些功能。

    接下来,我们将会逐一介绍如何整合 Sentinel 核心库和 Dashboard,让它发挥最大的作用。同时我们也在阿里云上提供企业级的控制台:AHAS Sentinel 控制台,您只需要几个简单的步骤,就能最直观地看到控制台如何实现这些功能。

    Sentinel 控制台包含如下功能:

    查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。

    监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最终可以实现秒级的实时监控。

    规则管理和推送:统一管理推送规则。

    鉴权:生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。

  • 相关阅读:
    opencv-learnopencv-Facial Landmark Detection
    【OpenCV】Learn OpenCV
    leetcode-1-TwoNums
    【c++基础】判断是否到文件末尾-eof函数
    【c++基础】int转string自动补零
    【linux】如何退出shell终端
    【机器学习算法】bagging算法
    【机器学习算法】Boostrapping算法
    【python基础】如何注释代码块
    【机器学习算法】cascade classifier级联分类器
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309113.html
Copyright © 2011-2022 走看看