从 Django App 分配负载

从 Django App 分配负载

我目前正处于将我的第一个大型应用程序开发出来的阶段。

我曾与一些了解情况的 CTO 进行过交流,他们建议我采取以下措施:

将发布阶段分为 4 个步骤

I. 启动单一结构化应用程序。assets/和db.sqlite3都在应用程序内部,都在一台服务器上。

II. 将数据库移至其自己的服务器上,使用 CDN(如 aws-s3)来保存资产/

III. 设置负载平衡

IV. 使用 NoSQL 解决方案而不是 rdbms。

那么!我的主要问题与第 2 项有关:

我是否必须设置一个环境来运行 sqlite3,创建一个用户,然后专门为我的 django 应用程序提供该身份验证?

我熟悉将资产存储在外部,但我从未移出数据库,除实现解析的非 django 解决方案外。

tldr;我是一名业余专业开发人员,我从未构建过任何旨在拥有超过 1,000 名用户的东西,并且我很好奇创建一个 django 应用程序的流程是什么样的,该应用程序能够通过使用另一台服务器成功减少服务器负载。

我的想法可能有缺陷:我不明白这如何分配负载,因为在我看来,应用程序似乎必须发出进一步的请求才能与数据库通信。它实际上只是充当在客户端和服务器之间来回传递消息的中间人吗?

计划使用 apache 进行托管,可能在 ec2 ubuntu 14.04 实例上(多个?)。

谢谢。

答案1

我对你所收到的清单感到非常困惑。

首先,它告诉您在单个服务器上使用 sqlite3。然后,它告诉您将此 sqlite 数据库移动到其他主机?然后,它告诉您设置负载平衡(在单个 Web 服务器上?),然后,它告诉您使用 NoSQL 解决方案,而根据您在此处的描述,没有任何理由认为 rdms 会成为瓶颈。

无论如何,您想要像这样广泛托管的项目的一般设置(也是简单的方法)是将数据库放在单独的主机上(无论是 mysql 还是 postgresql,无论您喜欢什么)并将代码部署到多个应用程序服务器。

您可以使用部署工具或 nfs 来确保所有应用程序服务器上的代码相同。

您通常会在其前面放置一个负载均衡器和/或一个反向 HTTP 代理来卸载通常会到达后端服务器的流量。

一个好的解决方案确实是与亚马逊合作并使用他们的弹性负载均衡器,使您的方案看起来像这样:

  • 1 个负载均衡器实例。
  • 2 个(或更多)应用服务器实例。
  • 1 个(或更多)您最喜欢的数据库服务器实例。

您可以通过在其中一台应用服务器上运行数据库服务器来扩展/缩小此功能。您可以通过为数据库服务器添加故障转移、自动配置、配置工具等来扩展此功能。

相关内容