扩大我的 Web 应用程序以应对大量用户的最佳策略是什么?

扩大我的 Web 应用程序以应对大量用户的最佳策略是什么?

我想获得一些建议/最佳实践,了解如何制定扩展 Web 应用程序的策略。我在这里说了些废话,展示了我有限的知识,但想填补我的知识空白。我试图尽可能多地学习这些知识,但我意识到我需要寻求一些外部帮助,因此作为一个一般性问题,最好知道最容易外包的东西是什么。

我的背景 - 我是一名开发人员,主要从事用户界面开发,并一直使用 Flash 和 PHP 开发应用程序的功能,让用户上传图像和视频进行在线共享。

系统架构如下:

  1. 一台同时充当数据库服务器 (MySQL) 的 Web 服务器。该服务器位于一家值得信赖且可靠的托管公司的托管包中。Web 服务器提供 PHP 页面和 Flash SWF,它们是主要的 UI 组件
  2. Amazon S3 存储桶用于存储用户的图像、视频和音频文件。
  3. 用户界面组件要么是 PHP 页面,要么是 Flash SWF,例如,图像和视频通过 Flash swfs 查看,Flash swfs 通过 AMFPHP 服务查询数据库以获取要加载的图像和视频文件的 URL。然后从 Amazon S3 存储桶接收这些 URL。另一个 FLash SWF 处理上传并将文件发布到在 Amazon Cloud 上的 EC2 实例上运行的 PHP 脚本。
  4. 用于管理图像、视频和音频上传的上传服务器。这是一个 Amazon EC2 实例,运行在 Elastic Load Balancer 后面,当 CPU 容量达到 80% 时,它会添加更多实例。
  5. 我们还使用在 Amazon EC2 上运行的第三方服务来转码视频文件。

因此,我认为在很大程度上一切都已设置好,可以进行扩展。但我没有扩展或管理高流量 Web 应用程序的经验,因此将依赖我们的 Web 服务器托管公司来管理 Web/应用服务器和数据库服务器的可扩展配置的设置。

硬件/架构扩展-

据我了解,第一步是将 Web 服务器和数据库分开,让数据库服务器独立运行,将 Web 服务器置于负载平衡器后面,最终为数据库服务器配置主/从配置。我应该要求我的 Web 托管公司做什么?这样做有什么问题,对我的 AMFPHP 服务、不同类型的查询(写入和读取)有什么影响?我有一个单独的脚本,其中包含数据库连接详细信息,该脚本包含在 globals.php 脚本中,因此我可以轻松地在一个步骤中更新连接详细信息。在主/从配置中,所有写入通常都转到主服务器,而读取来自从服务器,我说得对吗?这是否意味着我需要查看我的所有数据库查询,并确保如果是“UPDATE”或“DELETE”查询,它会转到主数据库服务器?在我的 PHP 代码中,数据库查询分布在整个脚本中,并根据需要从函数中调用。我读过一些关于数据库抽象的内容,但并不完全理解这种方法的重要性。

代码优化以实现扩展-

我需要考虑更改代码中的哪些部分以使其更具可扩展性?PHP 中哪些部分会受到扩展的影响?

安全-

当考虑处理大量数据时,我需要注意哪些与安全相关的常见事项。

数据库优化、备份和恢复程序-

对于大型数据库,为 MySQL 数据库实施自动数据库备份和恢复策略的最佳方法是什么?我是否应该考虑拆分我的数据库 - 我将所有数据保存在一台服务器上,尽管有多个数据库,例如用户成员资格信息的数据库、用于保存有关用户上传的数据的数据库、包含有关网站运行的数据的数据库(例如与管理功能更相关的数据)。我希望能够分析数据库,以便能够了解事情的运作方式,并了解 Web 应用程序的使用方式和开发方式,因此假设最好定期对数据库进行快照并存储这些快照,这样我就可以了解事情随时间的发展时间表,并使用某种数据库分析工具查询这些快照以跟踪事情的变化情况。关于如何做到这一点,有什么好的建议吗?有什么工具可以让我和其他非技术人员分析数据并生成报告。

这大概涵盖了我对制定扩大规模战略时需要解决的领域的理解。人们认为我需要做什么才能成功管理上述问题?我的假设正确吗?我错过了什么?我还应该考虑什么?有没有好的资源可以处理这个问题?如果我要招聘一个人来帮助解决这些问题,我应该期望完美的候选人拥有哪些技能/经验?

非常感谢所有建议/经验/意见

干杯!

答案1

这只是一些指示,希望在我投票结束之后能有所帮助。考虑阅读:

这两本都是关于如何构建可扩展 Web 应用程序的好书,涵盖了所使用的技术和思维方式/设计过程。

答案2

这个问题太宽泛了,无法在这里回答 - 我建议阅读highscalability.com

相关内容