diff --git a/docs/.vuepress/config/sidebar/zh.ts b/docs/.vuepress/config/sidebar/zh.ts index 82d22262b..6ffa2c112 100755 --- a/docs/.vuepress/config/sidebar/zh.ts +++ b/docs/.vuepress/config/sidebar/zh.ts @@ -28,6 +28,7 @@ export const sidebarZh: SidebarConfig = { '/config/stats.md', '/config/transport.md', '/config/metrics.md', + '/config/observatory.md', ], }, { diff --git a/docs/config/README.md b/docs/config/README.md index bebc166f1..03ea595bb 100644 --- a/docs/config/README.md +++ b/docs/config/README.md @@ -23,7 +23,9 @@ Xray 的配置文件为 json 格式, 客户端和服务端的配置格式没有 "stats": {}, "reverse": {}, "fakedns": {}, - "metrics": {} + "metrics": {}, + "observatory": {}, + "burstObservatory": {} } ``` @@ -80,3 +82,11 @@ FakeDNS 配置。可配合透明代理使用,以获取实际域名。 > metrics: [metricsObject](./metrics.md) metrics 配置。更直接(希望更好)的统计导出方式。 + +> observatory: [ObservatoryObject](./observatory.md#observatoryobject) + +后台连接观测。探测出站代理的连接状态。 + +> burstObservatory: [BurstObservatoryObject](./observatory.md#burstobservatoryobject) + +并发连接观测。探测出站代理的连接状态。 diff --git a/docs/config/observatory.md b/docs/config/observatory.md new file mode 100644 index 000000000..cd15d9880 --- /dev/null +++ b/docs/config/observatory.md @@ -0,0 +1,80 @@ +# 连接观测 + +连接观测组件使用 HTTPing 的方式探测出站代理的连接状态。观测结果可以被其他组件使用,如负载均衡器。目前有 [observatory](#observatoryobject) (后台连接观测)和 [burstObservatory](#burstobservatoryobject) (并发连接观测)两种。按需选择其中之一就行。 + +## ObservatoryObject +```json +{ + "subjectSelector":[ + "outbound" + ], + "probeUrl": "https://www.google.com/generate_204", + "probeInterval": "10s", + "enableConcurrency": false +} +``` + +> `subjectSelector`: \[ string \] + +一个字符串数组,其中每一个字符串将用于和出站代理标识的前缀匹配。在以下几个出站代理标识中:`[ "a", "ab", "c", "ba" ]`,`"subjectSelector": ["a"]` 将匹配到 `[ "a", "ab" ]`。 + +> `probeUrl`: string + +用于探测出站代理连接状态的网址。 + +> `probeInterval`: string + +发起探测的间隔。时间格式为数字 + 单位,比如 `"10s"`, `"2h45m"`,支持的时间单位有 `ns`, `us`, `ms`, `s`, `m`, `h`, 分别对应纳秒、微秒、毫秒、秒、分、时。 + +> `enableConcurrency`: true | false + +- `true` 并发探测全部匹配的出站代理,全部完成后暂停 `probeInterval` 设定的时间。 +- `false` 逐个探测匹配的出站代理,每探测一个出站代理后暂停 `probeInterval` 设定的时间。 + +## BurstObservatoryObject +```json +{ + "subjectSelector":[ + "outbound" + ], + "pingConfig": {} +} +``` + +> `subjectSelector`: \[ string \] + +一个字符串数组,其中每一个字符串将用于和出站代理标识的前缀匹配。在以下几个出站代理标识中:`[ "a", "ab", "c", "ba" ]`,`"subjectSelector": ["a"]` 将匹配到 `[ "a", "ab" ]`。 + +> `pingConfig`: [PingConfigObject](#PingConfigObject) + + +### PingConfigObject +```json +{ + "destination": "https://connectivitycheck.gstatic.com/generate_204", + "connectivity": "", + "interval": "1h", + "sampling": 3, + "timeout": "30s" +} +``` + +> `destination`: string + +用于探测出站代理连接状态的网址。这个网址应该返回 HTTP 204 成功状态码。 + +> `connectivity`: string + +用于检测本地网络连通性的网址。空字符串表示不检测本地网络连通性。 + +> `interval`: string + +在指定时间内探测全部匹配的出站代理,每个出站代理探测 sampling + 1 次。时间格式为数字 + 单位,比如 `"10s"`, `"2h45m"`,支持的时间单位有 `ns`, `us`, `ms`, `s`, `m`, `h`, 分别对应纳秒、微秒、毫秒、秒、分、时。 + +> `sampling`: number + +保留最近探测结果的数量。 + +> `timeout`: string + +探测超时时间。格式和上面的 `interval` 相同。 diff --git a/docs/config/routing.md b/docs/config/routing.md index 495e73b9c..305507aea 100644 --- a/docs/config/routing.md +++ b/docs/config/routing.md @@ -192,9 +192,8 @@ Xray-core v1.8.7 或更高版本可省略该行。 { "tag": "balancer", "selector": [], - "strategy": { - "type":"roundRobin" - } + "fallbackTag": "outbound", + "strategy": {} } ``` @@ -208,11 +207,32 @@ Xray-core v1.8.7 或更高版本可省略该行。 如果匹配到多个 outbound,负载均衡器目前会从中随机选出一个作为最终的 outbound。 -> `strategy`: \[ string \] +> `fallbackTag`: string -`"type":"roundRobin"` 表示按顺序选择匹配到的 outbounds tag,若不写 `"strategy"` 字段表示随机选择匹配到的 outbounds tag。 +如果负载均衡器无法选出合适的 outbound,则使用这个配置项指定的 outbound。 -配置示例: +> `strategy`: [StrategyObject](#strategyobject) + +#### StrategyObject +```json +{ + "type": "roundRobin", + "settings": {} +} +``` +> `type` : "random" | "roundRobin" | "leastPing" | "leastLoad" + +- `random` 默认值。随机选择匹配到的出站代理。 +- `roundRobin` 按顺序选择匹配到的出站代理。 +- `leastPing` 根据连接观测结果选择延迟最小的匹配到的出站代理。需要添加 [observatory](./observatory.md#observatoryobject) 配置项。 +- `leastLoad` 根据连接观测结果选择最稳定的出站代理。需要添加 [burstObservatory](./observatory.md#burstobservatoryobject) 配置项。 + +> `settings`: [StrategySettingsObject](#strategysettingsobject) + +##### StrategySettingsObject +这是一个可选配置项,不同负载均衡策略的配置格式有所不同。目前只有 `leastLoad` 负载均衡策略可以添加这个配置项。 + +### 负载均衡配置示例 ```json "routing": {