首页 文章

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

提问于
浏览
2

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

现在我的方案如下:

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

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

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

编辑:他们似乎也在使用Ajax,这让我很担心 . 假设我不能说服他们改变它,那些可以使用并且仍然可扩展的一些优秀的Ajax技术库(我知道django-dajax / dajaxice)是什么 .

谢谢,

山姆

1 回答

  • 6

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

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

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

    • 确保您的Web服务器而不是django提供静态媒体

    • 确保你描述一切EXPLAIN是至关重要的 .

    • 尽可能缓存一切 . 内存快速闪存,django使其易于实现 .

    • 小心你的模板中的django ORM陷阱 . 使用django-debug工具栏确保在迭代结果集时不会无意中进行多个查询 .

    • 对于数据库,请确保您的数据已规范化 .

    • 更好地使用CDN并确保您的Web服务器和数据库服务器位于单独的计算机上 .

    不要过早优化!! Django可以开箱即用 . 我不担心ajax或模型表格或任何东西,除非你发现它们是你成长网站的特定瓶颈 . 我相信与性能一样重要的是确保您的网站是模块化的,在版本控制下并且易于移动 . 这将有助于开发,当您长大到足以让您即时启动新机器 .

相关问题