使用AMQP和Node.JS实现实时数据同步

我正在构build一个基于Web的生产力应用程序,它必须处理适度的用户并发性,并且我一直在探索各种选项来保持服务器和客户端之间的数据同步。 应用程序数据在页面加载时被引导到JavaScript中,并且使用websocket将数据推送到服务器。

对于上下文来说,我正在使用Node.JS和Socket.IO创build一个持久的客户端 – 服务器网关,它充当Django后端的代理。

面临的挑战是我希望保持所有连接的客户端彼此同步,以便在一个客户端会话上对应用程序进行的任何更改都立即反映在所有连接的客户端会话上。 难点在于不是所有用户都必须查看所有的数据; 有各种不同的用户级别,不同的用户可以拥有略有不同的数据集。

因此,当一个对象以某种方式被改变并且改变被提交给数据库时,我需要知道那些当前连接的用户可以安全地将数据推送到数据库。

我一直在探索不同的解决scheme,我觉得这是可以通过pubsub消息队列来处理的 – 使用AMQP之类的东西,但是我正在努力弄清楚应用程序的结构。

在我的脑海中,应用程序结构如下所示:

Client < – > Node.JS gateway < – > AMQP messaging queue < – > Django app

我应该创build一个单一的直接交换,将Node.js和Django实例视为单个客户端,然后在Node.js中以某种方式过滤结果?

或者是这种过滤的东西,消息系统可以处理,每个连接的客户端订阅相关的主题,例如,只接收他们被允许看到的数据?

我从事消息传递系统方面的经验很less,所以我很难在应用程序中find自己能够扮演的angular色。 任何build议将不胜感激。

我认为每个客户端都可以更容易地订阅到相关的队列,并将节点作为一个哑网关。 一般来说,尽可能将安全性降到最低是个好主意。 另外我认为,如果客户端离线了一段时间,它会使处理更容易,因为你可以把东西留在队列中,稍后再推回去。