龙卷风/旋风中的长轮询可扩展架构

问题描述

我想从一开始就使用Cyclone或Tornado在python中实现长轮询。客户端可能需要几个小时才能连接到该服务。我的概念:

客户端HTTP请求将由Nginx代理(用作负载平衡器)后面的多个龙卷风/气旋处理程序线程处理。将有多个请求数据队列:一个用于所有客户端的所有未处理请求的队列,其余队列包含先前由工作进程生成的,特定于每个已连接客户端的响应的队列。当请求被传送到龙卷风/旋风处理器线程时,请求数据将被发送到工人队列进行处理,然后由工人(连接到数据库等)进行处理。同时,龙卷风/旋风处理器线程将调查特定于客户端的队列,并将包含数据的响应发送回客户端(如果队列中有一些等待)。请看下图。

简单图:https://i.stack.imgur.com/9ZxcA.png

我正在考虑队列系统,因为某些请求可能在数据库上非常繁重,而某些请求可能会为其他客户端创建通知和消息。这是迈向可扩展服务器的一种方法吗?还是只是矫kill过正?

解决方法

经过一些研究,我决定使用连接到zeroMQ的龙卷风websocket。受此答案的启发:Scaling WebSockets with a Message Queue