如何设计可扩展应用程序?

时间:2009-05-25 16:05:43

标签: architecture scalability

您如何设计/构建可扩展的应用程序?任何有助于理解如何扩展应用程序的书籍或网站的建议?

由于

9 个答案:

答案 0 :(得分:46)

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

BTW,可伸缩性不是性能。完全可扩展的系统是具有固定边际成本以添加额外用户或容量的系统。

答案 1 :(得分:4)

  • 我倾向于认为可扩展性与可维护性密切相关。而且似乎经常被忽视的是,人们只花了很短的时间开发应用程序,剩下的时间维护

  • 此外,扩展几乎肯定与数据有关(比代码更灵活 - 因此您希望拥有越来越多的数据),这就是为什么您的存储访问成本应该保持在O(1)之间的原因和O(n)

  • 完全可扩展的应用程序是我可以从环境复制到另一个(类似的)环境,配置一些值并运行它来扩展整个应用程序的执行领域。

    < / LI>

答案 2 :(得分:4)

这是对livejournal的一个很好的阅读,以及他们如何随着时间推移缩放他们的应用程序。

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

这可能不是你想要的那种东西,但它是更好的“这就是我们所做的以及为什么”对缩放的概述。

答案 3 :(得分:3)

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

  • 尽可能少写代码

  • 尽可能重用代码

  • 不要覆盖或抽象设计

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

答案 4 :(得分:1)

在开始使用技术之前,您应该知道应用程序范围很冷。客户/业务部门在性能方面的期望是什么,以及失败的关键领域是什么?斯科特汉塞尔曼在这个问题上有一个很棒的podcast

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

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

答案 5 :(得分:1)

无论您做什么,您都无法从一开始就设计系统,以满足您的所有需求。通常,一旦您的系统运行,您将发现最不期望它们的瓶颈(即:本地网络带宽)。无论如何,我的建议肯定是highscalability.com :))

答案 6 :(得分:0)

我会建议这本书:

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书籍,但任何网络堆栈的想法都是一样的。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

这是一个很好的介绍主题: IBM developerWorks提供了一些关于为可扩展的应用程序使用体系结构模式的有趣教程:here here