我目前正在将网页的视频转换部分(有点像 youtube,用户上传视频,我们将它们转换为 flv/mp4)分离到不同的服务器。我已经让系统运行 gearman在同一台机器上。因此,当用户将视频文件上传到服务器 A 时,同一服务器 A 上的 gearman 工作人员会选择该文件。
现在我将worker移到了服务器B上。所以服务器B上的worker需要访问服务器A上上传的文件。目前我使用SCP将文件从A复制到B然后进行处理。这种方法有效,但我觉得应该有一种更干净的方法来做到这一点,但我还没有找到任何有关向 gearman 工作人员发送文件(或大文件)的信息。您将如何解决这个问题?
客户端最好将视频文件作为启动后台作业的命令的一部分发送,这样我就不必担心文件实际上来自工作人员内部的位置。这样我就可以轻松添加更多转换服务器。
我正在为我的网页和工作人员使用 PHP(使用 Gearman extension )。
最佳答案
正如评论中所建议的,拥有共享 FS 是实现此目的的(通常)方法,并且只需在 gearman 的作业请求中传递路径即可。 Gearman 不太适合传递大量数据,因为它必须将作业的所有信息保存在内存中。它从来就不是为处理大文件的传输和分发而设计的。由于 MogileFS 最初也是由 Danga 开发的,因此根本没有必要将文件传输和处理合并到 Gearman 中(这是一件好事,有很多技术可以比 Gearman 更好地解决这个问题)。
当视频到达时,我们使用 NFS 来处理分布式工作人员,编码器将编码后的视频放回到 NFS 共享上,完成后可供公众使用。还没有出现严重的问题,NFS 很稳定,它的问题是众所周知的,并且已经针对您将看到的负载类型得到了解决。
关于php - 将文件发送给 gearman worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11645200/