2

根据以下 Stack Overflow 问题:Django 是否可以扩展?Django 非常适合预计每天/每月有数千名用户的网络应用程序,但是要实现这一点,您必须有正确的设计。

现在我的情况如下:

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

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

我假设使用开箱即用的 Django,不会实现这一点,而且我不想发现自己处于需要聘请可扩展性专家的情况......我也想知道有哪些负载我可以用来测量当前性能/可扩展性的测试技术/工具?我才和他们在一起几天,所以我还不确定 prod 环境,所以如果我觉得我需要更改 prod 环境,有什么好的选择(云解决方案),合适但负担得起吗?

编辑:他们似乎也在使用 Ajax,这让我很担心。假设我无法说服他们改变这一点,那么有哪些好的 Ajax 技术库(我知道 django-dajax/dajaxice)可以使用并且仍然具有可扩展性。

谢谢,

山姆

4

1 回答 1

6

不幸的是,您的问题没有很多细节。谷歌搜索将产生大量关于扩展 django 的信息。

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

此链接提供了大约 5 种不同的方法来衡量不同的性能指标。由于我无法告诉您有关如何扩展您的应用程序的具体细节,因此这里有一些适用于任何网站的通用原则。

  1. 确保静态媒体由您的 Web 服务器提供,而不是由 django
  2. 确保你描述了一切 EXPLAIN 是至关重要的。
  3. 尽可能缓存所有内容。内存快如闪电,django 使其易于实现。
  4. 请注意模板中的 django ORM 陷阱。使用 django-debug 工具栏确保在迭代结果集时不会无意中进行多个查询。
  5. 对于数据库,请确保您的数据已标准化。
  6. 最好使用 CDN 并确保您的 Web 服务器和 DB 服务器位于不同的机器上。

不要过早优化!!Django 可以开箱即用地处理很多。我不会担心 ajax 或模型表单或任何东西,除非您发现它们是您发展网站的特定瓶颈。我相信与性能同样重要的是确保您的网站是模块化的、受版本控制且易于移动。这将有助于开发,当您变得足够大时,您可以立即启动新机器。

于 2012-04-15T22:54:23.990 回答