如何描述Django的缩放瓶颈?

时间:2015-06-25 13:26:02

标签: django optimization profiling scalability tastypie

我在REST API中使用django和tastypie。

对于分析,我使用的是@silk_profile(),以下是请求摘要:

enter image description here

如何分析整个流程?除数据库查询之外所花费的时间平均为(382 - 147)ms。如何找出瓶颈并优化/扩展?我确实使用get_object_list作为此资源的{{1}}方法,但即使这种方法似乎也不是瓶颈。

我使用缓存来减少响应时间,但这没有多大帮助,还有哪些其他选项?

使用 loader.io 进行测试时,服务器可以处理的峰值是每30秒 1000个请求(这似乎非常低)。除了缓存(我已经尝试过)可能会有什么帮助?

2 个答案:

答案 0 :(得分:1)

以下是一堆建议:

  1. 每个请求的查询数量至少低于5(每个请求34个非常糟糕)
  2. 安装django工具栏并查看花费时间
  3. 在反向代理(NGINX)后面使用gunicorn或uwsgi

答案 1 :(得分:1)

  • 您有太多疑问,即使您花费的时间相对较快 一段时间到达数据库等。如果你有外部缓存 存储(例如,redis)可能需要一些时间才能连接 那里。
  • 要调查代码的慢速部分,您有两个选择:

    • 使用分析器 - 如果您将分布式系统部署到多台计算机,那么在本地PC上进行分析就没有意义
    • 在代码中添加跟踪点,记录一些消息和当前时间(类似https://gist.github.com/dbf256/0f1d5d7d2c9aa70bce89)。部署此修补代码并使用您的负载测试工具对其进行测试并检查日志。