如何扩展 Web 应用程序?

如何扩展 Web 应用程序?

我主要是一名 Web 应用程序开发人员,对扩展/可扩展性技术了解不多。我的应用程序是用 Python 编写的,使用的是 Django;一个相当标准的设置。

我目前使用 Apache 2.2 作为我的网络服务器,使用 MySQL 作为我的数据库服务器;两者都在同一个 VPS 上运行。

到目前为止,它基本上是一个原型,在任何时候仅有 15-30 个并发用户;所以我没有遇到任何问题,但现在由于我们将添加更多用户,我们就会遇到性能问题。

所以我的问题是如何扩展我的 Web 应用程序?我目前的计划如下:

  1. 现在我只运行一台 vps 服务器,apache + MySQL。
  2. 接下来,我计划添加另一个 vps 服务器,仅运行 MySQL,这样我将拥有一个 web 服务器和一个 DB 服务器。
  3. 接下来,我将向 Web 服务器添加 memcache 来缓存数据,以减轻 MySQL 的负载。
  4. 接下来,另一个 Web 服务器用于提供所有静态内容。
  5. 接下来,一个用于负载平衡的 VPS 服务器(nginx/varnish),其后面是我的两个 Web 服务器和数据库服务器。

这听起来像是一个可行的策略吗?请指导我一下。

答案1

您知道第一个瓶颈在哪里吗?如果不知道,您是如何安排要做的事情的顺序的?

也就是说,如果您的应用程序中没有做任何严重错误的事情,您可能遇到的第一个限制将是由数据库引起的磁盘 I/O,您的策略可能是个不错的选择。

将数据库移至另一个物理磁盘应该会有很大帮助,这是您要做的第一件事。例如,根据您使用的系统,在当前主机上使用第二个磁盘与移至完全独立的服务器之间可能没有区别,也可能有很大区别。您正在使用 VPS,如果您受到磁盘 I/O 限制,那么如果恰好使用相同的存储(相同的磁盘或相同的 SAN 或其他),则移至第二个 VPS 可能不会有太大帮助 - 但最后一个问题是您的 VPS 提供商应该解决的问题。

答案2

我建议阅读可扩展的互联网架构作者:Theo Schlossnagle。本书介绍了在服务器之间扩展应用程序、确保无单点故障、扩展数据库等的所有理论和实践。

不过,您的计划听起来确实像是扩展的第一步。通常一切都从一台服务器开始,然后拆分 Web 和数据库,然后添加反向代理或负载平衡器并运行多个 Web 服务器,依此类推。

答案3

无法改进未测量的内容。首先,您应该了解瓶颈所在。您现在可以使用 atop,如果尚未设置某种监控,请设置。如果一切运行良好,您可以使用 JMeter 生成实际负载。

以下是关于围绕 Django 应用构建的基础架构的更多观点。

相关内容