如何重构Django站点以便它可以扩展

时间:2012-04-15 17:33:24

标签: ajax django scalability load-balancing

根据以下Stack Overflow问题:Does Django scale? Django非常适合每天/每月预期成千上万用户的网络应用,但要实现这一目标,您必须拥有正确的设计。

现在我的方案如下:

我刚刚加入一家初创公司担任技术主管/首席开发人员,虽然我有两年的Django经验,但我从来没有将它用作大型应用程序。最新的大型应用程序我参与了使用Zope,并依靠SQL Server来处理缓存等(在我看来可怕的做法)。鉴于这家创业公司现在只有6个月后才有大约20,000名用户,并且考虑到他们在雇用我的同时也聘请了营销专家,我可以预期(或者至少希望预期)增长机会。许多现有的Django代码都需要重构;即使用静态html表单而不是ModelForm等。

我的问题是:当我重构这个应用程序时,我应该遵循哪些设计模式才能正确完成,这样我们可以扩展到每月100,000到500,000个用户?我应该注意哪些gottchas?在模型设计方面,什么是可扩展的模型设计?在数据库支持方面,什么样的数据库设置可以帮助我实现这种可扩展性?在负载平衡方面,哪种架构适合负载均衡?

我假设开箱即用Django,不会实现这一点,而且我不想在某种情况下找到自己,我需要聘请一位可扩展性专家......我也想知道是什么我可以使用一些负载测试技术/工具来衡量当前的性能/可扩展性吗?我只和他们待了几天,所以我还不确定产品环境,所以如果我觉得我需要改变产品环境,有什么好的选择(云解决方案),那个适当但负担得起?

编辑:他们似乎也在使用Ajax,这让我很担心。假设我无法说服他们改变这种情况,那些可以使用且仍然可扩展的Ajax技术库(我知道django-dajax / dajaxice)是什么样的。

感谢,

山姆

1 个答案:

答案 0 :(得分:6)

不幸的是,你的问题没有很多具体细节。谷歌搜索将产生大量关于缩放django的信息。

http://www.morethanseven.net/2011/06/30/Django-performance-1-measuring-performance.html

此链接提供了约5种不同的方法来衡量不同的效果指标。由于我无法告诉您如何扩展应用程序的细节,以下是适用于任何网站的一般优秀原则。

  1. 确保您的网络服务器而不是django
  2. 提供静态媒体
  3. 确保您描述一切EXPLAIN至关重要。
  4. 尽可能缓存一切。内存非常闪电,django使其易于实现。
  5. 在模板中注意django ORM陷阱。使用django-debug工具栏确保在迭代结果集时不会无意中进行多次查询。
  6. 对于数据库,请确保您的数据已标准化。
  7. 更好地使用CDN并确保您的Web服务器和数据库服务器位于单独的计算机上。
  8. 不要过早优化!! Django可以开箱即用。我不担心ajax或模型表格或任何东西,除非你发现它们是你成长网站的特定瓶颈。我相信与性能一样重要的是确保您的网站是模块化的,在版本控制下并且易于移动。这将有助于开发,当你长大到足以让你即时启动新机器。