跳至主要內容

1 篇文章 含有標籤「prisma」

檢視所有標籤

事件報告:Prisma DB 重連會阻塞事件迴圈並終止存活檢查

Yuneng Jiang
Senior SWE @ LiteLLM

日期: 2026 年 4 月 持續時間: 在修正推出前,客戶部署中發生多起事件 嚴重性: 高 — 在 Kubernetes 中表現為完整的 proxy 當機 狀態: 已解決

注意: 此修正自包含 PR #26225 的版本開始可用(於 2026 年 4 月 29 日合併)。

摘要

當上游 Postgres 資料庫無法連線時,LiteLLM proxy 的 Prisma 重連路徑會呼叫 await self.db.disconnect()。在 prisma-client-py 下,該呼叫會對 Rust query-engine 子程序執行一個同步subprocess.Popen.wait()。由於 wait() 不會讓出執行權,asyncio 事件迴圈會凍結,直到引擎關閉所需的時間為止——在生產環境中通常是 30–120 秒,因為引擎在對失去回應的資料庫進行 TCP close 操作時卡住。

在迴圈凍結期間,沒有任何 coroutine 會執行,包括 /health/liveliness。Kubernetes 的存活探針逾時,kubelet 便以 SIGKILL 終止該 pod。從操作人員的角度來看,proxy 彷彿已經死亡,儘管根本問題其實只是 reconnect 邏輯本應撐過去的暫時性 DB 中斷。

影響: 任何 Postgres 短暫變得無回應的客戶,都會看到 proxy pod 被終止並重新啟動,而不是在 DB 恢復後優雅降級並重新連線。此問題由 FLock 對外回報,並在內部重現。