编写可扩展网站的技术

9

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

10个回答

18
  1. 测试您的网站在重负载下的表现。
  2. 监控所有统计数据。
  3. 找出瓶颈。
  4. 修复瓶颈。
  5. 回到步骤1。

祝你好运。


10
如果你希望你的网站能够扩展到单个服务器的能力范围之外,那么你需要仔细规划。设计时应考虑以下几点:
  • 确保数据库可以放在单独的服务器上,这通常不太难。
  • 确保所有静态内容都可以移动到CDN,因为这通常会减轻服务器的负载。
  • 准备好花费大量金钱购买硬件。更多的RAM和更快的磁盘将会帮助很多。
  • 当你需要将数据库或PHP从单个服务器拆分到多个服务器时,情况会变得更加困难,所以要尽可能地优化你的代码、数据库架构、服务器配置以及其他任何你可以想到的东西,以推迟这一最终步骤的发生。
除此之外,你所能做的就是压力测试你的网站,找出瓶颈所在并试图对它们进行设计。

1
同意,我只想补充说,当创建大型网站时,缓存可能是你应该做的第一件事。 - usoban
是的。确保MySQL的缓存功能设置良好,并为您的代码使用强大的缓存。其他答案中提到了几个非常优秀的缓存工具。 - Rik Heywood

4

请查看 PHP 创始人 Rasmus Lerdorf 的 这个演讲

尤其是第 8 页及之后的内容。


3

2
许多人提到了用于识别瓶颈的工具,这当然是必要的。如果不知道哪里变慢了,就不能花费有效的时间来加速。但你还需要知道的是目标可扩展性所在的位置。如果 HR 部门只有三个人使用你的网站,那么将花费几个月的时间使您的网站扩展到与 Twitter 相同数量的用户是否物有所值?产品的需求中是否有已知的交易速率、响应延迟或用户数量?如果有,请使用优化策略针对这些数字进行优化。如果没有,请在追逐性能时找到它们。

1

非常相似:正确使用 PHP 的方法是什么?

可扩展性不是一个小议题,肯定比单个问题所能合理涵盖的材料还要多。

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

Beanstalk 是高性能 PHP 站点中的另一个可扩展性和性能工具。而 memcache 则是不同类型的工具。


1
按重要性顺序:
  1. 如果您使用PHP,请使用类似APC的opcode缓存。(这一点已经足够重要,下一代PHP将内置该功能。)

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

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

  4. 使用HTTP加速器,例如Varnish。(这张图片说了一切-并且他们已经安装了一个HTTP加速器。)


1
可扩展性的最大问题通常是共享资源,比如数据库管理系统(DBMS)。问题的根源在于DBMS通常无法放松一致性保证。
如果你想在使用MySQL等工具时提高可扩展性,你需要改变模式设计来放松一致性。
举个例子,你可以将数据库模式分离,使得写操作使用规范化数据模型,而90%的读操作则使用冗余非规范化数据的只读部分。只读数据可以分布在多个服务器上。
另一种提高数据库可扩展性的方法是对数据进行分区,例如按部门将数据分离到不同的数据库中,然后在ORM或DBMS中进行汇总。

在ORM层聚合数据会引入应用程序级别的复杂性,这对于像Ruby和PHP这样的语言可能会很慢。此外,它更难管理。 - Abhishek Mehta

0

使用可靠的OOP技术开发您的网站。由于并非所有性能瓶颈一开始就显而易见,因此您需要使您的网站模块化。随时准备为了应对流量增加而重构您网站的部分内容。我写的第一句话将帮助您更轻松、更安全地完成这个过程。此外,采用测试驱动开发,因为重构可能引入新的错误,而良好的TDD可以在它们进入生产之前发现这些错误。
尽可能将客户端代码与服务器端代码分离,因为它们很可能来自不同的服务器,如果您的网站流量足够大的话。
阅读相关文章(例如阅读YSlow提示)。

祝您好运!


0
除了其他建议之外,还要研究将您的网站分层,例如多层架构。如果做得正确,您可以为每个层使用一个服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接