我最近推出了一个非常受欢迎的网站,但在可扩展性方面遇到了麻烦。我的网站大量使用FFmpeg在高峰时段,RAM 使用率很快达到 2 GB,并且交换文件开始被使用。CPU 使用率也开始上升。
用户抱怨网站运行缓慢。他们之所以这么说,是因为同时运行的 FFmpeg 实例数量太多,导致所有 FFmpeg 实例运行速度都很慢。用户在我的服务器上实时使用 FFmpeg。
我可以考虑或做些什么来减少服务器和 RAM 的使用率?也许有比 FFmpeg 更好的东西(!)。
唯一的解决方案就是“花点钱”购买更强大的服务器吗?
我提供的信息很少,请提供更多信息,以便解决这个问题。
答案1
嗯,一个简单的解决方案是将 Ffmpeg 任务排队,这样每次运行的任务数量都是固定的。而且您确实应该考虑在与 Web 服务器不同的机器上运行 Ffmpeg 进程。
答案2
这是一个常见的结构问题,而不是内存问题。听起来你把所有东西都塞进一个盒子里了?数据库、Web 和 MPG 处理?这不会很好地扩展!
无论您的应用程序是什么,使用批处理系统,任何处理密集型任务在多台机器上都能更好地运行。通过将负载分散到多个机器上,并将真正密集的工作从 Web 层移开,您的用户会感谢您!
您的 Web 层应该只提供界面服务。您应该有 1 台或以上的机器专门用于在后台处理视频。一旦准备就绪,Web 层就可以提供服务。
我发现关于这个主题的最佳参考书是 Flickr 前首席技术官 Cal Henderson 所著的《Building Scalable Websites》。上一个链接指向亚马逊,因此您可以以低价预览这本书。这个 Google Books 链接也可以让您阅读。
祝你好运!
答案3
我认为您可以做一些事情来改善内存使用情况,但最终您很可能通过购买更多内存来获得更好的结果。我确信我会因为这个答案而被否决,但我只是在考虑解决这个问题的经济性。
答案4
ffmpeg 不仅占用内存,还占用大量 CPU。由于机顶盒的 RAM 较多,因此应用程序几乎不会变得更快 - 实例越多意味着每个实例的运行速度越慢,并且 CPU 使用率越低。
除非您可以优化 ffmpeg 本身或使用异步队列,否则您需要获得更多机器。
主要选择具有足够 RAM 的 CPU,以便在所有 CPU 达到最大利用率之前不要开始交换。