Tornado DB notifications from Django



我有Django服务器,它负责处理HTTP请求并更新Postgres DB。还有Tornado TCP服务器,它应该从数据库中推送新数据。

问题是:通知Tornado数据库更改的最佳方式。就是这样。

我想到了什么选择:

  1. 芹菜。我读了很多文档,似乎这只是一个任务队列,而不是通信队列。此外,这些沟通应建立在不同进程之间
  2. Redis。这似乎是一个很好的解决方案,也有针对Tornado的brukva异步客户端。不过,我需要引入对项目的额外依赖
  3. 插座。这似乎是最轻量级的解决方案,除了Tornado TCP服务器之外,它还可以为许多客户端套接字提供服务,所以再添加一个应该没什么大不了的。不过我不想这么低
  4. DB通知。这是我一开始提出的解决方案,但后来不喜欢。Postgres通过NOTIFYLISTEN机制提供了本机通知支持,这两种机制也是异步的,可以很容易地添加到Tornado IOLoop(带有连接文件描述符的io_loop.add_handler)中。这也是低级别的,但更重要的是,该解决方案违反了数据独立性原则

现在我需要提到一个微妙的细节,它可以与我所描述的大不相同:

DB中99%的更改不是发生在Django进程中,而是发生在由调度器启动并使用Django ORM的单独脚本(因此是单独的进程)中

现在这个描述或多或少地反映了项目的实际状态。那么,芹菜真的不适合解决这类问题吗?Redis是最好的解决方案吗?还有什么我不知道的吗?欢迎您提出任何想法和建议。

在评估了所有这些选项后,我决定采用Redis+Tornado方法。它显示出自己相当强大和稳定(这是5年前的事情,仅供参考)。我在这里用一个工作示例阐述了整个项目:https://www.databrawl.com/2017/04/27/real-time-python-via-tcp/

最新更新