Google cloud platform 如何在谷歌云中为websocket创建健康检查?

Google cloud platform 如何在谷歌云中为websocket创建健康检查?,google-cloud-platform,websocket,google-compute-engine,Google Cloud Platform,Websocket,Google Compute Engine,我正在尝试在GCP中为我在WebSocket上的应用程序设置一个负载平衡器。创建运行状况检查以确定哪些实例已启动并正在工作时,我可以为HTTP运行状况检查修改的唯一标题是主机。因此,我无法添加建立连接所需的升级头和其他与websocket相关的头(如中) 默认情况下支持WebSocket的文档,但未提及应如何定义健康检查规则。将GCP负载平衡器与WebSocket一起使用的最佳实践是什么?在我这方面是否有办法解决这个问题,例如定义一个自动升级到websocket的端点或任何其他方法?负载平衡器可

我正在尝试在GCP中为我在WebSocket上的应用程序设置一个负载平衡器。创建运行状况检查以确定哪些实例已启动并正在工作时,我可以为
HTTP
运行状况检查修改的唯一标题是主机。因此,我无法添加建立连接所需的
升级
头和其他与websocket相关的头(如中)


默认情况下支持WebSocket的文档,但未提及应如何定义健康检查规则。将GCP负载平衡器与WebSocket一起使用的最佳实践是什么?在我这方面是否有办法解决这个问题,例如定义一个自动升级到websocket的端点或任何其他方法?

负载平衡器可以接受websocket流量并将其转发到正确的服务/后端。然而,根据我的经验,负载平衡器不能在websocket上执行运行状况检查

健康检查的含义是一个简单的HTTP端点,它回答“Ok,一切正常”或“Arg,我有问题,如果继续,请重新启动(或替换)我”。在websocket中这样做(意味着连续通信/流媒体)是“奇怪的”

如果您查看,成功标准是200中的一个答案(如果需要,您可以选择添加内容验证)。当您请求websocket端点时,HTTP回答是
101交换协议
,它不是200,因此从负载平衡器的角度来看是无效的


在服务上添加一个标准端点,用于在应用程序中执行运行状况检查并回答正确的HTTP代码。

您可以在此处查看文档:您的应用程序中是否只有websocket端点?可以在另一个端点上执行健康检查吗?@guillaumeblaquiere我有http端点,但我的nginx(http为
wsgi
worker,websocket为
asgi
)将其路由到两个不同的服务,因此检查http的健康状况并不意味着websocket也健康(如果我理解正确,您有loadbalancer->nginx(在虚拟机上)=>2个不同的服务(在同一虚拟机上)。是吗?@guillaumeblaquiere是的,但我不打算将其保留在生产中,所以我不应该这样描述它,对不起。因为我的http服务不需要负载平衡(它仅由管理员使用),而负载平衡将在链接到负载平衡器的实例组之外的另一个VM上提供。因此,可以肯定地说,我只有wesocket需要创建健康检查:LB->nginx->wobsocket服务(它是
daphne
)谢谢您的描述,我知道我可以使用虚拟端点进行检查(这就是我目前正在做的事情)。我的问题是,是否有办法解决GCP健康检查中出现的这一问题(例如,如果与websocket建立了n秒的连接,或者使用TCP健康检查而不是HTTP或其他任何东西,则返回200)它不是真正的虚拟端点,因为它必须共享应用程序是否健康(足够的内存/空间,CPU低于X%,数据库连接已启动并准备就绪,…)。对于TCP运行状况检查,您可以尝试使用它,但它实际上取决于Web服务器的行为。如果您尚未实现它,则可能很难使用可靠的探测。