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

olaris.polaris-all.1.2.4.source-code.circuitbreaker.proto Maven / Gradle / Ivy

syntax = "proto3";

package v1;

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

option java_package = "com.tencent.polaris.client.pb";
option java_outer_classname = "CircuitBreakerProto";

//单个熔断规则定义
message CircuitBreaker {
  google.protobuf.StringValue id = 1;
  // 规则版本
  google.protobuf.StringValue version = 2;
  // 规则名
  google.protobuf.StringValue name = 3;
  // 规则命名空间
  google.protobuf.StringValue namespace = 4;

  // 规则所属服务
  google.protobuf.StringValue service = 5;
  google.protobuf.StringValue service_namespace = 6;

  //熔断规则可以分为被调规则和主调规则
  //被调规则针对所有的指定主调生效,假如不指定则对所有的主调生效
  //主调规则为当前主调方的规则,假如不指定则针对所有被调生效
  repeated CbRule inbounds = 7;
  repeated CbRule outbounds = 8;

  google.protobuf.StringValue token = 9;
  google.protobuf.StringValue owners = 10;
  // 业务
  google.protobuf.StringValue business = 11;
  // 部门
  google.protobuf.StringValue department = 12;

  // 规则描述
  google.protobuf.StringValue comment = 13;
  google.protobuf.StringValue ctime = 14;
  google.protobuf.StringValue mtime = 15;
  google.protobuf.StringValue revision = 16;
}

// 主调匹配规则
message SourceMatcher {
  // 主调命名空间以及服务名,可以为*,代表全匹配
  google.protobuf.StringValue service = 1;
  google.protobuf.StringValue namespace = 2;
  // 可选,主调业务标签,用于匹配是否使用该熔断规则,可放置用户的接口信息等
  map labels = 3;
}

// 熔断恢复配置
message RecoverConfig {
  // 触发熔断后到半开状态之间的等待间隔
  google.protobuf.Duration sleepWindow = 1;
  // 半开后,最多重试多少次恢复
  google.protobuf.UInt32Value maxRetryAfterHalfOpen = 2;
  // 半开后放量的最大百分比
  repeated google.protobuf.UInt32Value requestRateAfterHalfOpen = 3;
  // 熔断器半开到关闭所必须的最少成功率,默认100%
  google.protobuf.UInt32Value successRateToClose = 4;
  // 半开后最大放量数(用户不配置最大百分比时默认使用该配置)
  google.protobuf.UInt32Value requestCountAfterHalfOpen = 5;
  //主动探测配置
  enum OutlierDetectWhen {
    //不开启监控探测
    NEVER = 0;
    //只有在熔断恢复时才开启健康探测
    ON_RECOVER = 1;
    //一直开启健康探测
    ALWAYS = 2;
  }
  OutlierDetectWhen outlierDetectWhen = 6;
}

// 熔断策略
message CbPolicy {
  // 错误率熔断配置
  message ErrRateConfig {
    //是否启用错误率配置
    google.protobuf.BoolValue enable = 1;
    // 触发错误率熔断的最低请求阈值
    google.protobuf.UInt32Value requestVolumeThreshold = 2;
    // 可选。触发保持状态的错误率阈值,假如不配置,则默认不会进入Preserved状态
    google.protobuf.UInt32Value errorRateToPreserved = 3;
    // 触发熔断的错误率阈值
    google.protobuf.UInt32Value errorRateToOpen = 4;
  }
  ErrRateConfig errorRate = 1;
  // 慢调用率熔断策略配置
  message SlowRateConfig {
    // 是否启用慢调用率配置
    google.protobuf.BoolValue enable = 1;
    // 最大响应时间,超过该时间属于慢调用请求
    google.protobuf.Duration maxRt = 2;
    // 可选。触发保持状态的超时率阈值,假如不配置,则默认不会进入Preserved状态
    google.protobuf.UInt32Value slowRateToPreserved = 3;
    // 触发熔断的超时率阈值
    google.protobuf.UInt32Value slowRateToOpen = 4;
  }
  SlowRateConfig slowRate = 2;
  // 熔断的决策周期,多久触发一次熔断决策
  google.protobuf.Duration judgeDuration = 3;
  //最大熔断比例,超过多少比例后不会继续熔断
  google.protobuf.UInt32Value maxEjectionPercent = 4;
  //连续错误数熔断配置
  message ConsecutiveErrConfig {
    // 是否启用连续错误数配置
    google.protobuf.BoolValue enable = 1;
    // 连续错误数阈值,进入Preserved状态
    google.protobuf.UInt32Value consecutiveErrorToPreserved = 2;
    // 连续错误数阈值,进入Open状态
    google.protobuf.UInt32Value consecutiveErrorToOpen = 3;
  }
  ConsecutiveErrConfig consecutive = 5;
}

// 目标set的规则
message DestinationSet {
  // 被调命名空间以及服务名,可以为*,代表全匹配
  google.protobuf.StringValue service = 1;
  google.protobuf.StringValue namespace = 2;
  // 可选,SUBSET标识
  map metadata = 3;
  // 需要进行熔断的资源
  // 支持SUBSET(子集群),以及INSTANCE(单个实例),默认为SUBSET
  enum Resource {
    // 针对实例分组进行熔断
    SUBSET = 0;
    // 针对实例进行熔断
    INSTANCE = 1;
  }
  Resource resource = 4;
  // 熔断决策类型,支持GLOBAL(分布式决策)以及LOCAL(本地决策),默认GLOBAL
  // 当指定为GLOBAL时,则会定期上报统计数据并根据汇总数据进行熔断决策
  enum Type {
    GLOBAL = 0;
    LOCAL = 1;
  }
  Type type = 5;

  //熔断范围,是否扩散针对相同服务下所有接口进行熔断
  enum Scope {
    //触发熔断条件,扩散熔断所有接口
    ALL = 0;
    //触发熔断条件,只熔断当前接口
    CURRENT = 1;
  }
  Scope scope = 6;

  // 熔断数据度量周期
  // 所有的阈值指标按此周期进行统计
  google.protobuf.Duration metricWindow = 7;

  // 熔断数据统计精度,决定数据度量的最小周期
  // 度量滑窗的步长=window/precision
  google.protobuf.UInt32Value metricPrecision = 8;

  // 熔断数据上报周期,对分布式熔断有效
  google.protobuf.Duration updateInterval = 9;

  // 触发熔断后恢复配置
  RecoverConfig recover = 10;

  // 熔断策略
  CbPolicy policy = 11;

  // 被调的接口信息,指定哪些接口会使用该规则
  MatchString method = 12;

  // 返回码,指定哪些返回码会使用该规则
  repeated google.protobuf.Int64Value errorCodes = 13;
}

// 具体熔断规则
message CbRule {
  // 如果匹配Source规则,按照Destination进行熔断
  // 多个Source之间的关系为或
  repeated SourceMatcher sources = 1;
  repeated DestinationSet destinations = 2;
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy