我目前正在对用户上传的视频在 linode 服务器中进行转码并使用 s3 来存储它们,但是,作为我的乐观主义者,我想将转码移至 Amazon EC2 以在必要时扩大规模,同时获得使用它的经验。到目前为止,这是我的工作流程:
- 绕过 nginx/Rails 堆栈直接上传视频到 s3
- 使用视频 url 在 Amazon 简单队列服务中创建一个条目
- 查看是否有任何 EC2 实例正在运行,如果没有启动一个简单的 ruby 脚本作为启动脚本(我相信亚马逊允许启动脚本低于 6kb)
- Ruby 脚本连接到简单队列并运行 ffmpeg 命令对视频进行转码
- 脚本查看是否有任何其他队列并运行它们
- 当没有更多队列时关闭实例(可能会使其运行一小时,因为 Amazon 对 EC 实例运行的任何部分时间收取全小时费用)
显然以上是基本的,并没有完全使用 EC2。我考虑过使用线程连接到队列并在同一个 EC2 实例上运行新作业或创建其他 EC2 实例,其中启动脚本将运行 ruby 脚本。对于前者,我们需要根据 cpu 使用情况限制同一 EC2 中的作业数量。
后者似乎是一种浪费,但考虑到视频转码是 cpu 密集型的,可能同时两个 ffmpeg 是不可行的。我还考虑过 Amazon 的自动缩放来创建新实例,但使用 Ruby 对我来说似乎更简单、更容易。
- 我的问题是有效地做到这一点的最佳方法是什么?
- 运行两个 ffmpeg 是否被认为是不好的做法?(假设视频大小平均约为 200mbs。)
- 鉴于 Ruby 线程似乎有坏名声,使用它们是否是最佳选择?
- 我应该查看 EventMachine 来代替线程吗?
除非必要,否则我不想运行任何 EC2 实例,最大限度地利用实例,但不要让我的用户等待他们的视频转码太久。
基于这篇文章http://stream0.org/2009/10/h264-video-encoding-on-amazons.htmlhttp://stream0.org/2009/10/h264-video-encoding-on-amazons.html 高-CPU,Extra Large Instance似乎是最好的选择。当然,我计划自己做一些测试,但我想在深入研究之前获得一些专家意见。谢谢!
原来这是一篇文章,抱歉太长了。