跳到内容

LangGraph 平台架构

我们如何使用 Postgres

Postgres 是 LGP 中所有用户和运行数据的持久层。 这存储了检查点(更多信息请参见此处)以及服务器资源(线程、运行、助手和定时任务)。

我们如何使用 Redis

Redis 在每个 LGP 部署中用作服务器和队列工作进程通信的方式,并用于存储临时元数据,下面将详细介绍这两者。 Redis 中不存储用户/运行数据。

通信

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

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

临时元数据

LGP 部署中的运行可能会针对特定故障进行重试(目前仅针对运行期间遇到的瞬态 Postgres 错误)。 为了限制重试次数(目前限制为每次运行 3 次尝试),我们在拾取运行时将尝试次数记录在 Redis 字符串中。 这不包含除其 ID 之外的任何特定于运行的信息,并在短暂延迟后过期。

评论