编写可扩展网站的技术

Posted

技术标签:

【中文标题】编写可扩展网站的技术【英文标题】:Techniques for writing a scalable website 【发布时间】:2010-11-10 03:01:39 【问题描述】:

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

【问题讨论】:

【参考方案1】:
    在高负载下测试您的网站。 监控所有统计数据 找到瓶颈 修复瓶颈 回到1

祝你好运

【讨论】:

【参考方案2】:

您可能想查看此资源-highscalability.com。

【讨论】:

【参考方案3】:

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

GL

【讨论】:

【参考方案4】:

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

特别是第 8 页及以后。

【讨论】:

【参考方案5】:

如果您希望您的网站能够扩展至超出单台服务器的能力,则需要仔细规划。设计使以下内容成为可能:-

使您的数据库可以位于单独的服务器上。这通常不会太难。 确保您的所有静态内容都可以移动到 CDN,因为这通常会减轻您的服务器的大量负载。 准备好在硬件上花很多钱。更多 RAM 和更快的磁盘有很大帮助。 当您需要将数据库或 php 从单个服务器拆分到多个服务器时,这会变得更加困难,因此请优化所有内容,包括代码、数据库架构、服务器配置以及您能想到的任何其他内容尽可能拖延最后一步。

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

【讨论】:

同意,我只想补充一点,缓存可能是您在创建大型网站时应该做的第一件事。 是的。确保 mysql 的缓存功能设置良好,并为您的代码使用强大的缓存。其他答案中提到的几个都很好。【参考方案6】:

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

可扩展性不是一个小问题,而且肯定比一个问题所能合理涵盖的内容更多。

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

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

【讨论】:

【参考方案7】:

按重要性排序:

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

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

    确保您的 Web 服务器为静态内容(图像、javascript、CSS)发送正确的 Expires 标头,以便浏览器可以正确缓存它。 (YSlow 也会就此发出警告。)

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

【讨论】:

【参考方案8】:

许多人提到了用于识别瓶颈的工具,这当然是必要的。你不能在不知道哪里慢的情况下花时间加快速度。但是您需要知道的另一件事是您的目标可扩展性在哪里。如果 HR 部门的三个人都在使用它,那么花几个月的时间让你的网站扩展到与 Twitter 相同的用户数量是否物有所值?在产品需求中,您是否有已知的事务率、响应延迟或用户数量?如果是这样,请使用您的优化策略来定位这些数字。如果没有,找出那些,然后再将性能老鼠赶下洞。

【讨论】:

【参考方案9】:

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

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

例如,您可以分离您的数据库架构,让您的规范化数据模型用于写入,并为 90% 的读取操作提供一个复制的只读非规范化部分。只读数据可以分布在多个服务器上。

提高数据库可扩展性的另一种方法是对数据进行分区,例如将数据分离到每个部门的数据库中,然后在 ORM 或 DBMS 中聚合它们。

【讨论】:

在 ORM 层聚合数据引入了应用程序级别的复杂性,这对于 Ruby 和 PHP 等语言可能会很慢。另外,它更难管理。【参考方案10】:

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

【讨论】:

以上是关于编写可扩展网站的技术的主要内容,如果未能解决你的问题,请参考以下文章

《大型网站技术架构》--第七章:网站的可扩展架构

大型网站技术架构--网站的可扩展性架构(转)

网站的可扩展架构

可扩展,低开销,高性能的Java持久性框架

软件架构设计学习总结(13):大型网站技术架构网站的可扩展性架构

大型网站技术架构-核心原理与案例分析-阅读笔记3