2作者: sankalpnarula4 个月前原帖
嘿,HN。 我是一名在滑铁卢大学学习的工程学生,正在构建有状态的人工智能代理,但我一直遇到同样的问题:每当我的 Python 脚本崩溃或断开连接时,底层的 Puppeteer 或 Ollama 进程就会孤立无援地存在,占用内存,直到节点因内存不足被杀掉。标准的负载均衡器会破坏粘性会话,而被动的 HTTP 超时又太慢,无法及时清理。 我找不到一个能够可靠清理死掉的有状态会话的本地进程池,所以我用 Go 构建了 Herd。 它使用持久化的流(gRPC/Unix 套接字)作为一个死人的开关。如果你的客户端脚本崩溃,流就会中断。Herd 会注册 EOF,并立即向工作进程发送 SIGKILL(在 Linux 上依赖 Pdeathsig)。对于实际的大量数据,你只需通过 Herd 的内部代理发送 HTTP 流量,代理会将其直接路由到活动进程的端口。 我真正的目标是将其转变为一个多节点的分布式网格,配备 Redis 注册表,客户端可以掉线,边缘网关将其路由回持有其有状态内存的确切 pod。 但我知道在一个有漏洞的本地引擎上构建分布式网格是自杀行为。单节点的清理必须首先做到完美。 我希望你们能对这个架构进行批评。具体来说:依赖 Pdeathsig 作为本地死人的开关在生产环境中是否足够稳健,还是我太天真了,需要咬紧牙关,把一切都包裹在 cgroups 和微虚拟机中? 代码库链接:[https://github.com/herd-core/herd](https://github.com/herd-core/herd)