所以在业余时间,我一直在开发一款网络监控软件,基本上可以安装在一堆客户端上,客户端将数据报告回服务器(RAM/CPU/存储/网络使用情况,之类的)。对于管理控制台和报告,我决定使用 Django,这本身就是一种学习体验。
Client 异步地向 Server 报告他们碰巧拥有的任何数据(截至目前,它只是接收和转储,而不是存储在数据库中).我需要在 Django 中访问这些数据。我已经创建了模型来满足我的需要。但是,我不知道如何将实际数据安全地放入 django 数据库中。
这样做的方法是什么?我想到了几个选项,但它们都有一些缺点:
- 为 Django 应用程序提供对
Server的引用,然后启动一个线程来不断检查新数据并将其写入数据库。 - 让
Server直接访问 Django 数据库,并在那里写入数据。
1 的问题是我将服务器与 django 应用程序更紧密地耦合在一起,但好处是我可以使用 ORM 很好地编写数据。
2 的问题是我不能使用 ORM 写入数据,我不确定在某些情况下它是否会导致 DB 阻塞。
我是否缺少一些明显的好选择?如果这个问题含糊不清,我很抱歉。我是 Django 的新手,我不想把自己逼到墙角。
请您参考如下方法:
设置消息总线(参见 celery)。
每次您的客户端需要记录某些内容时,它都会在队列中提交一条消息。在您的 Django 端,您有一个管理 worker 的经纪人。
broker 监控消息队列,启动 worker 来处理消息,然后让 worker 重新休眠。
工作人员更新数据库。
这样您就不必处理连续线程(这是许多令人头疼的原因),并且您的架构可以轻松扩展以通过简单地添加到消息处理管道来处理多个客户端。
