LangGraph 数据平面¶
"数据平面"一词被广泛用于指代LangGraph 服务器(部署)、每个服务器的相应基础设施,以及持续轮询LangGraph 控制平面更新的“监听器”应用程序。
服务器基础设施¶
除了LangGraph 服务器本身,每个服务器的以下基础设施组件也包含在“数据平面”的广义定义中:
- Postgres
- Redis
- 密钥存储
- 自动扩缩器
"监听器"应用程序¶
数据平面“监听器”应用程序会定期调用控制平面API以:
- 确定是否应创建新的部署。
- 确定是否应更新现有部署(即新的修订版)。
- 确定是否应删除现有部署。
换句话说,数据平面“监听器”读取控制平面的最新状态(期望状态),并采取行动协调未完成的部署(当前状态)以匹配最新状态。
Postgres¶
Postgres 是 LangGraph 服务器中所有用户、运行和长期内存数据的持久化层。它存储检查点(更多信息请参阅此处)、服务器资源(线程、运行、助手和定时任务),以及长期内存存储中保存的项目(更多信息请参阅此处)。
Redis¶
Redis 在每个 LangGraph 服务器中用作服务器和队列工作者之间通信以及存储临时元数据的方式。Redis 中不存储任何用户或运行数据。
通信¶
LangGraph 服务器中的所有运行都由作为每个部署一部分的后台工作者池执行。为了使这些运行能够实现某些功能(例如取消和输出流),我们需要服务器与处理特定运行的工作者之间建立双向通信通道。我们使用 Redis 来组织这种通信。
- Redis 列表用作新运行创建后立即唤醒工作者的机制。此列表中只存储一个哨兵值,没有实际运行信息。运行信息随后由工作者从 Postgres 中检索。
- Redis 字符串和 Redis PubSub 通道的组合用于服务器向适当的工作者传达运行取消请求。
- Redis PubSub 通道由工作者用于在运行处理期间广播来自代理的流式输出。服务器中任何打开的
/stream
请求都将订阅该通道,并在事件到达时将其转发到响应。Redis 中在任何时候都不会存储事件。
临时元数据¶
LangGraph 服务器中的运行可能会因特定故障(目前仅限于运行期间遇到的瞬时 Postgres 错误)而重试。为了限制重试次数(目前限制为每次运行 3 次尝试),我们在运行被拾取时将尝试次数记录在 Redis 字符串中。此字符串除了运行 ID 外不包含任何特定于运行的信息,并会在短时间延迟后过期。
数据平面功能¶
本节描述数据平面的各种功能。
数据区域¶
仅适用于云 SaaS
数据区域仅适用于云 SaaS 部署。
部署可以在两个数据区域创建:美国和欧盟
部署的数据区域由创建部署的 LangSmith 组织的数据区域隐含。部署及其底层数据库不能在数据区域之间迁移。
自动扩缩¶
Production
类型的部署会自动扩缩到最多 10 个容器。扩缩基于 3 个指标:
- CPU 利用率
- 内存利用率
- 待处理(进行中)的运行数量
对于 CPU 利用率,自动扩缩器目标是 75% 的利用率。这意味着自动扩缩器将根据需要向上或向下扩缩容器数量,以确保 CPU 利用率达到或接近 75%。对于内存利用率,自动扩缩器目标也是 75% 的利用率。
对于待处理运行的数量,自动扩缩器目标是 10 个待处理运行。例如,如果当前容器数量为 1,但待处理运行数量为 20,自动扩缩器会将部署扩缩到 2 个容器(20 个待处理运行 / 2 个容器 = 每个容器 10 个待处理运行)。
每个指标独立计算,自动扩缩器将根据产生最大容器数量的指标确定扩缩操作。
缩容操作会延迟 30 分钟才会执行。换句话说,如果自动扩缩器决定缩容部署,它会首先等待 30 分钟再进行缩容。30 分钟后,指标会重新计算,如果重新计算的指标导致容器数量低于当前数量,部署就会缩容。否则,部署保持扩容状态。这种“冷却期”确保部署不会过于频繁地进行扩缩。
静态IP地址¶
仅适用于云 SaaS
静态 IP 地址仅适用于云 SaaS 部署。
自 2025 年 1 月 6 日起创建的部署的所有流量将通过 NAT 网关。该 NAT 网关将拥有多个静态 IP 地址,具体取决于数据区域。请参阅下表获取静态 IP 地址列表:
美国 | 欧盟 |
---|---|
35.197.29.146 | 34.13.192.67 |
34.145.102.123 | 34.147.105.64 |
34.169.45.153 | 34.90.22.166 |
34.82.222.17 | 34.147.36.213 |
35.227.171.135 | 34.32.137.113 |
34.169.88.30 | 34.91.238.184 |
34.19.93.202 | 35.204.101.241 |
34.19.34.50 | 35.204.48.32 |
自定义Postgres¶
可以使用自定义 Postgres 实例,而不是控制平面自动创建的实例。指定POSTGRES_URI_CUSTOM
环境变量以使用自定义 Postgres 实例。
多个部署可以共享同一个 Postgres 实例。例如,对于部署 A
,POSTGRES_URI_CUSTOM
可以设置为postgres://<user>:<password>@/<database_name_1>?host=<hostname_1>
;对于部署 B
,POSTGRES_URI_CUSTOM
可以设置为postgres://<user>:<password>@/<database_name_2>?host=<hostname_1>
。<database_name_1>
和database_name_2
是同一实例中的不同数据库,但<hostname_1>
是共享的。同一数据库不能用于不同的部署。
自定义Redis¶
可以使用自定义 Redis 实例,而不是控制平面自动创建的实例。指定REDIS_URI_CUSTOM环境变量以使用自定义 Redis 实例。
多个部署可以共享同一个 Redis 实例。例如,对于部署 A
,REDIS_URI_CUSTOM
可以设置为redis://<hostname_1>:<port>/1
;对于部署 B
,REDIS_URI_CUSTOM
可以设置为redis://<hostname_1>:<port>/2
。1
和2
是同一实例中的不同数据库编号,但<hostname_1>
是共享的。同一数据库编号不能用于不同的部署。
LangSmith 跟踪¶
LangGraph 服务器会自动配置为将跟踪发送到 LangSmith。有关每个部署选项的详细信息,请参阅下表。
云SaaS | 自托管数据平面 | 自托管控制平面 | 独立容器 |
---|---|---|---|
必填 追踪到 LangSmith SaaS。 |
可选 禁用跟踪或追踪到 LangSmith SaaS。 |
可选 禁用跟踪或追踪到自托管 LangSmith。 |
可选 禁用跟踪、追踪到 LangSmith SaaS 或追踪到自托管 LangSmith。 |
遥测¶
LangGraph 服务器自动配置为报告用于计费的遥测元数据。有关每个部署选项的详细信息,请参阅下表。
云SaaS | 自托管数据平面 | 自托管控制平面 | 独立容器 |
---|---|---|---|
遥测数据发送至 LangSmith SaaS。 | 遥测数据发送至 LangSmith SaaS。 | 用于隔离许可密钥的自报告使用情况(审计)。 遥测数据发送至 LangSmith SaaS,用于 LangGraph 平台许可密钥。 |
用于隔离许可密钥的自报告使用情况(审计)。 遥测数据发送至 LangSmith SaaS,用于 LangGraph 平台许可密钥。 |
许可¶
LangGraph 服务器自动配置为执行许可密钥验证。有关每个部署选项的详细信息,请参阅下表。
云SaaS | 自托管数据平面 | 自托管控制平面 | 独立容器 |
---|---|---|---|
LangSmith API 密钥已通过 LangSmith SaaS 验证。 | LangSmith API 密钥已通过 LangSmith SaaS 验证。 | 隔离许可密钥或 LangGraph 平台许可密钥已通过 LangSmith SaaS 验证。 | 隔离许可密钥或 LangGraph 平台许可密钥已通过 LangSmith SaaS 验证。 |