统一HTTP和传统RPC的治理策略配置层级
.
└── 服务
├── 分组*
│ ├── 路径*
│ │ ├── 方法*
服务治理策略放在分组、路径和方法上,可以逐级设置,下级默认继承上级的配置
服务的默认策略设置到默认分组default
上
类型 | 服务 | 分组 | 路径 | 方法 |
---|---|---|---|---|
HTTP | 域名 | 分组 | URL路径 | HTTP方法 |
RPC 应用级注册 | 应用名 | 分组 | 接口名 | 方法名 |
RPC 接口级注册 | 接口名 | 分组 | / | 方法名 |
元素 | 说明 |
---|---|
写保护 | 是否写方法,需要在容灾切换的时候禁止写数据 |
变量表达式 | 单元化场景,可设置从方法参数获取路由变量 |
单元策略 | 非单元化、本单元优先、单元化和中心 |
默认单元容错阈值 | 本单元优先策略下,当单元指标小于该阈值可以跨单元访问 |
单元容错阈值 | 设置每个单元的容错阈值 |
分区策略 | 本分区优先、不限 |
默认分区容错阈值 | 本分区优先策略下,当分区指标小于该阈值可以跨单元访问 |
分区容错阈值 | 设置每个分区的容错阈值 |
{
"writeProtect": false,
"variableExpression": null,
"unitPolicy": "PREFER_LOCAL_UNIT",
"defaultUnitThreshold": 1,
"unitRemotes": [
{
"name": "unit2",
"type": "INSTANCES",
"threshold": 1
}
],
"cellPolicy": "PREFER_LOCAL_CELL",
"defaultCellThreshold": 3,
"cellRemotes": [
{
"name": "cell1",
"type": "INSTANCES",
"threshold": 4
}
]
}
元素 | 说明 |
---|---|
自动加入泳道 | 当应用部署到某个泳道后,是否自动加入该泳道路由。true 自动加入;false 不自动加入,按照配置的泳道策略生效;null 继承上级或泳道的配置项,泳道默认配置为自动加入 |
泳道空间 | 配置参与那些泳道空间及泳道路由 |
{
"autoLaneEnabled": true,
"lanePolicies": [
{
"laneSpaceId": "lane-space-1",
"lanes": {
"gray": "beta"
}
}
]
}
该策略描述自动加入泳道,在泳道空间
lane-space-1
中,把泳道gray
的流量重定向到泳道beta
元素 | 说明 |
---|---|
类型 | 故障切换、快速失败、失败可容忍 |
重试策略 | 当类型为故障切换,可配置重试策略,包括重视次数、重试时间间隔、超时时间、重试状态和重试异常 |
{
"clusterPolicy": {
"type": "failover",
"retryPolicy": {
"retry": 10,
"retryInterval": 1000,
"timeout": 5000,
"codePolicy": {
"parser": "JsonPath",
"expression": "$.code",
"contentTypes": [
"application/json"
]
},
"retryStatuses": [
500,
502
],
"retryExceptions": [
"java.lang.NullPointException"
]
}
}
}
元素 | 说明 |
---|---|
类型 | 随机权重和轮询 1. RANDOM 随机权重; 2. ROUND_ROBIN 轮询 |
粘连 | 粘连策略 1. NONE 不开启; 2. PREFERRED 优先保存粘连节点; 3. FIXED 固定粘连节点 |
{
"loadBalancePolicy": {
"policyType": "ROUND_ROBIN",
"stickyType": "NONE"
}
}
元素 | 说明 |
---|---|
名称 | 限流策略名称 |
类型 | 限流实现类型,包括Resilience4j 和TokenBucket |
滑动窗口 | 配置滑动窗口信息,包括调用次数和时间窗 |
最大等待时间 | 最大等待时间 |
参数 | 限流操作需要的参数 |
条件 | 限流开启的条件 |
{
"rateLimitPolicies": [
{
"name": "limit-rule-1",
"version": 1704038400000,
"realizeType": "Resilience4j",
"slidingWindows": [
{
"threshold": 1,
"timeWindowInMs": 1000
},
{
"threshold": 3,
"timeWindowInMs": 2000
}
],
"maxWaitMs": 100,
"actionParameters": {
},
"relationType": "AND",
"conditions": [
{
"type": "header",
"opType": "EQUAL",
"key": "x-live-ext-demo",
"value": [
"abc"
]
}
]
}
]
}
元素 | 说明 |
---|---|
名称 | 并发控制策略名称 |
类型 | 限流实现类型,包括Resilience4j |
最大并发数 | 最大并发数 |
最大等待时间 | 最大等待时间 |
参数 | 限流操作需要的参数 |
条件 | 限流开启的条件 |
{
"concurrencyLimitPolicies": [
{
"name": "limit-rule-2",
"version": 1704038400000,
"realizeType": "Resilience4j",
"maxConcurrency": 10,
"maxWaitMs": 100,
"actionParameters": {
},
"relationType": "AND",
"conditions": [
{
"type": "header",
"opType": "EQUAL",
"key": "x-live-ext-demo",
"value": [
"abc"
]
}
]
}
]
}
元素 | 说明 |
---|---|
名称 | 策略名称 |
规则 | 定义多个规则,每个规则包括开启条件、目标权重和目标标签 |
{
"routePolicies": [
{
"name": "route1",
"tagRules": [
{
"order": 5,
"relationType": "AND",
"conditions": [
{
"opType": "EQUAL",
"type": "header",
"key": "x-live-unit",
"values": [
"unit1"
]
}
],
"destinations": [
{
"weight": 100,
"relationType": "AND",
"conditions": [
{
"opType": "EQUAL",
"key": "unit",
"values": [
"unit1"
]
}
]
}
]
}
]
}
]
}
stateDiagram-v2
DIRECTION BT
关闭 --> 开启 : 失败达到阈值
开启 --> 半开 : 达到超时
半开 --> 关闭 : 成功
半开 --> 开启 : 失败
关闭 --> 关闭 : 成功/失败未到阈值
开启 --> 开启 : 调用抛出异常
元素 | 说明 |
---|---|
名称 | 策略名称 |
级别 | SERVICE:服务级别;API:API级别;INSTANCE:实例级别 |
滑动窗口类型 | 指定滑动窗口的类型,count:次数;time:时间 |
滑动窗口大小 | 指定滑动窗口的大小,如果是count,则为调用次数,如果是time,则为秒 |
最小调用次数 | 保护阈值,防止调用次数过小的应用因为偶发故障产生熔断 |
错误码策略 | 用于从应答体中提取错误码 |
错误码 | 请求返回列表中的响应码之一,则会被熔断器所记录一次失败 |
熔断失败比率 | 触发熔断的失败次数比率阈值 |
熔断慢调用比例 | 触发熔断的慢调用次数比率阈值 |
慢调用界定阈值 | 调用耗时多长以上算是慢调用 |
熔断时间 | 触发熔断时(状态为开启),多长时间内不允许授予访问令牌 |
半开状态调用次数 | 熔断器进入半开状态时,可以允许多少次尝试性访问 |
强制开启 | 强制开启熔断 |
降级配置 | 熔断发生时,若进行降级配置,则会返回配置数据作为响应 |
{
"circuitBreakPolicies": [
{
"name": "cb1",
"level": "SERVICE",
"slidingWindowType": "count",
"slidingWindowSize": 5,
"minCallsThreshold": 1,
"codePolicy": {
"parser": "JsonPath",
"expression": "$.code",
"contentTypes": [
"application/json"
]
},
"errorCodes": [
"500",
"502"
],
"failureRateThreshold": 20,
"slowCallRateThreshold": 20,
"slowCallDurationThreshold": 1000,
"waitDurationInOpenState": 50,
"allowedCallsInHalfOpenState": 3,
"forceOpen": false,
"degradeConfig": {
"responseCode": 200,
"attributes": {
"degrade-header-1": "degraded1",
"degrade-header-2": "degraded2"
},
"responseBody": "Hello, your request has been downgraded."
},
"version": 1704038400000
}
]
}
下面以json格式展示了服务策略
[
{
"name": "service-provider",
"serviceType": "HTTP",
"version": 0,
"groups": [
{
"name": "default",
"defaultGroup": true,
"servicePolicy": {
"livePolicy": {
},
"lanePolicies": [
],
"clusterPolicy": {
},
"loadBalancePolicy": {
},
"rateLimitPolicies": [
],
"concurrencyLimitPolicies": [
],
"routePolicies": [
],
"circuitBreakPolicies": [
]
},
"paths": [
{
"path": "/echo",
"matchType": "EQUAL",
"servicePolicy": {
},
"methods": [
{
"name": "GET",
"servicePolicy": {
}
}
]
}
]
}
]
}
]