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:
@@ -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
|
||||||
|
|||||||
@@ -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 的最大连接数。
|
||||||
|
|||||||
@@ -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 ;;
|
||||||
|
|||||||
Reference in New Issue
Block a user