All Downloads are FREE. Search and download functionalities are using the official Maven repository.

olaris.polaris-all.1.15.5.source-code.ratelimit.proto Maven / Gradle / Ivy

There is a newer version: 2.0.0.0
Show newest version
syntax = "proto3";

package v1;

import "google/protobuf/wrappers.proto";
import "google/protobuf/duration.proto";
import "model.proto";

option go_package = "github.com/polarismesh/specification/source/go/api/v1/traffic_manage";
option java_package = "com.tencent.polaris.specification.api.v1.traffic.manage";
option java_outer_classname = "RateLimitProto";

// 同一服务下限流规则集合
message RateLimit {
  // 限流规则集合
  repeated Rule rules = 1;
  // 限流规则汇总的revision信息
  google.protobuf.StringValue revision = 2;
}

// 单个限流规则信息
message Rule {
  // 限流规则唯一标识
  google.protobuf.StringValue id = 1;
  // 限流规则所属服务名
  google.protobuf.StringValue service = 2;
  // 限流规则所属命名空间
  google.protobuf.StringValue namespace = 3;
  // 可选,SUBSET标识
  map subset = 4;
  // 限流规则优先级,0值最高
  google.protobuf.UInt32Value priority = 5;
  // 限流资源
  enum Resource {
    // 针对QPS进行限流
    QPS = 0;
    // 针对并发数进行限流
    CONCURRENCY = 1;
  }
  Resource resource = 6;
  // 限流类型
  // global全局限流(默认)或者local单机限流
  enum Type {
    GLOBAL = 0;
    LOCAL = 1;
  }
  Type type = 7;
  // 业务标签集合,通过KV进行匹配,全部匹配才使用该规则
  map labels = 8;
  // 限流阈值
  // 可以有多个粒度的配置(比如同时针对秒级,分钟级,天级),匹配一个则进行限流
  // 全局限流模式下,该值为服务配额总量;单机限流模式下,该值为单个节点能处理的配额量
  repeated Amount amounts = 9;
  // 限流动作,对应着客户端的插件名字
  google.protobuf.StringValue action = 10;
  // 是否停用该限流规则,默认启用
  google.protobuf.BoolValue disable = 11;
  // 限流上报方式,同时支持按固定周期上报,以及达到配额百分比后上报
  Report report = 12;
  // 限流规则创建时间
  google.protobuf.StringValue ctime = 13;
  // 限流规则修改时间
  google.protobuf.StringValue mtime = 14;
  // 限流规则revision信息
  google.protobuf.StringValue revision = 15;
  // 服务的TOKEN信息,仅用于控制台,discover接口不下发
  google.protobuf.StringValue service_token = 16 [json_name = "service_token"];
  // 配额调整算法
  AmountAdjuster adjuster = 17;
  // 通配符是否合并计算,默认分开计数
  google.protobuf.BoolValue regex_combine = 18 [json_name = "regex_combine"];

  // 限流阈值模
  enum AmountMode {
    GLOBAL_TOTAL = 0;   // 总体阈值
    SHARE_EQUALLY = 1;  // 单机均摊阈值
  }
  AmountMode amount_mode = 19;
  // 与限流集群连接失败时降级模式
  enum FailoverType {
    FAILOVER_LOCAL = 0;  // 降级成本地阈值
    FAILOVER_PASS = 1;   // 降级成直接通过
  }
  FailoverType failover = 20;
  // 分布式限流服务集群
  RateLimitCluster cluster = 21;
  // 被调接口名
  MatchString method = 22;
  // 被调的参数过滤条件,满足过滤条件才进入限流规则
  repeated MatchArgument arguments = 23;
  // 限流规则名
  google.protobuf.StringValue name = 24;
  // 限流规则启用时间
  google.protobuf.StringValue etime = 25;
  // 最大排队时长,单位秒
  google.protobuf.UInt32Value max_queue_delay = 26 [json_name = "max_queue_delay"];
}

message MatchArgument {
  // label type for gateway request
  enum Type {
    // custom arguments
    CUSTOM = 0;
    // method, match the http post/get/put/delete or grpc method
    METHOD = 1;
    // header, match the http header, dubbo attachment, grpc header
    HEADER = 2;
    // query, match the http query, dubbo argument
    QUERY = 3;
    // caller service
    CALLER_SERVICE = 4;
    // caller host ip
    CALLER_IP =5;
  }
  Type type = 1;
  // header key or query key
  string key = 2;
  // header value or query value
  MatchString value = 3;
}

