我最近推出了一个非常受欢迎的网站,但我在扩展性方面遇到了麻烦。 我的网站大量使用FFmpeg,并且在高峰时间内RAM使用率快速达到2 GB点,交换文件开始使用。 CPU使用率也开始上升。
用户抱怨网站速度很慢。 他们这样说是因为所有的FFmpeg实例运行速度都很慢,因为同时运行的是多个实例。 用户实时使用我的服务器上的FFmpeg。
有什么我可以考虑或做的,以减轻服务器和内存的使用刚刚射击? 也许有比FFmpeg(!)更好的东西。
是唯一的解决scheme“投入一些现金”在一个更强大的服务器?
我已经提供了很less的信息,请多询问一下,所以这个问题是可以解决的。
那么,一个简单的解决scheme就是排队Ffmpeg任务,所以在任何时候只有一个固定的数字在运行。 而且你应该考虑在Web服务器的独立机器上运行Ffmpeg进程。
这是一个常见的结构问题,而不是一个记忆问题。 听起来你正在把所有东西都塞到一个盒子里? DB,Web和MPG处理? 这不会很好地扩展!
无论您的应用程序如何,任何使用批处理系统的机器都可以在多台机器上更好地工作。 通过将负载分散到多个盒子中,并将真正密集的工作远离networking层,您的用户将会感谢您!
您的Web层只应该提供界面。 您应该有1台以上的机器专门在后台处理video。 这样一旦准备就绪,就可以由Web层提供服务了。
我发现这个话题的最佳参考是由Flickr的前首席技术官Cal Henderson创build可伸缩网站。 以前的链接是亚马逊,所以你可以预览便宜的书。 谷歌图书的这一点也将让你阅读。
祝你好运!
我认为你可能会做一些事情来提高内存使用率,但是当这一切都说完了,你很可能会通过购买更多的内存出来更好。 我相信我会被拒绝这个答案,但我只是想解决这个问题的经济性。
我认为做最简单最快的事情就是购买一台新的服务器。 严重的是,戴尔2950 32 GB的内存和3.2 GHz的8核心,我认为只有8或10万美元的CAD 。 花一半时间,并且仍然可以运行大量平行任务,并且拥有大量内存。 你绝对不会被2 GB的上限和交换到磁盘。
ffmpeg非常受CPU限制,而不仅仅是内存。 该应用程序将不会更快,因为该框有更多的内存 – 更多的实例意味着每个运行速度较慢,并使用较less的CPU。
除非你可以优化ffmpeg本身或使用asynchronous队列,否则你需要获得更多的机器。
主CPU有足够的内存不能开始交换,所有CPU的最大利用率。
像云计算公司的营销机器人那样冒险,这就是云计算的意义所在。
我强烈build议使用诸如Amazon EC2或Rackspace Cloud之类的东西。 创build一个包含ffmpeg的基本图像,以及一个允许从应用程序远程调用ffmpeg的界面。 创build该图像的一些实例,并确保使用所选的云提供程序,您可以创build和销毁该图像的实例以匹配负载。 然后,您的应用程序应该将所有ffmpeg任务委托给您的云服务器,并根据它需要同步处理的ffmpeg作业的数量来控制已启动的云服务器的数量。 这将保持我认为你的应用程序,video转码等的瓶颈,从你的应用程序分开,并能随意扩展。