可扩展性与弹性¶
LangGraph Platform 设计为可随工作负载水平扩展。服务的每个实例都是无状态的,不在内存中保留任何资源。该服务设计为能够优雅地处理新实例的添加或删除,包括硬关闭情况。
服务器可扩展性¶
当你向服务添加更多实例时,只要在它们前面放置适当的负载均衡机制,它们就会共享 HTTP 负载。在大多数部署模式下,我们会自动为服务配置负载均衡器。在"无控制平面的自托管"模式下,你需要自己添加负载均衡器。由于实例是无状态的,任何负载均衡策略都可以工作,不需要也不推荐会话粘性。任何服务器实例都可以与任何队列实例通信(通过 Redis PubSub),这意味着取消或流式传输进行中运行的请求可以由任意实例处理。
队列可扩展性¶
当你向服务添加更多实例时,它们会线性增加运行吞吐量,因为每个实例被配置为处理一定数量的并发运行(默认为 10 个)。每次运行的每次尝试都由单个实例处理,通过 Postgres 的 MVCC 模型强制执行恰好一次语义(有关崩溃恢复详细信息,请参阅下面的部分)。由于瞬时数据库错误而失败的尝试最多重试 3 次。我们不使用长期事务或锁,这使我们能够更有效地使用 Postgres 资源。
弹性¶
当队列实例正在处理运行时,该队列工作者会在 Redis 中记录定期心跳时间戳。
当收到优雅关闭请求(SIGINT)时,实例进入关闭模式,这将:
- 停止接受新的 HTTP 请求
- 给正在进行的运行有限的秒数来完成(如果未完成,将被放回队列)
- 停止实例从队列中获取更多运行
如果由于服务器崩溃或基础设施故障而发生硬关闭,任何正在进行的运行都将被内部清理任务拾取,该任务查找已超过心跳窗口的进行中运行。清理器每 2 分钟运行一次,并将运行放回队列供另一个实例拾取。
Postgres 弹性¶
对于我们管理 Postgres 数据库的部署模式,我们有定期备份和持续复制的备用副本以进行自动故障转移。此 Postgres 配置仅在 Cloud SaaS 部署选项中为Production 部署类型提供。
所有与 Postgres 的通信都为可重试错误实现重试。如果 Postgres 暂时不可用,例如在数据库重启期间,大多数/所有流量应继续成功。Postgres 长时间故障将使 LangGraph Server 不可用。
Redis 弹性¶
所有需要持久存储的数据都存储在 Postgres 中,而不是 Redis 中。Redis 仅用于临时元数据和实例之间的通信。因此,我们对 Redis 没有持久性要求。
所有与 Redis 的通信都为可重试错误实现重试。如果 Redis 暂时不可用,例如在数据库重启期间,大多数/所有流量应继续成功。Redis 长时间故障将使 LangGraph Server 不可用。