// 分布式限流服务集群
message RateLimitCluster {
  google.protobuf.StringValue service = 1;
  // 限流规则所属命名空间
  google.protobuf.StringValue namespace = 2;
}

// 限流配额
message Amount {
  // 时间周期内的最大配额数
  google.protobuf.UInt32Value maxAmount = 1;
  // 配额生效的时间周期,必须大于等于1s
  google.protobuf.Duration validDuration = 2;
  // 请求统计精度
  google.protobuf.UInt32Value precision = 3;
  // 可选,起始限流阈值,爬坡起始值
  google.protobuf.UInt32Value startAmount = 4;
  // 可选,最小限流阈值,降低时最小值
  google.protobuf.UInt32Value minAmount = 5;
}

// 限流上报方式
message Report {
  // 配额固定上报周期,单位毫秒
  google.protobuf.Duration interval = 1;
  // 使用了百分之多少配额后启动一次实时上报,值范围(0,100]
  google.protobuf.UInt32Value amountPercent = 2;
}

// 配额调整算法
message AmountAdjuster {
  ClimbConfig climb = 1;
}

// 限流调整算法Climb相关配置
message ClimbConfig {
  google.protobuf.BoolValue enable = 1;  // 是否开启

  // 限流数据统计配置
  message MetricConfig {
    // 限流数据度量周期,默认60s
    google.protobuf.Duration window = 1;
    // 数据统计精度,决定数据度量的最小周期,度量滑窗的步长=window/precision
    google.protobuf.UInt32Value precision = 2;
    // 上报周期,默认20s
    google.protobuf.Duration reportInterval = 3;
  }
  MetricConfig metric = 2; // 限流数据统计配置

  // 触发调整的策略
  message TriggerPolicy {
    // 错误率触发调整配置
    message ErrorRate {
      google.protobuf.BoolValue enable = 1;  // 是否开启
      google.protobuf.UInt32Value requestVolumeThreshold = 2;  // 触发限流调整的最小的请求数
      google.protobuf.Int32Value errorRate = 3;  // 触发限流的错误率配置

      // 特殊错误码触发调整配置
      message SpecialConfig {
        google.protobuf.StringValue  type = 1;  // 自定义错误类型
        repeated google.protobuf.Int64Value errorCodes = 2;  // 特定规则针对的错误码
        google.protobuf.Int32Value errorRate = 3; //特定规则错误率
      }
      repeated SpecialConfig specials = 4;  // 针对部分错误码,使用额外的错误率统计,可设置多组特殊规则
    }

    // 慢调用触发调整配置
    message SlowRate {
      google.protobuf.BoolValue enable = 1;  // 是否开启
      google.protobuf.Duration maxRt = 2;  // 最大响应时间,超过该响应时间属于慢调用
      google.protobuf.Int32Value slowRate = 3;  // 慢请求率阈值,达到该阈值进行限流
    }

    ErrorRate errorRate = 1;  // 按错误率阈值调整
    SlowRate slowRate = 2;  // 慢调用进行触发调整
  }

  TriggerPolicy policy = 3; // 触发调整策略

  // 爬坡调整相关参数
  message ClimbThrottling {
    google.protobuf.Int32Value coldBelowTuneDownRate = 1;  // 冷水位以下区间的下调百分比
    google.protobuf.Int32Value coldBelowTuneUpRate = 2;  // 冷水位以下区间的上调百分比
    google.protobuf.Int32Value coldAboveTuneDownRate = 3;  // 冷水位以上区间的下调百分比
    google.protobuf.Int32Value coldAboveTuneUpRate = 4;  // 冷水位以上区间的上调百分比
    google.protobuf.Int32Value limitThresholdToTuneUp = 5;  // 冷水位以上,超过该百分的请求被限流后进行阈值上调
    google.protobuf.Duration judgeDuration = 6;  // 阈值调整规则的决策间隔
    google.protobuf.Int32Value tuneUpPeriod = 7;  // 阈值上调周期数,连续N个决策间隔都为上调,才执行上调
    google.protobuf.Int32Value tuneDownPeriod = 8;  // 阈值下调周期数,连续N个决策间隔都为下调,才执行下调
  }

  ClimbThrottling throttling = 4;  // 限流调整相关参数
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy