Skip to content

LangGraph 平台架构

我们如何使用 PostgreSQL

PostgreSQL 是 LGP 中所有用户和运行数据的持久化层。它既存储检查点(更多信息请参阅此处),也存储服务器资源(线程、运行实例、助手和定时任务)。

我们如何使用 Redis

在每个 LGP 部署中,Redis 被用作服务器和队列工作进程之间的通信方式,以及存储临时元数据,下面将详细介绍这两方面的内容。Redis 中不存储任何用户/运行数据。

通信

LGP 中的所有运行任务都由每个部署中的后台工作进程池执行。为了为这些运行任务启用某些功能(例如取消和输出流),我们需要一个通道来实现服务器和处理特定运行任务的工作进程之间的双向通信。我们使用 Redis 来组织这种通信。

  1. Redis 列表被用作一种机制,在新的运行任务创建后立即唤醒工作进程。此列表中仅存储一个哨兵值,不存储实际的运行任务信息。然后,工作进程从 Postgres 中检索运行任务信息。
  2. Redis 字符串和 Redis PubSub 通道的组合用于服务器向相应的工作进程传达运行任务取消请求。
  3. 工作进程使用 Redis PubSub 通道在处理运行任务时广播代理的流式输出。服务器中任何打开的 /stream 请求都会订阅该通道,并在事件到达时将其转发到响应中。任何时候 Redis 中都不会存储事件。

临时元数据

LGP 部署中的运行任务可能会因特定故障而重试(目前仅针对运行期间遇到的临时性 Postgres 错误)。为了限制重试次数(目前每个运行任务限制为 3 次尝试),我们在运行任务被获取时将尝试次数记录在 Redis 字符串中。除了运行任务的 ID 外,该字符串不包含任何特定于运行任务的信息,并且会在短时间延迟后过期。

Comments