LangGraph数据平面¶
“数据平面”一词广义上指的是LangGraph服务器(部署)、每个服务器的相应基础设施,以及持续轮询LangGraph控制平面更新的“监听器”应用程序。
服务器基础设施¶
除了LangGraph服务器本身之外,每个服务器的以下基础设施也包含在“数据平面”的广义定义中
- Postgres
- Redis
- 密钥存储
- 自动扩缩器
“监听器”应用程序¶
数据平面“监听器”应用程序会定期调用控制平面API以
- 确定是否应创建新的部署。
- 确定是否应更新现有部署(即新版本)。
- 确定是否应删除现有部署。
换句话说,数据平面“监听器”读取控制平面的最新状态(期望状态),并采取行动协调未完成的部署(当前状态),使其与最新状态匹配。
Postgres¶
Postgres是LangGraph服务器中所有用户、运行和长期内存数据的持久化层。它存储检查点(在此处查看更多信息here)、服务器资源(线程、运行、助手和cron作业),以及长期内存存储中保存的项目(在此处查看更多信息here)。
Redis¶
每个LangGraph服务器都使用Redis作为服务器和队列工作器之间通信的方式,并存储临时元数据。Redis中不存储任何用户或运行数据。
通信¶
LangGraph服务器中的所有运行都由每个部署中的一组后台工作器执行。为了为这些运行启用某些功能(如取消和输出流式传输),我们需要一个服务器和处理特定运行的工作器之间进行双向通信的通道。我们使用Redis来组织这种通信。
- Redis列表用作在新运行创建后立即唤醒工作器的机制。此列表中只存储一个哨兵值,没有实际的运行信息。运行信息随后由工作器从Postgres中检索。
- Redis字符串和Redis PubSub通道的组合用于服务器向相应的工作器传达运行取消请求。
- 工作器使用Redis PubSub通道广播代理在处理运行时的流式输出。服务器中任何打开的
/stream
请求都将订阅该通道,并在事件到达时将其转发到响应。任何时候都不会在Redis中存储事件。
临时元数据¶
LangGraph服务器中的运行可能会因特定故障(目前仅限于运行期间遇到的临时Postgres错误)而重试。为了限制重试次数(目前每次运行限制为3次尝试),我们在运行被选取时将尝试次数记录在Redis字符串中。此字符串除了运行ID外不包含任何运行特定信息,并在短时间延迟后过期。
数据平面功能¶
本节描述了数据平面的各种功能。
自动扩缩容¶
生产
类型部署自动扩展到最多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。 | 气隙许可密钥的自报使用情况(审计)。 LangGraph平台许可密钥的遥测数据发送到LangSmith SaaS。 |
气隙许可密钥的自报使用情况(审计)。 LangGraph平台许可密钥的遥测数据发送到LangSmith SaaS。 |
许可¶
LangGraph服务器已自动配置为执行许可密钥验证。有关每个部署选项的详细信息,请参见下表。
云SaaS | 自托管数据平面 | 自托管控制平面 | 独立容器 |
---|---|---|---|
LangSmith API密钥针对LangSmith SaaS进行验证。 | LangSmith API密钥针对LangSmith SaaS进行验证。 | 气隙许可密钥或LangGraph平台许可密钥针对LangSmith SaaS进行验证。 | 气隙许可密钥或LangGraph平台许可密钥针对LangSmith SaaS进行验证。 |