【发布时间】:2010-10-28 18:43:54
【问题描述】:
您如何设计/构建可扩展的应用程序?有什么书籍或网站可以帮助理解如何扩展应用程序?
谢谢
【问题讨论】:
您如何设计/构建可扩展的应用程序?有什么书籍或网站可以帮助理解如何扩展应用程序?
谢谢
【问题讨论】:
我会为此推荐这本书:
尽管这主要是一本 PHP 书籍,但其思想对于任何 Web 堆栈都是相同的。
【讨论】:
在开始使用技术之前,您应该知道应用范围非常冷。客户/业务部门在性能方面的期望是什么,失败的关键领域是什么? Scott Hanselman 对这个主题有很好的podcast。
提供的一些花絮:除非必须,否则不要使用缓存;提供文件比从数据库中组装片段要快;知道如何处理偷看服务器时间;知道你的高峰会是什么。
同样,首先要了解使用范围,以便了解您是否应该扩展。
【讨论】:
This 正是您所需要的!应用程序架构指南由 Microsoft 模式和实践团队创建,旨在帮助架构师...
【讨论】:
在过去的一年中,我不得不为我公司正在进行的一个项目快速解决这个问题,我发现这些资源非常有用:Todd Hoff 的highscalability.com; Scalable Internet Architectures,作者:Theo Schlossnagle;和 Building Scalable Web Sites,作者是 Cal Henderson。 Highscalability.com 尤其会为您指出许多好的演示文稿、教程、书籍和论文,是一个很好的起点。所有建议都是实用的,并且基于 Flickr、Twitter 和 Google 等网站的经验。
顺便说一句,可扩展性不是性能。一个完全可扩展的系统是一个具有固定边际成本来增加额外用户或容量的系统。
【讨论】:
我倾向于认为可伸缩性与可维护性密切相关。而且似乎经常被忽视的是,人们只花很短的时间开发应用程序,其余时间维护它。
此外,扩展几乎肯定与数据有关(它比代码更敏捷 - 所以您希望拥有越来越多的数据),这就是为什么您的存储访问成本应该保持在 O(1) 和 @ 987654322@.
对我来说,可完美扩展的应用程序是我可以从一个环境复制到另一个(类似)环境、配置一些值并运行它以扩展整个应用程序的执行范围的应用程序。
【讨论】:
这里已经发布了一些很棒的答案。在一些书籍和链接中,您会发现一些常见的思维模式。
尽量少写代码
尽可能重用代码
不要过度或抽象您的设计
将事物分解为可在单独或多个系统上运行的模块化区域。繁重的处理应该留给单独的系统。
【讨论】:
这是一篇关于 livejournal 以及他们如何随着时间推移扩展应用程序的精彩读物。
danga.com/words/2004_mysqlcon/mysql-slides.pdf[PDF]
它可能不是您要寻找的东西,但它是关于缩放的更好的“这就是我们所做的以及为什么”概述之一。
【讨论】:
无论您做什么,您都无法从一开始就将系统设计为可扩展以满足您的所有需求。通常,一旦您的系统运行起来,您就会在最不期望的地方发现瓶颈(即:本地网络带宽)。无论如何,我的建议也绝对是 highscalability.com :)
【讨论】: