5

所以我正在开发一个为用户上传视频的网站,所有的基础设施都在亚马逊上。我正在尝试找到一个好的工作解决方案,这就是我的想法

  1. 有一个 EC2 Instant,它使用 PHP 处理文件上传到它的 EBS 卷
  2. 将视频文件传输到 S3
  3. 让 Amazon Elastic Transcoder 将视频文件从 S3 转换为适当的格式,并将它们存储回 S3
  4. 使用 CloudFront 将转换后的视频文件提供给公众

首先,您对此有何看法?有没有更简单的方法可以达到相同或更好的效果?

其次我现在的主要问题是将文件传输到S3,我尝试过s3fs来做这件事,但是它在大文件传输上出现了各种奇怪的问题,这让我放弃了s3fs。

响应最快/最好的方式在 S3 到 EC2 之间复制数据?有人建议使用 EBS 卷,但我不确定是否可以挂载 EBS,然后也可以访问 S3 上的相同数据。

任何帮助表示赞赏

4

2 回答 2

4

要将文件传输到 S3,由于您已经在使用 PHP 进行编码,因此您应该查看 Amazon 提供的 PHP 库以连接到他们的服务。使用基于文件系统的方法(将其安装到您的实例)并不是最好的方法,因为与 S3 的连接断开的频率比您希望的要高。我知道,我试过了。

但通常,您在实例上“捕获”文件然后将其推送到 S3 的方法是合理的。但是,您需要注意不要在数据库中保存对文件的引用,直到它到达 S3,否则,如果您选择在负载均衡器后面运行多个实例,您将遇到可伸缩性问题。

关于转码,Amazon Transcoding 服务很新,所以我没有经验,但我强烈推荐 Zencoder。顺便说一句,它在 AWS 上运行,速度快且便宜,并且按照您期望 AET 工作的方式进行:您给它一个 S3 文件,并告诉它在哪里编写转码变体、缩略图等。

希望这可以帮助。

于 2013-03-01T21:48:37.483 回答
2

为此,您不需要 EBS。

您可以将上传的数据写入 EC2 临时驱动器,然后将其推送到 S3,也可以将数据直接流式传输到 S3。

如果您使用临时驱动器方法,如果您的 virt 死了,您可能会面临数据丢失的风险,但总体而言,更少移动部件的简单性可能是值得的。

将数据直接流式传输到 S3 是我会尝试做的。它消除了写入磁盘(无论是本地还是 EBS)的整个步骤,从而简化了您的应用程序。

如果我要设计这样的系统,它将是:

  1. 项目清单
  2. Elastic Beanstalk 扩展前端
  3. 由您的应用程序直接流式传输到 S3 的数据
  4. RDS 或 DynamoDB 表跟踪已完成和正在进行的内容。
于 2013-05-06T22:59:25.173 回答