编写可伸缩网站的技巧

时间:2009-07-12 16:50:35

标签: php mysql scalability

我是网站可扩展性领域的新手。您能否向我推荐一些使网站可以扩展到大量用户的技术?

10 个答案:

答案 0 :(得分:17)

  1. 在重载下测试您的网站。
  2. 监控所有统计信息
  3. 找到瓶颈
  4. 修复瓶颈
  5. 回到1
  6. 祝你好运

答案 1 :(得分:10)

如果您希望自己的网站扩展到超出单个服务器的功能,则需要仔细规划。设计以便可以实现以下目标: -

  • 使您的数据库可以位于单独的服务器上。这通常不会太难。
  • 确保您的所有静态内容都可以移动到CDN,因为这通常会给您的服务器带来很大的负担。
  • 准备在硬件上花很多钱。更多内存和更快的磁盘有助于实现。
  • 当您需要将数据库或php从单个服务器拆分到多个服务器时,会变得更加困难,因此要优化所有内容,从代码,数据库架构,服务器配置以及您能想到的任何其他内容尽可能长时间地停止这最后一步。

除此之外,您所能做的就是对您的网站进行压力测试,找出瓶颈所在并尝试将其设计出来。

答案 2 :(得分:4)

查看Rasmus Lerdorf(PHP的创建者)的this talk

特别是第8页及以后。

答案 3 :(得分:3)

您可能希望查看此资源 - highscalability.com

答案 4 :(得分:2)

许多人提到了识别瓶颈的工具,这当然是必要的。你不能花费高效的时间来加速某些事情而不知道它在哪里慢。但您需要知道的另一件事是您的目标可扩展性所在。如果人力资源中的三个人使用它,那么花几个月的时间让您的网站扩展到与Twitter相同数量的用户是否物有所值?您是否在产品要求中具有已知的交易率,响应延迟或用户数量?如果是,请使用优化策略定位这些数字。如果没有,在追逐性能老鼠之前找到那些

答案 5 :(得分:1)

非常相似:How Is PHP Done the Right Way?

可扩展性不是一个小问题,当然也比单个问题中可以合理涵盖的材料更多。

例如,对于某些类型的应用程序,连接(在SQL中)不会扩展,这会带来各种缓存和分片策略。

Beanstalk是高性能PHP站点中的另一种可伸缩性和性能工具。和memcache一样(不同类型)。

答案 6 :(得分:1)

按重要性排序:

  1. 如果您运行PHP,请使用像APC这样的操作码缓存。 (这非常重要,可以在下一代PHP中内置。)

  2. 使用YSlowGoogle Page Speed来识别瓶颈。 (这将揭示您的网站存在影响客户端和服务器性能的结构性问题。)

  3. 确保您的Web服务器为静态内容(图像,Javascript,CSS)发送正确的Expires标头,以便浏览器可以正确缓存它。 (YSlow也会警告你这件事。)

  4. 使用HTTP加速器,例如Varnish。 (This picture说明了一切 - 他们已经有一个HTTP加速器。)

答案 7 :(得分:1)

可扩展性的最大问题通常是像DBMS这样的共享资源。问题出现是因为DBMS通常无法放松一致性保证。

如果您想在使用MySQL之类的东西时提高可扩展性,则必须更改架构设计以放松一致性。

例如,您可以将数据库模式分离为具有写入的规范化数据模型,并为90%的读取操作分别使用复制的只读非规范化部分。只读数据可以分布在多个服务器上。

提高数据库可扩展性的另一种方法是对数据进行分区,例如:将数据分成每个部门的数据库,并在ORM或DBMS中汇总它们。

答案 8 :(得分:0)

使用可靠的OOP技术开发您的网站。您需要将您的站点设置为模块化,因为并非所有性能瓶颈在开始时都是显而易见的。随着流量的增加,随时准备重构您网站的部分内容。我写的第一句话将帮助您更轻松,更安全地完成。此外,使用测试驱动开发,因为重构意味着新引入的错误,并且良好的TDD在它们投入生产之前很好地捕获它们。
如果您的网站流量证明了这一点,那么尽可能将客户端代码与服务器端代码分开,因为它们可能会从不同的服务器提供服务。
阅读文章(例如阅读YSlow提示)。

GL

答案 9 :(得分:0)

除了其他建议之外,请考虑将您的网站拆分为等级,例如multitier architecture。如果操作正确,则每层可以使用一台服务器。