原始问题
我想从Twisted异步应用程序中对数据库运行查询。例如,添加新记录,更新某些内容或仅获取一些数据。
我的建议
我想在Django中制作只有Twisted应用程序才能访问的特殊视图,这将对我需要的数据库进行各种操作。
在示例url domain.com/server/getuserdata/{{ user_id }}/中,将以某种方便的格式(json)返回有关用户的数据。
GET / POST请求在Twisted中会有所不同,因此不会阻止我的Twisted应用(如果我输入错了,请更正我)。
我的Twisted应用只会偶尔运行一次这些请求。这不是实时更新数据。实时数据将存储在Redis中,一旦准备好将其存储在Django数据库中,我就使用存储在Redis中的数据向Django运行请求。
但是每秒仍然会有很多来自服务器的请求(比如说100到1000)。
我读过的另一种方法
扭曲的nadbapi,但是自2007年以来就没有更新过,所以我不想老实地使用它
将请求存储在Redis中,并由另一个守护进程/应用程序或cron运行它们。
问题
将延迟对象用于Django的GET / POST请求是一种好方法吗?
我能以某种方式告诉Django Twisted应用程序是受信任的,因此它不会像DDOS那样对待它吗?
这样处理这么多请求是否足够快(当然使用缓存)?
有没有更好的方法来完成此任务?
我是Twisted的新用户,并且将异步应用程序与同步应用程序集成在一起,所以如果我输入了一些愚蠢的内容,我感到抱歉
嗯,我想我错过了一些东西。 您为什么不直接从Twisted应用程序中查询呢? twisted.enterprise.adbapi为大多数流行的数据库后端提供异步api ...
我认为adbapi是不可靠的。 另一件事是,我将不得不两次定义我的数据库模型(对于django和abdapi)。 我认为,使用RESTful api也会更加安全。 Deliciouspie是django创建RESTful api的绝佳应用。 使用多个数据库会引起其他问题。
Is using deffered objects for GET/POST requests to Django a good
approach?
我希望我有经验来深入回答这一问题。我相信,只要请求是异步的,您在扭曲的方面就可以了。我基于对龙卷风的基本经验。应用程序必须请求Web服务,这是相对普遍的,而龙卷风提供了一种异步方法来将其内置到框架中。
Can I somehow tell Django that Twisted app is trusted, so it won't
treat it like a DDOS?
我不认为django天生就知道请求什么服务。它不会限制速度或开箱即用。它只是响应对它的任何请求。如果还有更多请求,它将崩溃。 django可以处理多少请求,这是您项目上的变体以及如何部署它。您可以使用gunicorn轻松运行它,并让nginx坐在它前面。如果它不能正常运行,则可以启动另一个gunicorn实例。
Will this be fast enough with so many requests (using cache of
course)?
我想没有人能说。您可能必须自己进行基准测试。有许多博客文章/文章对各种django服务器配置进行了基准测试。
Is there any better approach of this task?
我认为这是一种相对常见的方法。通过RESTful接口通过django公开您的方法。从扭曲的异步需求。
感谢您的完整答复。 现在,我确信可以使用这种方法,在阅读了许多有关此问题的线程后,我并没有发现这种方法很常见。 我并没有知道Django没有针对DDOS的保护,现在我看到ip是文件服务器的责任。