我有一个LAMP网站的客户主要提供视频服务。他目前在一台服务器上拥有所有组件。他有一些扩展问题。有哪些技术可以用来帮助。
我使用它将数据库分离到另一台服务器,它与网络服务器之间有GB以太网。也许添加更多带有负载平衡的Web服务器和带复制的其他MySQL服务器?
如果可能的话,想要一些关于如何扩展的中,大,超大的例子。
该视频实际上是以jpg图片形式出现的。与本网站类似:
http://www.webcams.travel/webcam/1170170095
并添加一些细节。我认为每小时的最大访客量为1000,我认为很幸运。也许每天接近1000个。
答案 0 :(得分:8)
关于CloudFront和MemCache等的建议都很好,假设这些建议解决了性能问题的根源。
在数据库方面:个人资料,个人资料,个人资料。将数据库移动到单独的服务器(可能)是一个很好的步骤,但如果您尚未分析在此数据库实例上运行的查询,则您不知道需要改进的内容。
首先对最常见的查询执行EXPLAIN,然后检查是否在大型或不断增长的表上执行不必要的顺序扫描。必要时索引。
是否有任何查询传回未使用的列?
正如其他评论者所担心的那样,您是否正在从数据库中提供图形/视频内容?文件应保存在文件系统中,并从那里提供。
您的所有桌子都是MyISAM吗?经常更新的表可以通过将它们移动到InnoDB来显示性能改进,它们可以从行级锁定中受益(与MyISAM的表级锁定相反)。
这些只是简单的一般性建议 - 如果没有更多关于 的内容的详细信息,那么提供更深层次的内容就很难了。
答案 1 :(得分:5)
首先,我同意您在尝试扩展之前必须知道瓶颈是什么。这里有一些工厂建议让你开始:
从数据库中取出视频。我不知道在任何情况下这是否有意义。
再添加一台服务器以仅为视频内容提供服务,并将HTML /应用程序保留为原始服务器。这不仅可以减少负载,还可以通过克服任何HTTP connection limits来提高客户端的性能。
缓存 - 这可能意味着Memcahce或只是预先构建HTML输出,而不是为每个请求动态处理它。
如果你有幸达到“超级大”,你可能会想到CDN。我相信在此之前你会遇到很多其他的障碍。
答案 2 :(得分:4)
你需要确切地解决问题所在 - 没有通用的解决方案。
您需要使用真实硬件和可以模拟大量客户端的东西构建性能测试环境。这可能非常昂贵。
如果问题是数据库(它可能是),那么解决方案通常是将其拆分为几个数据库,每个数据库都包含部分数据。
但我不认为任何理智的人都会在MySQL上存储视频 - 如果他这样做,那么重构可能会有序。
答案 3 :(得分:0)
查看他的网站各部分实际造成的负载情况。
我认为大部分负载实际上是为视频服务 - 使用代理将此工作重定向到第二个(第三,第四......)服务器。
答案 4 :(得分:0)
Barrett的答案几乎就是我要做的事情 - 了解瓶颈,查看memcached,将数据库移到与Web服务不同的服务器等等。
我想补充一点,亚马逊有一项名为CloudFront的新服务,该服务将提供来自地理位置较近的服务器的内容。我还没试过,但这可能是一种以相对较低的成本分摊负载的方法。
另外,看看Livejournal和Facebook关于他们如何扩展系统的演示文稿,他们可能会根据您的应用程序结构提供一些见解。
答案 5 :(得分:0)
您应该首先分析应用程序并找出瓶颈所在 - 如果是PHP,使用类似xdebug的东西将是一个良好的开端。您可能需要花费很长时间来序列化数据或与数据库交谈 - 因此,使用Memcached进行缓存可能会有所帮助。
其次,如果您使用的是MySQL,请打开MySQL慢查询日志(my.cnf中的log_slow_queries);这可以用来让你了解昂贵的数据库查询是什么,一旦你知道你可以通过EXPLAIN<>来定位它们。正如已经提到的那样。可能的情况是,您只需要向数据库添加一些索引,此时它将再次变得快速。还有其他相关的my.cnf参数,例如记录查询不使用索引。
第三,看看像Yahoo的页面速度firefox插件这样的工具 - 它会提出一些建议(例如卸载静态内容,压缩你要返回的东西,确保你有过期的标题等)。也许服务器本身不是瓶颈,由于依赖第三方(外部JS,广告,闪存......),页面需要很长时间才能呈现。
与Web服务器相比,您需要了解数据库服务器的繁忙程度,以了解需要添加其他硬件的位置(即,您是否需要具有前端负载均衡器的多个Web服务器,或者您是否需要多个具有复制功能的数据库服务器或两者兼而有之?)。
我确信有更多的东西可以说......