跳到主要内容
版本:3.10.x

上游与负载均衡

上游定义服务的后端目标。它指定目标节点、网关如何在节点之间分发流量(负载均衡),以及如何监控节点可用性(健康检查)。

在 API7 企业版中,上游通常配置在服务的 upstream 字段中,也可以作为独立对象管理并由多个服务引用。

负载均衡算法

API7 网关支持多种在后端节点之间分发流量的算法。

算法说明最适合
roundrobin根据节点权重,依次向各节点分发请求。大多数通用应用。
chash使用一致性哈希(按 URI、Cookie 等)将请求映射到同一节点。需要会话保持的有状态应用。
least_conn将请求路由到活动连接数最少的节点。请求处理时间差异较大的工作负载。
ewma指数加权移动平均(Peak EWMA),选择预测延迟最低的节点。动态响应后端性能波动。

一致性哈希键

type 设置为 chash 时,网关对每个请求的某个属性进行哈希,并使用该哈希选择后端节点。产生相同值的请求会持续路由到同一节点。以下两个字段控制此行为:

  • hash_on:读取值的来源,默认为 vars
  • key:从该来源读取的字段。

key 接受的格式取决于 hash_on。保存上游时,网关会验证两者组合,并对无效 key 返回 400 错误。

hash_onkey 指代接受的 key示例
varsNGINX 变量仅限 uriserver_nameserver_addrrequest_uriremote_portremote_addrquery_stringhosthostnamemqtt_client_id,或格式为 arg_<name> 的查询参数。名称不应包含开头的 $remote_addrarg_device_id
header请求头仅填写请求头名称,不包含 http_ 前缀(支持字母、数字、-_,不区分大小写)。X-Api-Key
cookie请求 Cookie仅填写 Cookie 名称,不包含 cookie_ 前缀(支持字母、数字、-_)。session_id
consumer已完成身份认证的消费者不适用,请省略 key。网关对消费者名称进行哈希。
vars_combinations一个或多个变量任意由 $ 前缀变量引用组成的字符串,按请求解析。$request_uri$remote_addr
备注

hash_on: vars 仅接受上面列出的固定变量集,不接受完整的内置变量列表。要对该集合以外的变量或多个值的组合进行哈希,请使用 hash_on: vars_combinations,并为每个变量添加 $ 前缀,例如 $request_uri$remote_addr

如果无法为请求解析 key,例如指定的请求头或参数不存在,网关会回退到对 remote_addr 进行哈希。

主要字段

字段类型说明
typestring负载均衡算法:roundrobin(默认)、chashleast_connewma
nodesarray静态后端目标的 {host, port, weight, priority} 对象列表。
schemestring与后端通信的协议:httphttpsgrpcgrpcs
retriesinteger请求失败时的重试次数,范围为 0–65535。
timeoutobject超时设置:{connect, send, read},单位为秒,各项默认值为 60。
retry_timeoutnumber继续重试的超时时间,默认值为 0(禁用)。
pass_hoststringpass(服务主机)、node(节点主机)或 rewrite(自定义主机)。
keepalive_poolobject连接池设置:{size, idle_timeout, requests}
hash_onstringchash 配合使用,选择哈希来源:vars(默认)、headercookieconsumervars_combinations。请参阅一致性哈希键
keystringtypechash 时参与哈希的值。除非 hash_onconsumer,否则必填;接受的格式取决于 hash_on。请参阅一致性哈希键

服务发现

除了定义静态 nodes,还可以使用服务发现从注册中心动态获取后端目标。

字段说明
service_name注册中心中的服务标识符,例如 <registry_id>/public/group/my-service
discovery_type发现机制:kubernetesnacosconsul

健康检查

网关执行健康检查,以识别不健康节点并将其移出负载均衡轮询。

  • 主动健康检查:网关定期向后端发送 HTTP 或 TCP 心跳请求。
  • 被动健康检查:网关监控实时流量以识别故障节点,例如观察连续的 5xx 错误。

上游TLS

如果后端要求安全通信,可以配置以下字段:

  • client_certificate:用于客户端身份认证(mTLS)的证书 ID。
  • ca_certificates:用于验证后端证书的 CA 证书 ID 列表。
  • tls_verify:如果为 true,网关会使用 ca_certificates 验证后端证书。

后续步骤