您如何重写/重新编码网站以使其具有可扩展性? [关闭]

Posted

技术标签:

【中文标题】您如何重写/重新编码网站以使其具有可扩展性? [关闭]【英文标题】:How do you rewrite/recode a website to be scalable? [closed] 【发布时间】:2011-01-22 09:30:01 【问题描述】:

您如何重写网站以使其具有可扩展性?(流量)我主要使用 php 和一些 Ruby on rails 工作,我知道这是一个通用问题。我只是想增加我的知识,所以任何建议都会很有用。

提前谢谢你;-)

【问题讨论】:

您可能需要更明确地定义“可扩展”:您的意思是指流量(每秒点击次数)、数据(用户/项目/页面数)、区域设置(考虑到应用程序和基础设施要求)等... 我觉得这个问题太笼统了,不能良心回答。 投票结束。 “很难说这里问的是什么。这个问题是模棱两可的、含糊的或修辞的,不能以目前的形式合理地回答。” 保持开放,但回答主题以供进一步研究。如果您不知道从哪里开始编写大型应用程序,这是一个合理的问题。 这不是一个真正的问答类型的帖子。我建议四处搜索——那里有很多讨论扩展的资源。例如,查看 highscalability.com。 【参考方案1】:

这是一个相当广泛的问题,很难给你一个明确的答案——但有几个想法:

首先,不要预优化! 确保您的应用程序正常工作;这是最重要的。 而且,只有在必要时才开始优化。 PHP 本身通常可以很好地扩展: 再添加几个 Apache+PHP 服务器,平衡您的用户的负载 这往往很容易工作 文件系统不能很好地/那么容易地扩展: 它不是跨服务器共享的 共享文件系统(例如使用 NFS) 有时会导致问题。 在扩展方面,数据库通常是最难的部分: 拥有多个“写入”服务器很难 拥有多个“读取”服务器(通常使用复制)可能会成为维护的难题 如果复制还不够,总有一天,您将不得不考虑分片。 使用大量缓存:可以使用的缓存越多,对数据库的查询就越少,它就会越好 memcached 非常棒,而且可扩展性很好:只需添加几台服务器,您的缓存集群就会获得更多 GB 或内存 使用反向代理,这样您的 Apache+PHP 服务器的工作量就会减少,这也很有帮助。

还有一些可能会给您一些想法的快速链接:

Database Sharding at Netlog, with mysql and PHP Scaling WikiPedia with LAMP: 7 billion page views per month

【讨论】:

+1 - 所有这些主题都值得单独讨论,但这是一个起点。【参考方案2】:

一个提示 - 使用 memcached 或等效方法缓存数据,而不是直接查询数据库。

此外,扩展最困难的部分是超越单个 Web 服务器。一旦您可以扩展到两个 Web 服务器,您应该不会遇到太多问题。

【讨论】:

这假定数据库是一个问题。 同意,您需要衡量性能以了解您的瓶颈所在。但话虽如此,随着您的应用程序不断扩大规模,数据库几乎肯定会在某个时候成为问题。【参考方案3】:

买一个 PHP 加速器,你肯定会有明显的性能提升,Wikipedia 有一个不错的列表可供选择。正如 Justin 所说,获得 memcached,这太棒了。

【讨论】:

【参考方案4】:

“规模”不是一种普遍的、具体的现象,而是在一组特定标准下对性能和能力的相对衡量。因此,您需要一组标准和一些指标,才能使这次对话具有任何意义。

我发现Apdex 是一种非常有用的机制,可以用来思考和推理所需的指标:

Apdex(应用程序性能指数) 是一个开放的标准,由 公司联盟定义了一个 标准化报告方法, 基准测试和跟踪应用程序 性能。

像 Apdex 索引这样的系统的美妙之处在于,它与用户对令人满意的应用程序响应能力的看法直接相关。在任何关于规模和性能的讨论中,这些都是唯一真正重要的事情。

因此,例如,在以这种方式考虑您的系统时,您需要确定满足用户对响应能力的期望所需的响应率,估计您需要支持的流量水平,然后增加容量以满足您的目标.

【讨论】:

以上是关于您如何重写/重新编码网站以使其具有可扩展性? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何重写这个嵌套的 SQL 查询以使其更快? [关闭]

如何在特定时间自动重新加载网页?

如何重新采样 DataFrame 以使其与另一个 DataFrame 正确对齐?

重写以下 SQL 查询以使其更高效/改进其执行及其原因

重写有状态代码以使其更干

实际上,如何设置 Amazon AWS 以使其自动扩展?