维护与Kubernetes/多个吊舱的websocket连接(Tornado)

维护与Kubernetes/多个吊舱的websocket连接(Tornado),websocket,google-kubernetes-engine,tornado,Websocket,Google Kubernetes Engine,Tornado,将Tornado web服务器websockets实现与Kubernetes部署相结合(我使用的是GCP),我遇到了一些限制。我在我的Kubernetes引擎上运行一个自动定标器,随着服务器负载的增加,它会自动旋转新的吊舱——这通常发生在长时间运行的作业中(例如,训练ML模型) 问题是我的pod保留了它们自己的本地状态-这可能意味着客户端->pod 1之间可以存在用户连接,但是长时间运行的作业可能正在pod 2上处理并从那里发送更新。这些更新丢失,因为客户端和pod 2之间不存在连接 我使用的是

将Tornado web服务器websockets实现与Kubernetes部署相结合(我使用的是GCP),我遇到了一些限制。我在我的Kubernetes引擎上运行一个自动定标器,随着服务器负载的增加,它会自动旋转新的吊舱——这通常发生在长时间运行的作业中(例如,训练ML模型)

问题是我的pod保留了它们自己的本地状态-这可能意味着客户端->pod 1之间可以存在用户连接,但是长时间运行的作业可能正在pod 2上处理并从那里发送更新。这些更新丢失,因为客户端和pod 2之间不存在连接

我使用的是一个相对简单的WS实现,添加/删除用户连接如下:

class DefaultWebSocket(WebSocketHandler):
    user_connections = set()

def check_origin(self, origin):
    return True

def open(self):
    """
    Establish a websocket connection between client and server
    :param self: WebSocket object
    """
    DefaultWebSocket.user_connections.add(self)

def on_close(self):
    """
    Close websocket connection between client and server
    :param self: WebSocket object
    """
    DefaultWebSocket.user_connections.remove(self)

任何关于如何解决这个问题的想法/想法,无论是高层次的还是低层次的,都将不胜感激!我研究过k8scale.io和socket.io之类的东西,但更喜欢“本机”解决方案。

请参阅关于消息队列的内容。您好@xyres-您能详细介绍一下吗?消息队列用于进程间通信。如果POD2上有一个长时间运行的进程,当它完成时,它将把数据放入消息队列中。然后,消息队列将通知pod 1更新。谢谢@xyres-我设置了自己的消息队列请参阅关于消息队列的内容。您好@xyres-您能详细说明一下吗?消息队列用于进程间通信。如果POD2上有一个长时间运行的进程,当它完成时,它将把数据放入消息队列中。然后,消息队列将通知pod 1更新。谢谢@xyres-我设置了自己的消息队列