LangGraph 数据平面¶
“数据平面”这一术语广泛用于指代 LangGraph 服务器(部署),每个服务器的相应基础设施,以及持续轮询 LangGraph 控制平面 以获取更新的“监听器”应用程序。
服务器基础设施¶
除了LangGraph Server本身之外,以下每个服务器的基础设施组件也包含在“数据平面”的广义定义中:
- Postgres
- Redis
- 密钥存储
- 自动伸缩器
"监听器" 应用程序¶
数据平面的 "监听器" 应用程序会定期调用 控制平面 API,以:
- 确定是否应创建新的部署。
- 确定是否应更新现有部署(即新版本)。
- 确定是否应删除现有部署。
换句话说,数据平面的 "监听器" 会读取控制平面的最新状态(期望状态),并采取行动使当前的部署状态(实际状态)与最新状态保持一致。
Postgres¶
Postgres 是 LangGraph Server 中所有用户、运行和长期记忆数据的持久化层。这存储了检查点(更多信息请参见 这里)、服务器资源(线程、运行、助手和定时任务),以及保存在长期记忆存储中的项目(更多信息请参见 这里)。
Redis¶
Redis 用于每个 LangGraph Server,作为服务器和队列工作线程之间通信的媒介,并用于存储临时元数据。Redis 中不会存储任何用户或运行数据。
通信¶
LangGraph Server 中的所有运行都由部署中的一部分后台工作线程池执行。为了启用这些运行的一些功能(如取消和输出流式传输),我们需要在服务器与处理特定运行的工作线程之间建立双向通信渠道。我们使用 Redis 来组织这种通信。
- 使用一个 Redis 列表作为机制,在新运行创建时立即唤醒一个工作线程。此列表中仅存储一个哨兵值,不包含实际的运行信息。运行信息随后由工作线程从 Postgres 中获取。
- 使用一个 Redis 字符串和 Redis PubSub 通道的组合,使服务器能够向适当的工作线程发送运行取消请求。
- 工作线程使用一个 Redis PubSub 通道来广播代理在处理运行时的流式输出。服务器中的任何开放的
/stream
请求将订阅该通道,并在事件到达时将其转发到响应中。任何时候都不会在 Redis 中存储任何事件。
临时元数据¶
LangGraph Server 中的运行可能因某些特定故障(目前仅限于运行期间遇到的短暂 Postgres 错误)而重试。为了限制重试次数(目前每个运行最多重试 3 次),当运行被选取时,我们在一个 Redis 字符串中记录尝试次数。这个字符串除了运行 ID 外不包含其他特定于运行的信息,并且会在短时间内过期。
数据平面功能¶
本节描述了数据平面的各种功能。
自动扩展¶
Production
类型 的部署会自动扩展到最多 10 个容器。扩展基于以下三个指标:
- CPU 使用率
- 内存使用率
- 挂起(进行中)运行 的数量
对于 CPU 使用率,自动扩展器的目标是 75% 的使用率。这意味着自动扩展器将根据需要增加或减少容器的数量,以确保 CPU 使用率保持在或接近 75%。对于内存使用率,自动扩展器的目标也是 75% 的使用率。
对于挂起运行的数量,自动扩展器的目标是 10 个挂起的运行。例如,如果当前容器数量为 1,但挂起的运行数为 20,自动扩展器将把部署扩展到 2 个容器(20 个挂起的运行 / 2 个容器 = 每个容器 10 个挂起的运行)。
每个指标是独立计算的,并且自动扩展器将根据导致最多容器数量的指标确定扩展动作。
在采取任何行动之前,缩小操作会延迟 30 分钟。换句话说,如果自动扩展器决定缩小一个部署,它将首先等待 30 分钟后再进行缩小。30 分钟后,重新计算指标,如果重新计算后的指标导致的容器数量比当前数量少,则部署会缩小。否则,部署将继续保持扩展状态。这个“冷却”期确保部署不会频繁地进行扩展和缩小。
静态 IP 地址¶
仅适用于 Cloud SaaS
静态 IP 地址仅适用于 Cloud SaaS 部署。
从 2025 年 1 月 6 日之后创建的所有部署的流量都将通过 NAT 网关。此 NAT 网关将根据数据区域拥有多个静态 IP 地址。请参考下表查看静态 IP 地址列表:
US | EU |
---|---|
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 实例。例如,对于 Deployment A
,可以将 POSTGRES_URI_CUSTOM
设置为 postgres://<user>:<password>@/<database_name_1>?host=<hostname_1>
,而对于 Deployment 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 实例。例如,对于 Deployment A
,可以将 REDIS_URI_CUSTOM
设置为 redis://<hostname_1>:<port>/1
,而对于 Deployment B
,可以将 REDIS_URI_CUSTOM
设置为 redis://<hostname_1>:<port>/2
。1
和 2
是同一实例中的不同数据库编号,但 <hostname_1>
是共享的。不同的部署不能使用相同的数据库编号。
LangSmith 跟踪¶
LangGraph Server 默认配置为将跟踪信息发送至 LangSmith。请参见下表了解每种部署选项的详细信息。
Cloud SaaS | Self-Hosted Data Plane | Self-Hosted Control Plane | Standalone Container |
---|---|---|---|
必需 跟踪至 LangSmith SaaS。 |
可选 禁用跟踪或跟踪至 LangSmith SaaS。 |
可选 禁用跟踪或跟踪至自托管 LangSmith。 |
可选 禁用跟踪、跟踪至 LangSmith SaaS 或跟踪至自托管 LangSmith。 |
监控¶
LangGraph Server 默认配置为报告用于计费目的的监控元数据。请参见下表了解每种部署选项的详细信息。
Cloud SaaS | Self-Hosted Data Plane | Self-Hosted Control Plane | Standalone Container |
---|---|---|---|
监控信息发送至 LangSmith SaaS。 | 监控信息发送至 LangSmith SaaS。 | 用于空气隔离许可证密钥的自报告使用情况(审计)。 用于 LangGraph 平台许可证密钥的监控信息发送至 LangSmith SaaS。 |
用于空气隔离许可证密钥的自报告使用情况(审计)。 用于 LangGraph 平台许可证密钥的监控信息发送至 LangSmith SaaS。 |
许可证¶
LangGraph Server 默认配置为执行许可证密钥验证。请参见下表了解每种部署选项的详细信息。
Cloud SaaS | Self-Hosted Data Plane | Self-Hosted Control Plane | Standalone Container |
---|---|---|---|
对 LangSmith SaaS 验证 LangSmith API 密钥。 | 对 LangSmith SaaS 验证 LangSmith API 密钥。 | 对 LangSmith SaaS 验证空气隔离许可证密钥或 LangGraph 平台许可证密钥。 | 对 LangSmith SaaS 验证空气隔离许可证密钥或 LangGraph 平台许可证密钥。 |