是否可以移动持久的 TCP 连接?

网络工程 tcp 网络
2022-02-27 23:27:59

上下文:假设我有一个全球云服务。在每个数据中心,我都有许多到各种客户端设备的持久 TCP 连接。TCP 连接分布在数据中心的各个节点上。

问题:在这个理论场景中,假设每个节点有 N 个持久 TCP 连接(其中 N 是一个小数)。是否可以本质上将 TCP 连接“移动”到另一个节点,以便每个节点有更多的 TCP 连接,从而需要更少的节点?

为了提供更多的上下文,我不确定服务是否可以在不同的节点上重新建立 TCP 连接,这意味着它可以被移动。我的首要愿望是允许维持持久 TCP 连接的节点的水平可扩展性,以便我可以尽可能减少节点。

1个回答

是的,这是可能的,但需要操作系统的支持。您还必须确保受影响的 TCP 连接的数据包在连接迁移后被定向到正确的主机。

这个主题有点超出网络工程堆栈交换的范围。但是,我也没有在其他 SX 上找到任何其他高质量的帖子。

我建议您阅读有关Linux TCP 连接修复 (TCP_REPAIR)功能的信息,该功能旨在满足您的需求。

这方面的用例是有限的,所以不幸的是,没有很多公开可用的资源。对 github 的搜索也只获得了一些点击率TCP_REPAIR但是,有一些示例可以帮助您入门。

请注意,移动应用程序状态是您需要研究的另一个主题。例如,如果您的持久 TCP 连接包括 SSL,则可以保存和恢复 SSL 会话状态(并因此移动它),但实现起来并非易事。无论您的顶层应用程序是什么,这可能也是如此。

有时,自动缩放所节省的成本并不会被其复杂性所抵消。