1

我正在使用带有 apache mod_wsgi 的 django,我的网站在每个页面上都有动态数据,并且所有媒体(css、图像、js)都存储在通过“ http://bucket.domain.com/images/喜欢的亚马逊 S3 存储桶中*.jpg”在标记内。. . . 我的问题是,清漆还能帮助我加快网络服务器的速度吗?

我正在努力推倒这里所有的绊脚石。还有什么我应该看的吗?我在每个页面上为我的代码创建了一个查询分析器,渲染速度约为0.120 CPU 秒,这似乎足够快,但是当我使用ab -c 5 -n 100 http://mysite.com/时,结果只是每秒请求数: 12.70 [#/秒](平均值)。. .

我意识到有很多变数在起作用,但我正在寻找一些关于我可以做的事情的指导,并认为 Varnish 可能是答案。

更新 这里是我的分析器的截图 替代文字

4

2 回答 2

2

提高表现的唯一方法是衡量是什么让你放慢了速度。尽管它不是世界上最好的分析器,但 Django 与 hotshot 分析器(在此处描述)有很好的集成,您可以弄清楚这 0.120 cpu 秒是什么。

你用的是2个cpu吗?如果是这种情况,那么当您使用 ab 时,限制可能在 db 中?我之所以这么说是因为 0.120 * 12.70 是 1.5,这意味着有 0.5 秒的时间等待某事。这也可能是 IO 或其他东西。

无缘无故添加另一层(例如清漆)通常不是一个好主意。varnish 之类的东西会有所帮助的唯一情况是,如果您有连接不良的慢速客户端保持线程,但 ab 测试没有达到这种情况,坦率地说,这不是一个足够大的问题来保证额外的层。

现在,下一个主题是缓存,varnish可以提供帮助。您的页面是为每个用户定制的,还是可以长时间保持静态?通常页面是静态的,除了一个简单的登录状态屏幕——在这种情况下,考虑使用 cookie 将该登录状态加载到 javascript。如果您能够缓存整个页面,那么它们在 ab 中会非常快。然而,下一个问题是 ab 并不是你网站的一个很好的基准,因为用户不会只是坐在一个页面上并反复按 f5。

于 2010-10-20T23:23:18.197 回答
2

在安装清漆之前需要考虑的几件事:

  • 首先,您是否在 Django 中启用了页面缓存中间件?
  • etags 是否设置并正常工作?
  • 您的数据库服务器性能最佳吗?
  • 您是否考虑过在代码中使用 memcached 设置缓存以获得常见结果?(特别是显示给未登录用户的首页和静态页面)

除了查询繁重的动态页面绝对必须为每个用户显示大不相同的数据之外,0.12 秒似乎是一个很长的时间来服务一个页面。看看如何在应用程序中进行缓存以提高性能。如果您有一个除了用户名或类似内容之外大部分是静态的页面,请缓存页面的计算部分。

当 Django 的缓存正常工作时,ab公共页面上的速度应该很快。如果您没有使用 Apache 的任何其他功能,请考虑使用更轻、更快的东西,例如 lighttpd 或 nginx。

Eric Florenzano 编写了一个非常有用的项目,名为 django-newcache,它实现了一些高级缓存行为。如果您遇到内置缓存的限制,请考虑一下。http://github.com/ericflo/django-newcache

于 2010-10-20T23:24:02.733 回答