【问题标题】:What does it take to scale Django? [closed]扩展 Django 需要什么? [关闭]
【发布时间】:2014-04-20 04:52:05
【问题描述】:

问题

所以我已经使用 Django 好几个月了*。我发现自己处于这样一个位置,我可以编写一个 Django Web 应用程序来做任何事情,但是我很害怕我无法**想出解决方案来解决如何为大型(大)观众。很高兴知道Django scales,至少。

我是怎么想的

似乎需要相对较大的知识飞跃才能理解如何(更不用说实际执行)扩展 Django Web 应用程序了。我这样说是因为我的研究给我的印象是,扩展(或实现可扩展性)是将售后解决方案适配到您的 Web 应用程序的不同组件以提高每个组件的性能的过程。

什么都有~~

所以有大量的解决方案,以及一堆组件。例如,Elastic Beanstalk 用于 托管Django's cache frameworkMemcachedVarnish 用于 缓存CassandraRedisPostgreSQL 用于数据库uWSGINginxApache 用于部署。如果我认为是对的,无论如何。我还是不确定。

我需要什么

我渴望能成为问题的规范答案的惊人响应,但我也希望能提供关于从哪里开始的线索,或解决问题的方法建议,或扩展 Django 的方法。预先感谢您的智慧之言。 编辑:SO 不赞成 :(

全新和独家:堆栈溢出问题!

我需要什么

为了提高我正在构建的 Django Web 应用程序的扩展准备,我应该做/实施的 3 件最重要/最有效的事情是什么?列出方法,并解释它们如何提供帮助会很好。


*我一直在作弊。我在 Pythonanywhere 上部署,到目前为止只使用了 Sqlite3。迄今为止,我还设法让我的双手保持清洁 WSGI/Apache 部署的东西。

**使用 Django 是我第一次设法通过编程创造出一些有价值的东西。之前,我只使用 Pascal 在 Runescape 和 Java 上作弊,制作了一些糟糕的 Android 应用程序。这或许可以解释为什么我觉得这是一个巨大的飞跃。

【问题讨论】:

  • 你好 SO,编辑后更好吗?

标签: django caching web-applications scalability scaling


【解决方案1】:

一开始我真的不会太担心。也就是说,这里有一些关于如何扩展 Django 应用程序的想法。

缓存

根据您的应用程序,缓存确实非常有用。当然,对于任何读写比例较高的应用程序,例如博客或内容管理系统,实现缓存是轻而易举的事。对于其他类型的网站,您可能需要更加小心,但是 Django 缓存框架可以直接自定义缓存如何为您的应用程序工作。

Memcached 很容易使用 Django 缓存进行设置,而且它可靠可靠。它可能应该是您作为缓存后端的默认选择。

芹菜

如果您的 Web 应用程序在后台执行了相当数量的任务,而这些任务不需要在相同的 HTTP 请求期间完成,那么您应该考虑使用 Celery 在单独的任务中执行它们。

举个例子:在我构建的 Django 应用程序中,可以选择向客户发送电子邮件,并附上一份 PDF 报告副本。因为电子邮件不需要在同一个 HTTP 请求中发送,所以我把这个任务交给了 Celery。现在,当应用程序接收到 HTTP 请求时,它只是将发送该电子邮件的请求推送到消息队列中。 Celery 进程接这个任务并单独处理。

理论上,当您的网络应用程序变得足够大时,任务可以在完全独立的机器上处理。

网络服务器

似乎普遍认为使用 Django 提供静态内容和动态内容是一个坏主意。我使用的解决方案似乎相当典型,并且使用了两个 Web 服务器:

  • Nginx 在 80 端口上运行。它为所有静态文件提供服务,并将其他所有内容反向代理到另一个端口
  • Gunicorn 在另一个端口上运行并提供动态内容,而 Supervisor 用于运行 Gunicorn 进程

这个一般想法有多种变体,但这种两台服务器的方法似乎很常见。您还可以考虑使用 Amazon 的 S3 之类的东西来托管静态文件。

花时间缩小静态文件以提高其性能也非常值得。使用像 Grunt 这样的工具,连接和缩小 JavaScript 和 CSS 文件非常容易,这样每个文件只需要下载一个,而不是包括需要单独下载的许多文件。

数据库

MySQL 或 Postgresql 都可以。两者都是在许多网站的生产环境中使用的可靠数据库。

正如我在上面所说的那样,在早期扩展您的应用程序真的不应该是一个太多的问题。不过,熟悉您需要使用的策略类型会有所帮助。

【讨论】:

  • 感谢您为输入所有内容所做的努力,这是一个很好的起点,可以帮助我了解在扩展 Django 时应该考虑什么。
  • 这篇文章很老了。应该说uwsgi比Gunicorn强很多。我还推荐 django-pymemcache vs python-memcached 或 pylibmc,只要当你想使用多个 Memcache 服务器时 python-memcached 是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 2014-11-03
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 2018-03-22
相关资源
最近更新 更多