如何设计可扩展的应用程序? [关闭]

Posted

技术标签:

【中文标题】如何设计可扩展的应用程序? [关闭]【英文标题】:How to design scalable applications? [closed] 【发布时间】:2010-10-28 18:43:54 【问题描述】:

您如何设计/构建可扩展的应用程序?有什么书籍或网站可以帮助理解如何扩展应用程序?

谢谢

【问题讨论】:

【参考方案1】:

我会为此推荐这本书:

http://www.amazon.com/Scalable-Internet-Architectures-Developers-Library/dp/067232699X/ref=sr_1_1?ie=UTF8&s=books&qid=1243267630&sr=8-1

尽管这主要是一本 php 书籍,但其思想对于任何 Web 堆栈都是相同的。

【讨论】:

我同意,尽管我不会将其描述为一本 PHP 书籍。它有 Perl、Oracle PL/SQL 和其他语言的重要示例,还有很多高级材料,例如第 5 章负载均衡(无代码示例)和第 6 章静态内容服务(一个小的 PHP sn -p)。我看到的一个批评是,他过于关注 Johns Hopkins Spread 库,但高可扩展性社区的所有人都对它赞不绝口。【参考方案2】:

在开始使用技术之前,您应该知道应用范围非常冷。客户/业务部门在性能方面的期望是什么,失败的关键领域是什么? Scott Hanselman 对这个主题有很好的podcast。

提供的一些花絮:除非必须,否则不要使用缓存;提供文件比从数据库中组装片段要快;知道如何处理偷看服务器时间;知道你的高峰会是什么。

同样,首先要了解使用范围,以便了解您是否应该扩展。

【讨论】:

【参考方案3】:

This 正是您所需要的!应用程序架构指南由 Microsoft 模式和实践团队创建,旨在帮助架构师...

【讨论】:

【参考方案4】:

在过去的一年中,我不得不为我公司正在进行的一个项目快速解决这个问题,我发现这些资源非常有用:Todd Hoff 的highscalability.com; Scalable Internet Architectures,作者:Theo Schlossnagle;和 Building Scalable Web Sites,作者是 Cal Henderson。 Highscalability.com 尤其会为您指出许多好的演示文稿、教程、书籍和论文,是一个很好的起点。所有建议都是实用的,并且基于 Flickr、Twitter 和 Google 等网站的经验。

顺便说一句,可扩展性不是性能。一个完全可扩展的系统是一个具有固定边际成本来增加额外用户或容量的系统。

【讨论】:

你指出的资源很好! 来自 twitter 的可扩展性建议,一定很好 .. ;) 哈,我想我可以选择一个更好的例子! ;-) 但是 Twitter 必须努力克服成长的痛苦。见highscalability.com/…。 查看这篇文章 Web Speed Google Search Rankings 和 this SO 帖子 好资源。【参考方案5】:

这是一个很好的主题介绍: IBM developerWorks 提供了一些关于将架构模式用于可扩展的应用程序的有趣教程:here 和 here。

【讨论】:

【参考方案6】:

我倾向于认为可伸缩性与可维护性密切相关。而且似乎经常被忽视的是,人们只花很短的时间开发应用程序,其余时间维护它。

此外,扩展几乎肯定与数据有关(它比代码更敏捷 - 所以您希望拥有越来越多的数据),这就是为什么您的存储访问成本应该保持在 O(1) 和 @ 987654322@.

对我来说,可完美扩展的应用程序是我可以从一个环境复制到另一个(类似)环境、配置一些值并运行它以扩展整个应用程序的执行范围的应用程序。

【讨论】:

【参考方案7】:

这里已经发布了一些很棒的答案。在一些书籍和链接中,您会发现一些常见的思维模式。

尽量少写代码

尽可能重用代码

不要过度或抽象您的设计

将事物分解为可在单独或多个系统上运行的模块化区域。繁重的处理应该留给单独的系统。

【讨论】:

【参考方案8】:

这是一篇关于 livejournal 以及他们如何随着时间推移扩展应用程序的精彩读物。

danga.com/words/2004_mysqlcon/mysql-slides.pdf[PDF]

它可能不是您要寻找的东西,但它是关于缩放的更好的“这就是我们所做的以及为什么”概述之一。

【讨论】:

+1 这将遍历从一台机器开始到将大型站点分片到用户集群的整个过程。他们 2007 年的演讲在这里:scribd.com/doc/39892/… 2007 年演示文稿的更长版本:danga.com/words/2007_04_linuxfest_nw/linuxfest.pdfver【参考方案9】:

无论您做什么,您都无法从一开始就将系统设计为可扩展以满足您的所有需求。通常,一旦您的系统运行起来,您就会在最不期望的地方发现瓶颈(即:本地网络带宽)。无论如何,我的建议也绝对是 highscalability.com :)

【讨论】:

以上是关于如何设计可扩展的应用程序? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在多租户应用程序的业务层中为可扩展的数据库结构设计实体?

浅谈一下可扩展性网站架构设计

java程序设计原则知多少

如何在网格列标题上获取可扩展按钮

三软件设计原则

设计模式六大原则:开闭原则