如何devise可扩展的应用程序?
你如何devise/构build一个可扩展的应用程序? 任何有助于了解如何扩大应用程序的书籍或网站build议?
谢谢
在过去的一年中,我不得不为这个问题加速解决我公司正在进行的一个项目,我发现这些资源非常有帮助:托德·霍夫(Todd Hoff)的highscalability.com ; 可升级的互联网架构 ,由Theo Schlossnagle提供; 和Cal Henderson的“ 构build可扩展网站” 。 Highscalability.com尤其会为您提供许多优秀的演讲,教程,书籍和论文,是一个开始的好地方。 所有的build议都是实用的,基于Flickr,Twitter和Google等网站的经验。
BTW,可扩展性不是性能。 一个完美可扩展的系统是一个固定的边际成本来增加额外的用户或容量。
这是livejournal上的一个不错的阅读,以及他们如何随着时间推移他们的应用程序。
danga.com/words/2004_mysqlcon/mysql-slides.pdf [PDF]
这可能不是你正在寻找的东西,但它是更好的“这是我们做的,为什么”关于缩放的概述。
这里已经有一些很好的答案了。 在一些书籍和链接中,你会发现一些常见的思维模式。
-
写尽可能less的代码
-
尽可能重用代码
-
不要结束,或者抽象你的devise
-
将事情分解成可以在单独或多个系统上运行的模块化区域。 重处理应该留给一个独立的系统。
-
我倾向于认为可伸缩性与可维护性密切相关。 人们似乎常常忽略了人们只花很短的时间来开发应用程序,而其余的时间都在维护它。
-
而且,扩展几乎可以肯定地处理数据(比代码更敏捷 – 所以你希望有越来越多的数据),这就是为什么你的存储访问成本应该保持在
O(1)
和O(n)
。 -
对于我来说,完全可扩展的应用程序是我可以从一个环境复制到另一个(类似)环境,configuration一些值并运行它来扩展整个应用程序的执行领域。
在你开始使用技术之前,你应该知道应用程序的范围是死的。 客户/业务部门在性能方面有什么期望?哪些是关键的失败领域? 斯科特·汉塞尔曼(Scott Hanselman)就这个问题有一个很棒的播客 。
一些花絮:不要使用caching,除非你必须; 提供文件比组装来自数据库的片段更快; 知道如何处理偷看服务器时间; 知道你的高峰将是什么。
再次,知道用法的范围,以便知道您是否应该缩放。
无论您做什么,您都无法从一开始就devise系统,以满足您的所有需求。 通常一旦你的系统运行,你会发现你最不期待的瓶颈(即:本地networking带宽)。 无论如何,我的build议是肯定highscalability.com以及:)
我会build议这本书:
尽pipe这主要是一本PHP书,但对于任何Web栈来说,这些想法都是一样的。
这正是你需要的! 应用程序体系结构指南由Microsoft Patterns and Practices团队创build,旨在帮助架构师…
这是对这个主题的一个很好的介绍:IBM developerWorks提供了一些关于使用体系结构模式的有趣教程,这些教程可以扩展: 在这里和这里 。