perf(acceptance): 将 API 连接池提升至 64

P24 千并发在 API Pool 48 下仍出现 acquired 接近上限及 canceled acquire 增长,而 Worker Pool 仅使用 3 条连接,PostgreSQL 实际连接数仍有安全余量。

将生产 API Pool 默认值提升至 64,并允许通过 AI_GATEWAY_ACCEPTANCE_API_DATABASE_MAX_CONNS 配置单次验收;Worker 档位与 min-idle=4 保持不变。

验证:bash -n、ShellCheck、kubectl kustomize 和 git diff --check 通过。
This commit is contained in:
2026-07-31 03:38:28 +08:00
parent 2529679b67
commit 75a56b21bc
5 changed files with 14 additions and 7 deletions
@@ -19,7 +19,7 @@ source "$config_file"
: "${AI_GATEWAY_ASYNC_WORKER_INSTANCE_HARD_LIMIT:=24}" : "${AI_GATEWAY_ASYNC_WORKER_INSTANCE_HARD_LIMIT:=24}"
: "${AI_GATEWAY_ASYNC_WORKER_HARD_LIMIT:=48}" : "${AI_GATEWAY_ASYNC_WORKER_HARD_LIMIT:=48}"
: "${AI_GATEWAY_DATABASE_MAX_CONNS:=32}" : "${AI_GATEWAY_DATABASE_MAX_CONNS:=32}"
: "${AI_GATEWAY_API_DATABASE_MAX_CONNS:=48}" : "${AI_GATEWAY_API_DATABASE_MAX_CONNS:=64}"
: "${AI_GATEWAY_DATABASE_MIN_IDLE_CONNS:=4}" : "${AI_GATEWAY_DATABASE_MIN_IDLE_CONNS:=4}"
: "${AI_GATEWAY_MEDIA_MATERIALIZATION_CONCURRENCY:=24}" : "${AI_GATEWAY_MEDIA_MATERIALIZATION_CONCURRENCY:=24}"
: "${AI_GATEWAY_MEDIA_REQUEST_CONCURRENCY:=24}" : "${AI_GATEWAY_MEDIA_REQUEST_CONCURRENCY:=24}"
@@ -10,7 +10,7 @@ AI_GATEWAY_WORKER_REPLICAS_HONGKONG=1
AI_GATEWAY_ASYNC_WORKER_INSTANCE_HARD_LIMIT=24 AI_GATEWAY_ASYNC_WORKER_INSTANCE_HARD_LIMIT=24
AI_GATEWAY_ASYNC_WORKER_HARD_LIMIT=48 AI_GATEWAY_ASYNC_WORKER_HARD_LIMIT=48
AI_GATEWAY_DATABASE_MAX_CONNS=32 AI_GATEWAY_DATABASE_MAX_CONNS=32
AI_GATEWAY_API_DATABASE_MAX_CONNS=48 AI_GATEWAY_API_DATABASE_MAX_CONNS=64
AI_GATEWAY_DATABASE_MIN_IDLE_CONNS=4 AI_GATEWAY_DATABASE_MIN_IDLE_CONNS=4
AI_GATEWAY_MEDIA_MATERIALIZATION_CONCURRENCY=24 AI_GATEWAY_MEDIA_MATERIALIZATION_CONCURRENCY=24
AI_GATEWAY_MEDIA_REQUEST_CONCURRENCY=24 AI_GATEWAY_MEDIA_REQUEST_CONCURRENCY=24
@@ -53,7 +53,7 @@ spec:
- name: AI_GATEWAY_ASYNC_QUEUE_WORKER_ENABLED - name: AI_GATEWAY_ASYNC_QUEUE_WORKER_ENABLED
value: "false" value: "false"
- name: AI_GATEWAY_DATABASE_MAX_CONNS - name: AI_GATEWAY_DATABASE_MAX_CONNS
value: "48" value: "64"
- name: AI_GATEWAY_DATABASE_MIN_IDLE_CONNS - name: AI_GATEWAY_DATABASE_MIN_IDLE_CONNS
value: "4" value: "4"
- name: AI_GATEWAY_MEDIA_REQUEST_CONCURRENCY - name: AI_GATEWAY_MEDIA_REQUEST_CONCURRENCY
@@ -184,7 +184,7 @@ spec:
- name: AI_GATEWAY_ASYNC_QUEUE_WORKER_ENABLED - name: AI_GATEWAY_ASYNC_QUEUE_WORKER_ENABLED
value: "false" value: "false"
- name: AI_GATEWAY_DATABASE_MAX_CONNS - name: AI_GATEWAY_DATABASE_MAX_CONNS
value: "48" value: "64"
- name: AI_GATEWAY_DATABASE_MIN_IDLE_CONNS - name: AI_GATEWAY_DATABASE_MIN_IDLE_CONNS
value: "4" value: "4"
- name: AI_GATEWAY_MEDIA_REQUEST_CONCURRENCY - name: AI_GATEWAY_MEDIA_REQUEST_CONCURRENCY
+2 -1
View File
@@ -80,7 +80,8 @@ AI_GATEWAY_WORKER_REPLICAS_HONGKONG
| P28 | 28 | 36 | 28 | 56 | | P28 | 28 | 36 | 28 | 56 |
| P32 | 32 | 40 | 32 | 64 | | P32 | 32 | 40 | 32 | 64 |
API Pod 使用独立发布配置 `AI_GATEWAY_API_DATABASE_MAX_CONNS`,生产同构验收固定为 `48` API Pod 使用独立发布配置 `AI_GATEWAY_API_DATABASE_MAX_CONNS`,生产同构验收默认使用 `64`
也可通过 `AI_GATEWAY_ACCEPTANCE_API_DATABASE_MAX_CONNS` 覆盖本次验收值,无需修改 Go 代码。
所有 API/Worker Pool 的 `AI_GATEWAY_DATABASE_MIN_IDLE_CONNS` 固定为 `4`,仅预热必要连接, 所有 API/Worker Pool 的 `AI_GATEWAY_DATABASE_MIN_IDLE_CONNS` 固定为 `4`,仅预热必要连接,
其余连接按负载弹性创建,避免四个 Pod 在空闲时就占满 PostgreSQL 连接预算。各档表中的 其余连接按负载弹性创建,避免四个 Pod 在空闲时就占满 PostgreSQL 连接预算。各档表中的
数据库池仍表示单个 Worker 的最大连接数。 数据库池仍表示单个 Worker 的最大连接数。
+8 -2
View File
@@ -51,9 +51,15 @@ require_commands curl git jq node openssl sed
: "${AI_GATEWAY_ACCEPTANCE_USER_ID:?}" : "${AI_GATEWAY_ACCEPTANCE_USER_ID:?}"
: "${AI_GATEWAY_ACCEPTANCE_GEMINI_MODEL:=}" : "${AI_GATEWAY_ACCEPTANCE_GEMINI_MODEL:=}"
: "${AI_GATEWAY_ACCEPTANCE_VIDEO_MODEL:=}" : "${AI_GATEWAY_ACCEPTANCE_VIDEO_MODEL:=}"
: "${AI_GATEWAY_ACCEPTANCE_API_DATABASE_MAX_CONNS:=64}"
: "${AI_GATEWAY_ACCEPTANCE_GATEWAY_TLS_SERVER_NAME:=}" : "${AI_GATEWAY_ACCEPTANCE_GATEWAY_TLS_SERVER_NAME:=}"
: "${AI_GATEWAY_ACCEPTANCE_GATEWAYS:?}" : "${AI_GATEWAY_ACCEPTANCE_GATEWAYS:?}"
: "${AI_GATEWAY_ACCEPTANCE_REAL_IMAGE_URLS:?}" : "${AI_GATEWAY_ACCEPTANCE_REAL_IMAGE_URLS:?}"
[[ $AI_GATEWAY_ACCEPTANCE_API_DATABASE_MAX_CONNS =~ ^[1-9][0-9]*$ &&
$AI_GATEWAY_ACCEPTANCE_API_DATABASE_MAX_CONNS -le 256 ]] || {
echo 'AI_GATEWAY_ACCEPTANCE_API_DATABASE_MAX_CONNS must be between 1 and 256' >&2
exit 1
}
node "$cluster_root/scripts/release-manifest.mjs" validate "$release_manifest" >/dev/null node "$cluster_root/scripts/release-manifest.mjs" validate "$release_manifest" >/dev/null
release_sha=$(node "$cluster_root/scripts/release-manifest.mjs" get "$release_manifest" sourceSha) release_sha=$(node "$cluster_root/scripts/release-manifest.mjs" get "$release_manifest" sourceSha)
@@ -667,7 +673,7 @@ mark_run_failed() {
apply_capacity_profile() { apply_capacity_profile() {
local profile=$1 local profile=$1
local slots pool media global local slots pool media global
local api_pool=48 local api_pool=$AI_GATEWAY_ACCEPTANCE_API_DATABASE_MAX_CONNS
local min_idle=4 local min_idle=4
case $profile in case $profile in
P24) slots=24; pool=32; media=24; global=48 ;; P24) slots=24; pool=32; media=24; global=48 ;;
@@ -899,7 +905,7 @@ wait_for_memory_recovery() {
verify_runtime_gates() { verify_runtime_gates() {
local expected_slots expected_global expected_pool local expected_slots expected_global expected_pool
local expected_api_pool=48 local expected_api_pool=$AI_GATEWAY_ACCEPTANCE_API_DATABASE_MAX_CONNS
case $active_profile in case $active_profile in
P24) expected_slots=24; expected_pool=32; expected_global=48 ;; P24) expected_slots=24; expected_pool=32; expected_global=48 ;;
P28) expected_slots=28; expected_pool=36; expected_global=56 ;; P28) expected_slots=28; expected_pool=36; expected_global=56 ;;