我想基于LAMP扩展电子商务门户网站。最近我们看到了巨大的流量激增。
缩放它的步骤(请按顺序提及):
答案 0 :(得分:14)
首先,我建议确保服务器提供的每个资源都设置适当的缓存控制标头。目标是确保每次都能获得真正的动态内容,并尽可能地从其他人的缓存中提供任何稳定或静态的内容。为什么当您将产品形象交付给第一个并让AOL将其交付给所有其他客户时,为每个AOL客户提供产品形象?
如果您当前在同一个框中运行Web服务器和dbms,则可以考虑将dbms移动到专用数据库服务器上。
完成上述操作后,您需要开始测量细节。什么资源会首先达到其容量?
例如,如果Web服务器以容量或接近容量运行,而数据库服务器大部分处于空闲状态,则切换数据库或实现复制等没有任何意义。
如果网络服务器大部分处于空闲状态而dbms不断突然消失,那么切换到负载均衡的网络服务器集群是没有意义的。
首先要处理简单的事情。
如果dbms可能是瓶颈,请确保您的数据库具有正确的索引,以便在查找期间获得快速访问时间,并且不会在更新期间浪费不必要的时间。确保dbms从表本身记录到不同的物理介质。确保应用程序不会发出任何浪费的查询等。确保不对您的事务数据库运行任何昂贵的分析查询。
如果网络服务器可能是瓶颈,那么可以通过更改应用程序或实施新的缓存策略等方式查看网页服务器的大部分时间,并减少工作量。确保您没有做任何会妨碍您工作的事情从使用负载均衡器从单个服务器移动到多个服务器。
如果您已经处理了上述问题,那么您将更好地准备迁移到多个Web服务器或数据库服务器。您将更好地了解决定是使用复制扩展数据库还是切换到完全不同的数据模型等。
答案 1 :(得分:3)
1)首先 - 衡量每秒有多少请求可以为您访问最多的页面提供服务。对于平均硬件上编写良好的PHP站点,它必须在每秒200-400个请求范围内。如果你不在那里 - 你必须通过减少数据库请求的数量来优化代码,使用PHP加速器缓存memcached /共享内存中很少更改的数据。如果你每秒大约需要10-20个请求,那么你需要摆脱庞大的框架。
2)第二 - 如果你还在Apache2上,你必须切换到lighthttpd或nginx + apache2。就个人而言,我喜欢第二种选择。
3)然后将所有静态数据移动到单独的服务器或CDN。确保它至少提供24小时的“过期”标题。
4)只有在所有这些事情之后你才可以开始考虑去EC2 / Hadoop,构建多个服务器并平衡负载(nginx也可以帮助你)
在步骤1-3之后,您应该能够轻松地每天点击10,000,000次点击。
如果你只需要1.5-3倍,我会选择更强大的单一服务器(8-16核心,大量RAM用于缓存和数据库)。
使用第4步和多台服务器,您每天可以获得0.1-1亿次点击(但需要更大的硬件和支持费用)。
答案 2 :(得分:1)
找出问题发生的地方(如果您现在没有问题,可能会发生问题)。在评估任何解决方案时,了解最大的资源使用情况非常重要。坚持能为您带来最大改进的解决方案。
考虑: - 高于所需带宽使用x用户是您想要解决的问题,无论转向ec2。无论哪种方式都会花钱,所以看看这样的事情是值得的:http://developer.yahoo.com/yslow/ - 如果这不是问题,不要投资改变数据库。首先找出这是否真的是问题,即使您遇到数据库问题,也可能是代码问题,即每次请求多次访问数据库。 - 除非我们讨论v。大数字,否则你不应该有高CPU使用率问题,如果你确实发现它们正在发生的地方/优化是值得的,特定代码对你的整体资源使用有很大的影响。 - 确保上述内容合理后,您可以通过缓存获得重大改进。在bandwith中(确保浏览器/代理可以在缓存中发挥作用),本地资源的使用(避免一直重新处理/重新检索相同的信息)。
我并不是说你应该全力以赴,只是为了确保你在几个月内不会在其他地方得到同样的问题。也足以找出你最大的收益,以及你是否从任何扩展选项中获得足够的价值。这也可以让您回过头来询问有关具体问题的问题,以及这些缩放选项与这些问题的关系。
答案 3 :(得分:1)
您应该通过选择灵活的框架来做好准备,并确保在此过程中一切都会发生变化。在某些情况下,很难预测用户的行为。
如果您最近看到了流量爆炸,请分析最慢的页面。
您可以迁移到云,但EC2并不是表现最佳的。同样,请确保您无法进行其他优化。
数据库可能会重新设计,但我对此表示怀疑。再次,请参阅问题点。
Hadoop和Cassandra都非常漂亮,但它们可能有点过分。