按需激活与缩容到零¶
按需激活让 HTTP 或 unary gRPC 服务空闲时缩到零;第一个请求由 dxgate 扣住,等 KEDA 扩容和 EDS 收敛后再放行,而不是返回 503。
南北向与东西向¶
南北向请求已经经过托管 Gateway,dxgate 可直接扣住冷请求。
东西向 Inherent 调用平时由调用方直接连接 EDS 端点。目标缩到零时,dubbod 不下发空 EDS,而是临时把端点切到同命名空间专用 Activator Gateway dxgate-gateway。Activator 根据原始 Host 扣住请求;后端 Ready 后 EDS 恢复真实端点,新请求重新走直连热路径。
因此 HTTP 和 unary gRPC 的入口及网格内调用都可以缩到零;流式 RPC、长连接和无法重放的请求仍应保持至少一个副本。
三方分工¶
| 组件 | 负责 | 不负责 |
|---|---|---|
ServiceActivationPolicy |
声明目标、协议、等待时间、最大 pending、失败策略 | 不写副本数 |
KEDA ScaledObject |
查询 pending,作为副本数的唯一写入者 | 不扣请求 |
| dxgate Activator | 扣请求、上报 pending、等待端点并放行 | 不扩容工作负载 |
一次冷启动¶
- KEDA 把服务缩到零。
dubbod将冷 EDS 指向dxgate-gateway。- 请求到达 Activator;它按策略上限扣住并上报 pending。
- KEDA external scaler 从
dubbod-activation查询 pending,把副本从 0 扩到 1。 - Pod Ready,
dubbod恢复真实 EDS。 - Activator 放行被扣请求;后续请求走热路径直连后端。
HA 与 mTLS¶
托管 Activator 与 dubbod 默认支持多副本和 PodDisruptionBudget。网关向 headless dubbod-activation-replicas 的每个控制面副本上报,KEDA 从负载均衡的 dubbod-activation 查询,因此任一副本都看到相同 pending。
东西向冷/热 EDS 切换时 CDS 不切换。backendServiceAccounts 必须列出后端身份;控制面同时发布后端与 Activator 的 SAN,避免切换期间出现证书校验窗口。
成本与边界¶
- 第一个请求承担 KEDA 轮询、调度、拉镜像、进程启动、证书和首次 xDS 收敛时间。
requestTimeout要大于实测冷启动时间,并小于调用方 deadline。maxPendingRequests限制单目标占用;网关全局 backlog 还有独立上限。- 流式请求、长连接、有状态服务和冷启动过长的服务不适合缩到零。
- 监控
dxgate_activation_requests_held、策略ScalerReady/ActivatorReady、KEDA/HPA 条件和请求错误率。
配置与验证见按需激活任务。