Google Cloud 中的负载平衡 websocket 连接

Posted

技术标签:

【中文标题】Google Cloud 中的负载平衡 websocket 连接【英文标题】:Load balancing websocket connections in the Google Cloud 【发布时间】:2015-12-04 14:29:29 【问题描述】:

我遇到了一个使用 Google 技术无法完全解决的问题。

我需要通过 SSL 提供 >500 个并行 websocket 连接。理想情况下,客户端连接到 wss://wss.mydomain.com 并由实例提供服务。

选项 1:我目前使用自定义运行时托管 VM 来部署运行启用 SSL 的 websocket 服务器的 Dockerfile。 部署托管 VM 实例会生成一个 GCE 实例。 我使用 Google Cloud DNS 将 wss.mydomain.com 指向 GCE 实例的这一 IP 地址。

问题:我无法连接到 wss.mydomain.com(甚至连 my-mvm.appspot.com),因为 websocket 连接(通过 SSL)没有被转发到托管 VM实例。提出了issue,但没有看到任何对我有帮助的回复。其他人也得出了这个结论here 和here。

如果托管虚拟机不是解决方案,我在 Google Cloud 架构中的哪里可以找到它?

选项 2:由于 managedVM 似乎是 GCE 的糖衣,也许我可以保留已经提供 GCE 实例的当前设置并自己添加负载平衡?

选项 2a:HTTP(S) 负载平衡不允许 websocket 流量,所以一个是out。

选项 2b:网络负载平衡可以工作。我需要将实例分配给目标池才能正常工作。是否可以将新创建​​的托管 VM 实例自动分配给目标池,以便它们加入负载平衡?如果是这样,这是否是问题的完整解决方案?

选项 3:我想继续使用我的 Dockerfile 进行设置。所以我在看容器引擎。我在这里完全没有经验。

在我涉足另一个雷区之前,哪个选项最有可能解决我的问题?也许还有另一个我没有想到的选择。

【问题讨论】:

【参考方案1】:

选项 2b 也将退出,因为托管 VM 流量仍在通过 appspot.com 前端,该前端不会将 websocket 流量转发到实例(如链接的其他问题中所述)。

如果您想让它立即运行,我建议您从使用带有autoscaling 和网络负载平衡的 GCE 实例开始。如果您希望获得与托管虚拟机相同级别的可扩展性,那么您需要开始阅读 Container Engine 并部署您的应用 Dockerized。

【讨论】:

以上是关于Google Cloud 中的负载平衡 websocket 连接的主要内容,如果未能解决你的问题,请参考以下文章

如果来自特定区域,则 Google Cloud 负载平衡器重定向

内部 TCP 负载平衡器上的目标端口 - Google Cloud

创建全局 HTTPS Google Cloud 负载均衡器时,位置有啥影响?

具有外部 IP 的 Google Container Engine,没有负载平衡器

Spring Cloud之客户端负载平衡器:Ribbon

配置 Google Cloud Load Balancer 路径规则