feat(routing): 引入多执行池智能调度

将 Worker 发现、路由画像、容量与执行传输抽象为平台无关接口,新增 Kubernetes 和静态容量适配器,并以 shadow 模式接入生产配置。

实现网络与容量评分、路由防抖、池队列、同步 Worker 租约、一次性执行令牌,以及提交状态不明时禁止重复分配的安全语义。

新增 0105 兼容迁移、管理接口、指标、OpenAPI 和回归测试。已执行全量 Go 测试、go vet、OpenAPI、迁移安全、Compose 与 Kustomize 验证。
This commit is contained in:
2026-08-05 22:25:37 +08:00
parent 03c0873649
commit 7786692d32
58 changed files with 4510 additions and 348 deletions
@@ -44,6 +44,7 @@ data:
AI_GATEWAY_WORKER_MIN_REPLICAS_HONGKONG: "1"
AI_GATEWAY_WORKER_MAX_REPLICAS_NINGBO: "2"
AI_GATEWAY_WORKER_MAX_REPLICAS_HONGKONG: "2"
AI_GATEWAY_CAPACITY_POOLS: '[{"id":"ningbo","adapterRef":"ningbo","bootstrapReplicas":1,"minReplicas":1,"maxReplicas":2},{"id":"hongkong","adapterRef":"hongkong","bootstrapReplicas":1,"minReplicas":1,"maxReplicas":2}]'
AI_GATEWAY_WORKER_TARGET_OUTSTANDING_PER_REPLICA: "48"
AI_GATEWAY_WORKER_SCALE_UP_WINDOW_SECONDS: "20"
AI_GATEWAY_WORKER_SCALE_DOWN_STABILIZATION_SECONDS: "600"
@@ -47,10 +47,16 @@ data:
AI_GATEWAY_ASYNC_WORKER_HARD_LIMIT: "48"
AI_GATEWAY_ASYNC_WORKER_GLOBAL_HARD_LIMIT: "48"
AI_GATEWAY_ASYNC_WORKER_REFRESH_INTERVAL_SECONDS: "5"
AI_GATEWAY_ROUTING_MODE: shadow
AI_GATEWAY_ROUTE_PROBE_ENABLED: "true"
AI_GATEWAY_ROUTE_PROBE_HOT_INTERVAL_SECONDS: "15"
AI_GATEWAY_ROUTE_PROBE_COLD_INTERVAL_SECONDS: "60"
AI_GATEWAY_ROUTE_PROBE_TIMEOUT_MS: "3000"
AI_GATEWAY_WORKER_ENDPOINT_ALLOW_PRIVATE: "true"
AI_GATEWAY_CAPACITY_ORCHESTRATOR_ADAPTER: kubernetes
AI_GATEWAY_CAPACITY_POOLS: >-
[{"id":"pool-cn-east-1","adapterRef":"ningbo","bootstrapReplicas":1,"minReplicas":1,"maxReplicas":1},{"id":"pool-hk-1","adapterRef":"hongkong","bootstrapReplicas":1,"minReplicas":1,"maxReplicas":1}]
AI_GATEWAY_WORKER_AUTOSCALING_ENABLED: "false"
AI_GATEWAY_WORKER_REPLICAS_NINGBO: "1"
AI_GATEWAY_WORKER_MIN_REPLICAS_NINGBO: "1"
AI_GATEWAY_WORKER_MAX_REPLICAS_NINGBO: "1"
AI_GATEWAY_WORKER_TARGET_OUTSTANDING_PER_REPLICA: "48"
AI_GATEWAY_WORKER_SCALE_UP_WINDOW_SECONDS: "20"
AI_GATEWAY_WORKER_SCALE_DOWN_STABILIZATION_SECONDS: "600"
+40 -4
View File
@@ -94,6 +94,10 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.uid
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: EASYAI_SITE
value: ningbo
ports:
@@ -363,6 +367,10 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.uid
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: EASYAI_SITE
value: hongkong
ports:
@@ -540,8 +548,22 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.uid
- name: EASYAI_SITE
value: ningbo
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: AI_GATEWAY_WORKER_ID
value: pool-cn-east-1-worker
- name: AI_GATEWAY_WORKER_ADVERTISE_ENDPOINT
value: http://$(POD_IP):8088
- name: AI_GATEWAY_ORCHESTRATOR_INSTANCE_REF
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: AI_GATEWAY_EXECUTION_POOL_ID
value: pool-cn-east-1
- name: AI_GATEWAY_EXECUTION_POOL_LABELS
value: '{"region":"cn-east","zone":"ningbo","provider":"self-hosted","egress_profile":"direct"}'
ports:
- name: health
containerPort: 8088
@@ -717,8 +739,22 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.uid
- name: EASYAI_SITE
value: hongkong
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: AI_GATEWAY_WORKER_ID
value: pool-hk-1-worker
- name: AI_GATEWAY_WORKER_ADVERTISE_ENDPOINT
value: http://$(POD_IP):8088
- name: AI_GATEWAY_ORCHESTRATOR_INSTANCE_REF
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: AI_GATEWAY_EXECUTION_POOL_ID
value: pool-hk-1
- name: AI_GATEWAY_EXECUTION_POOL_LABELS
value: '{"region":"ap-east","zone":"hongkong","provider":"self-hosted","egress_profile":"direct"}'
- name: AI_GATEWAY_PLATFORM_PROXY_BYPASS_IDS
value: 99372d7c-f2a4-472a-987f-30cb76c7962c
ports: