1

我有一个在虚拟 Windows 服务器上的 php、mysql、apache 上运行的 web 应用程序。我想重新设计它,使其在 AWS 上具有可扩展性(为了好玩,以便我可以学习新事物)。

我可以看到如何设置 EC2 并将其全部转储到其中,但我希望使其可扩展并利用 AWS 上的所有酷功能。

我试过谷歌搜索,但找不到简单的指南(注意 - 我没有 Linux 的命令行经验)

谁能指导我找到可以引导我完成这些步骤并教我的详细资源?或者,总结答案中的步骤,以便我可以根据您所说的进行研究。

谢谢

4

2 回答 2

1

AWS 一直在发展和变化,因此没有很多书籍可以提供帮助。亚马逊提供非常好的培训我参加了他们关于使用 AWS进行架构的为期三天的课程,这似乎正是您想要的。

当然,并不是每个人都能负担得起花费旅行时间和金钱去上课的费用。2012 年 11 月的AWS re:Invent 大会有很多与您想要的内容相关的会议,并且大多数(可能是所有)会议都提供免费在线视频。使用 AWS 构建 Web 规模的应用程序可能是相关的(提供幻灯片视频),就像剖析 Internet 规模的应用程序(提供幻灯片视频)一样。

更好地理解这些选项的一个好方法是修改 AWS 上的现有应用程序。只需将其移动到 AWS 中的 EC2 实例,然后开始更多地利用可用的东西,这将很容易。我要做的第一件事是摆脱您自己机器上的 MySql 服务器并使用 RDS 提供的服务器。一旦稳定,在 RDS 中创建一个或多个只读副本,并更改​​您的应用程序以从它们读取大多数操作,仅当您需要完整的当前结果时才从主(可写)数据库读取。

除了数据库之外,您的应用程序是否在 Web 服务器上保留任何数据?如果是这样,通过将数据移出 EC2 实例来摆脱所有本地存储。其中一些可能会进入数据库,一些(如大文件)可能适用于 S3。DynamoDB 是存放会话数据之类的好地方。

以上所有内容都将 Web 服务器上的负载减少到您的应用程序代码上,这有助于提高可伸缩性。现在您在 Web 服务器上不保留任何状态,您可以使用 ELB 和 Auto-scaling 自动运行多个 Web 服务器(甚至根据需要自动启动更多)以处理更大的负载。

该应用程序是否有任何您现在根据 Web 请求按需执行的长时间运行的密集操作?考虑在被询问时不执行操作,而是使用 SQS 对请求进行排队,并告诉用户您将得到它。现在有长时间运行的进程(或 cron 作业或计划任务)定期检查队列,运行请求的操作,并将结果(使用 SES)通过电子邮件发送给用户。要真正扩大规模,您可以将这些工作从 Web 服务器转移到专用机器上,并在需要时再次使用自动缩放。

您需要更大的机器,还是可以使用更小的机器?CloudWatch 指标可以显示一段时间内使用了多少 IO、内存和 CPU。您可以根据需要将预置 IOPS 与 EC2 或 RDS 实例一起使用以提高性能(有偿),并使用不同大小的实例来获得更多内存或 CPU。

所有这些 AWS 设置和配置都可以使用 AWS Web 控制台、命令行工具或提供多种语言的 SDK(Python 的boto 库很棒)来完成。在学习了基础知识之后,研究 CloudFormation 以更好地自动化它(到目前为止,我已经写了几篇关于此文章) 。

这是一种方法的 10,000 英尺高的视图。当您尝试使用每项 AWS 服务时,您需要了解它们的详细信息。AWS对所有这些都有很好的文档。

于 2013-01-19T18:12:44.793 回答
0

取决于你如何看待它,这更像是一个评论而不是一个答案,但写成评论太长了。

您的要求真的无法在 SO 上得到回答——这是一个巨大而复杂的问题。您基本上是在问“我如何设计一个可以部署在基于云的平台上的高度可扩展、持久的应用程序?” 答案很大程度上取决于:

  • 你的应用程序的细节——它做什么以及它是如何工作的?
  • 您对停机时间的容忍度与您的预算相平衡
  • 您当前的开发和部署工作流程
  • 您在员工中支持应用程序的资源/技能组合
  • 您的发布时间框架是什么样的。

我经营一家软件咨询公司,专门提供有关 Amazon Web Services 架构的咨询。我们大约 80% 的业务正在为我们的客户调查和回答这些问题。每次都是一个多周的项目。

但是,为了让您指出正确的方向,我建议您查看Elastic Beanstalk。这是一种类似于 PaaS 的服务,可以抽象出底层 AWS 资源,让没有太多系统管理员经验的开发人员更容易使用 AWS。将其视为在 AWS 上设计自动扩展应用程序的“训练轮”。

于 2013-01-14T18:26:34.257 回答