Kueue 管理 AI 批任务:配额借用、准入与抢占边界
训练与批量推理不应靠创建大量 Pending Pod 抢 GPU。本文用 Kueue 的 LocalQueue、ClusterQueue 和 ResourceFlavor 建立租户准入、配额借用、抢占与回滚流程。
Articles
沉淀 AI、Web、云原生和独立开发经验。
训练与批量推理不应靠创建大量 Pending Pod 抢 GPU。本文用 Kueue 的 LocalQueue、ClusterQueue 和 ResourceFlavor 建立租户准入、配额借用、抢占与回滚流程。
一个列表查 1 次 + N 个关联各查 1 次 = N+1 次查询,慢十倍。本文讲清 N+1 是怎么产生的(ORM 懒加载陷阱)、怎么发现(日志/ORM 的 explain)、怎么修(eager loading/include/join),以及从根本防住(ORM 默认 eager + 查询审查)。
KV Cache 不是先到先得的剩余显存。本文从请求级显存估算、租户预算、块式分配、抢占代价和前缀隔离设计可测量的准入与淘汰控制面。
Suspense 让"组件等数据"变得声明式——不用手动管理 loading 状态,Suspense 边界自动展示 fallback。本文讲清 Suspense 的工作原理、和 React Query/TanStack Query 的配合、流式 SSR(Server Components + Suspense),以及 Suspense 的边界在哪(不是所有异步都该包 Suspense)。
表能 time travel 不代表旧快照永远可恢复。本文将 reader 引用、快照过期、孤儿文件清理与法律保留绑定到同一代际,并用冷恢复证明元数据和数据文件没有被提前回收。
有些逻辑放数据库(触发器/函数)比放应用层高效——自动审计、级联更新、数据校验。但滥用触发器会让逻辑隐式、难调试。本文讲清 PG 触发器/函数的写法、适合的场景、不适合的场景,以及"触发器是双刃剑"的克制原则。
上下文能装进窗口不代表消息序列合法。本文把 role、tool call/result、序列化请求和流式 block 固定为一次 dispatch manifest,阻止半截工具参数或旧流进入下一轮。
服务端推送需求一来,就纠结 SSE 还是 WebSocket?本文讲清两者的本质区别(SSE 单向/HTTP/简单,WebSocket 双向/独立协议/灵活)、各自适合的场景、代理/防火墙兼容性、连接数限制,给一份"什么场景选哪个"的明确结论。
超窗后临时截断会把成本问题变成错误回答。本文把上下文装配改成服务端准入协议,用分桶预留、确定性降级梯和结算指标控制每次调用。
发邮件/生成报表/处理上传——这些慢操作放请求里会超时,放后台队列异步处理。本文讲清后台队列的核心(入队/worker/重试/监控)、选型(BullMQ/Sidekiq/Celery)、延迟与定时任务、幂等,以及"什么活该异步"的判断。
生产 LLM 网关不能只做轮询。本文给出能力约束、数据边界、延迟预算、成本上限、健康状态与降级顺序共同驱动的可审计路由策略。
读多写少?加读副本把读分摊到多个库,主库只管写。本文讲清读副本的架构(主从复制)、读写分离的实现(应用层路由/代理层)、复制延迟的一致性陷阱、以及什么时候该上读副本(读量是瓶颈时)什么时候不该。