我想从一开始就使用cyclone或tornado在python中实现关于服务可伸缩性的长轮询。客户端可能会连接数小时到此服务。我的想法:
客户端HTTP请求将由NGINX代理(充当负载平衡器)后面的多个tornado/cyclone处理程序线程处理。将有多个用于请求的数据队列:一个用于所有客户端的所有未处理请求,其余的队列包含特定于每个已连接客户端的响应,这些响应以前由工作进程生成。当请求被传递到tornado/cyclone处理程序线程时,请求数据将被发送到工作队列进行处理,然后由工作队列进行处理(工作队列连接到数据库等)。同时,tornado/cyclone处理程序线程将查看特定于客户端的队列,并将带有数据的响应发送回客户端(若队列中有等待)。请看图表
简单图:https://i.stack.imgur.com/9ZxcA.png
我之所以考虑使用队列系统,是因为有些请求可能会占用大量数据库,有些请求可能会为其他客户端创建通知和消息。这是迈向可伸缩服务器的一种方式,还是仅仅是过火了
在做了一些研究之后,我决定使用连接到zeroMQ的tornado WebSocket。受到这个答案的启发:Scaling WebSockets with a Message Queue
相关问题 更多 >
编程相关推荐