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

und*_*ned 5 database scalability web-server web-applications best-practices

我想就如何制定扩展我的 Web 应用程序的策略获得一些建议/最佳实践。我在这里胡说八道并展示我有限的知识,但想填补我的知识空白。自己尽可能多地学习这方面的知识很诱人,但意识到我需要寻求一些外部帮助,因此作为一个一般性问题,最好知道最容易外包的事情是什么。

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

系统架构如下——

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

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

硬件/架构扩展-

据我了解,这里的第一步是将 Web 服务器和数据库分开并让数据库服务器独立运行,将 Web 服务器放在负载均衡器后面,并最终为数据库服务器设置主/从配置。我应该要求我的网络托管公司做什么?这样做有什么问题?对我的 AMFPHP 服务、不同类型的查询(写入和读取)等有什么影响?我有一个单独的脚本,其中包含包含在 globals.php 脚本中的数据库连接详细信息,因此我可以在一个步骤中轻松更新连接详细信息。在主/从配置中,所有写入通常都转到主服务器而读取来自从服务器,我对吗?这是否意味着我需要查看我所有的数据库查询并确保它是“

用于缩放的代码优化-

我需要考虑更改我的代码以提高可扩展性的哪些方面?PHP 中受缩放影响的常见事物有哪些?

安全-

在考虑处理大容量时,我需要注意哪些与安全相关的常见事情。

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

为大型数据库的 MySQL 数据库实施自动化数据库备份和恢复策略的最佳方法是什么?我是否应该考虑拆分我的数据库 - 我将所有数据保存在单个服务器上,尽管有多个数据库,例如用户成员信息数据库、保存有关用户上传数据的数据库、包含有关站点运行数据的数据库,例如作为与行政职能更相关的事情。我希望能够分析数据库,以便能够了解事情的运作方式并了解网络应用程序的使用情况,开发所以假设最好定期拍摄数据库的快照并存储这些,所以我有一个时间线来说明事情是如何随着时间的推移而发展的,并使用某种数据库分析工具来查询这些快照以跟踪事情是如何变化的. 是否有任何关于如何解决这个问题的好建议,允许我自己和其他非技术人员分析数据并生成报告的工具。

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

感谢所有的意见/经验/建议

干杯!

jam*_*spo 2

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