4

我们有一个使用 Nginx、Apache、Django 和 Postgres 部署的项目。

该项目有大量嵌入式设备以5分钟的间隔登录服务器(https)并向服务器发送文件。此外,该项目的 WebUI 界面让普通用户登录并执行不同的功能。

目前,系统不区分嵌入式设备和普通(人类)用户。当设备数量较少时,此机制以所需的速度正常工作。但是随着设备数量的增加,数据库上的负载增加了很多。我们每天观察到大约 60000 个 django_session 条目。我们运行来处理从设备发送的文件的导入脚本几乎跟不上传入的数据,并且数据库负载很重。

我想实现一个最小的身份验证机制,它可以非常快速地验证设备并允许它发送文本文件。我想避免使用 django 身份验证方式,但想继续使用 auth_user 表作为设备的用户名密码。鉴于性能要求,我需要某种方式,它使用 nginx 并且不会真正将 apache 带入图片并接受文件。

您认为实现这一目标的最佳方法是什么?另外,这种大型嵌入式设备相关项目使用什么机制来实现这种机制?

4

2 回答 2

2

因此,据我了解,每个嵌入式设备都在 django 中设置了一个用户帐户,并且您希望避免这种开销。

首先是一个问题,后端如何知道它何时与嵌入式设备或人类用户交谈?我会假设这些信息嵌入在 django 系统中。

如果是这样,您需要做的是在将用户名和密码传递给 django 之前拦截用户名和密码,检查数据库中的帐户类型,如果它是嵌入式设备,则将其传递给一个处理应用程序,该应用程序只接受文件和处理它们。你如何拦截这取决于你,你可以用几乎任何你想要的“网络”语言来做,当你决定如何处理流量时,只需使用重定向。

如果您有机会进一步重写,为什么还要为嵌入式设备设置用户名密码?假设它是一个嵌入式设备(单一用途的最小接口),那么是否没有根据足以识别它的已知证书列表检查其 SSL 证书?这可以完全消除与 django 系统的任何交互,因为您需要做的就是根据已知的 ok 证书库检查证书。

于 2010-02-18T20:39:31.997 回答
1

你能编写一个编译的 cgi 脚本(用 C 还是 C++?),直接根据 Postgres 数据库对嵌入式设备进行身份验证,并以适当的方式存储文件?您显然不需要会话,因为嵌入式设备每 5 分钟进行一次连接。

我对 Django 了解不多(从嵌入式标签中挑选出来的),所以我不知道是什么导致了它的开销。

对于这个简单的任务,用 C 语言编写 CGI 脚本实际上并不难(假设您或您的团队中的某个人知道 C)。

于 2010-02-19T02:29:38.210 回答