我想在python中使用cyclone或tornado实现长轮询,从一开始就考虑到服务的可伸缩性。客户端可能会连接到此服务数小时。我的概念是:
客户端HTTP请求将由NGINX代理(充当负载均衡器)后面的多个tornado/cyclone处理程序线程处理。将有多个用于请求的数据队列:一个用于来自所有客户端的所有未处理请求,其余的队列包含特定于每个连接的客户端的响应,这些响应以前由工作进程生成。当请求被传送到tornado/cyclone处理程序线程时,请求数据将被发送到worker队列进行处理,然后由worker处理(连接到数据库等)。同时,tornado/cyclone处理线程将查看特定于客户端的队列,并将带有数据的响应发送回客户端(如果队列中有一些等待的话)。请看图表。
简单的图表:https://i.stack.imgur.com/9ZxcA.png
我正在考虑队列系统,因为一些请求可能会对数据库造成相当大的负担,并且一些请求可能会为其他客户端创建通知和消息。这是迈向可伸缩服务器的一种方式,还是过于夸张了?
发布于 2020-08-29 16:55:28
在做了一些研究之后,我决定使用连接到zeroMQ的tornado websockets。灵感来自于这个答案:Scaling WebSockets with a Message Queue。
https://stackoverflow.com/questions/63543200
复制相似问题