Commit Graph
10 Commits
Author SHA1 Message Date
wangbo bc44af751e fix(worker): 为容量扩展预留数据库连接
原因:单实例执行容量提升到 24 后,Worker 的 24 条数据库连接会被执行任务全部占用,导致心跳、选主、健康检查和并发租约续期超时。

影响:生产 Worker 连接池提高到 32,在 24 个执行槽之外保留 8 条控制连接;PostgreSQL max_connections=200,两实例与 API 的理论连接总量仍在安全范围内。

验证:kubectl kustomize deploy/kubernetes/production、git diff --check 通过;线上两地 Worker 按 32 条连接滚动后连续 3 分钟 Ready、0 重启、0 数据库控制错误、0 租约丢失。
2026-07-30 16:17:16 +08:00
wangbo 3aa78d3e5c perf(worker): 按实例内存上限扩展异步容量
将策略推导出的集群目标与单 Worker 内存安全上限分离,避免失活实例的全部容量转移到单个 2 GiB Pod。

生产环境单实例上限和媒体物化并发设为 24;两实例正常时总容量由 16 提升至 48,后续可通过增加 Worker 节点继续扩展。新增 0093 迁移保存实例容量上限,并兼容滚动发布中的旧实例。

风险:更高媒体并发会增加 Worker 和节点内存压力,保留单实例 24 的硬边界并由持续监控观察 RSS、OOM、队列与节点余量。

验证:go test ./... -count=1;go vet ./...;真实 PostgreSQL 分配与故障转移测试;迁移安全检查;kubectl kustomize;gofmt -l;git diff --check。
2026-07-30 15:08:54 +08:00
wangbo ea58d21d03 perf(queue): 限制大媒体任务内存并消除准入惊群
将同步与异步非文本任务的准入唤醒改为按任务和全局队首推进,批量续租等待者,避免大量请求同时争抢 advisory lock 和数据库连接。

对 Base64 请求解析、素材解码、上游媒体执行和结果物化增加分层并发限制,复用请求素材并释放重复 Gemini wire 数据;生产 API 默认入口解析并发 16,媒体物化并发 8。

新增 1000 个同步 Gemini 图像编辑请求的模拟上游压力验收,10 MiB 输入和输出下全部成功,Heap 峰值增长约 2.58 GiB,并验证共享上传哈希、单次 attempt 与本地零落盘。

验证:go test ./... -count=1;go vet ./...;gofmt -l 无输出;kubectl kustomize deploy/kubernetes/production;10 MiB Gemini Base64 千任务压力测试通过。
2026-07-30 13:13:32 +08:00
wangbo 012823adff fix(cluster): 保护 API 持久队列恢复启动阶段
API 角色启动时同样会恢复持久队列状态,积压较多时可能超过 liveness 初始窗口并被误杀。为两地 API 增加最长 10 分钟 startupProbe,旧 Pod 在新 Pod Ready 前继续服务。\n\n验证:kubectl kustomize、服务端 dry-run、生产滚动更新。
2026-07-29 19:18:42 +08:00
wangbo 8ce1f857a4 fix(cluster): 延长 Worker 启动探针保护期
Worker 在切换后恢复积压 River 任务时可能超过原 liveness 初始窗口,导致健康端口尚未监听就被误杀。增加最长 10 分钟 startupProbe,启动完成后仍沿用原 readiness 和 liveness。\n\n验证:kubectl kustomize、服务端 dry-run、生产滚动更新。
2026-07-29 17:49:13 +08:00
wangbo 9e4fc7362d feat(queue): 增加非文本模型分布式准入队列
使用 PostgreSQL 统一同步与异步非文本任务的并发准入、持久化等待和 Worker 容量分配,并将生产 API 与独立 Worker 角色拆分。

补充策略管理、共享契约、OpenAPI、Kubernetes 双节点 Worker 清单及跨节点验收脚本;未默认启用任何生产 queue_size 策略。

已在原基线完成 Go、前端、迁移、Shell、Kustomize 与长任务容量验收;合入最新主干后将重新执行发布门禁。
2026-07-29 16:15:43 +08:00
wangbo 6897fb3b66 fix(deploy): 使用站点专属 NodePort
HostPort 被命名空间 PodSecurity baseline 拒绝,因此恢复无特权 Pod 配置,并为宁波、香港的 API/Web 增加只选择本站 Pod 的专属 NodePort Service。双 NGINX 和验收脚本按站点使用 31088/31089 与 31178/31179,避免主机本地访问共享 NodePort 时随机命中不可达的跨站 Pod。\n\n验证:kubectl kustomize、服务端 dry-run、bash -n、ShellCheck、无 hostPort/hostIP、git diff --check。
2026-07-29 02:40:57 +08:00
wangbo 006609569d fix(deploy): 稳定边缘到站点的固定入口
主机本地访问跨站点 NodePort 时 kube-proxy 会随机选择不可达的对端 Pod,导致约四分之一请求被拒绝。为两地应用绑定仅位于 WireGuard 地址的 HostPort 31088/31178,双 NGINX 和集群验收改用该固定入口;原 NodePort 30088/30178 继续保留。端口处于现有公网 DROP、wg0 私网放行范围。\n\n验证:kubectl kustomize、服务端 dry-run、bash -n、ShellCheck、Secret 与 digest 静态检查、git diff --check。
2026-07-29 02:36:29 +08:00
wangbo 8e387ca553 fix(deploy): 固定 API 容器运行身份
API 镜像使用名称用户 appuser,Kubelet 无法仅凭 runAsNonRoot 验证其非 root 身份,导致 CreateContainerConfigError。按照 Dockerfile 中固定 UID 10001 显式设置 runAsUser、runAsGroup 和 fsGroup,确保 EmptyDir 可写且满足 Pod 安全约束。\n\n验证:kubectl kustomize 渲染成功,两个 API Deployment 均包含 UID/GID 10001,git diff --check 通过。
2026-07-29 02:28:19 +08:00
wangbo 971540a2a4 feat(deploy): 增加三节点 K3s 高可用迁移能力
新增 WireGuard 全互联、三 server embedded-etcd K3s、CloudNativePG 双实例、Barman OSS 备份、双 NGINX、Kubernetes Secret/RBAC 与本地旧文件按严格 24 小时清理。

新增维护窗口数据迁移、digest 固定滚动发布、应用回滚、跨节点文件 E2E、节点和数据库故障演练、CNPG 恢复与 etcd 快照验收脚本;洛杉矶仅作为带 NoSchedule 污点的仲裁节点。

所有生产 Secret 只在执行时从 0600 本地环境和旧生产容器导入,仓库不保存凭据;公网入口保持人工 DNS 故障切换边界。

验证:bash -n、ShellCheck、kubectl kustomize、Node 语法检查、Secret 扫描、OSS put/head/delete 实测。
2026-07-28 04:37:31 +08:00