网友最喜欢的十大软件架构和可伸缩性设计

My 10 favorite links on Software architecture, scalability and design
http://www.keksrolle.de/index.php?/archives/140-My-10-favorite-links-on-Software-architecture,-scalability-and-design.html

1. Force.com’s Multi-Tenant Architecture(对租户架构):
Force.com是一个优秀的按需应用开发平台使用,支持数以万计的组织。个别企业和商业软件作为服务( SaaS )供应商信任的平台,以提供稳定,可靠,互联网规模应用。为了满足需求,其极端庞大的用户人口, Force.com的基金会是一个元数据驱动的软件架构,使多租户应用。其白皮书阐述了专利技术,使Force.com平台,快速,可扩展和安全的任何类型的应用程序。
http://wiki.developerforce.com/index.php/Multi_Tenant_Architecture

视频讲解英文:
http://www.infoq.com/presentations/SalesForce-Multi-Tenant-Architecture-Craig-Weissman

2.Dan Pritchett on Architecture at eBay (Video)
其中谈到了 EBay .com doesn't use transactions EBAY不使用事务。划分数据库,区分重要的和不重要的,ebay是倡导到处异步的,事务和异步有矛盾之处,具体谈话见(有文字):
http://www.infoq.com/interviews/dan-pritchett-ebay-architecture

3.Orbitz.com Architecture with Brian Zimmer
一开始他们也使用big thread pool来处理高并发,不成功后,然后转移到使用Java NIO实现异步http。他们的request-response relationship a和 concurrency relationship并没有建立在Java的线程上(传统的J2EE机制),见文字谈话:
http://www.infoq.com/interviews/Architecture-Brian-Zimmer

4. Scalability Principles可伸缩性原理
首先是减少处理时间: Collocation(搭配即用即取) Caching Pooling Parallelization Partitioning Remoting

第二点是Partition,正如ebay倡导Partition Everything,不要把所有数据放在一个共享数据库中,可以使用类似Restful方式,从客户端开始进行应用状态分区。

第三点Scalability is about concurrency, 伸缩性是有关并发的,如果你需要一个锁或事务(e.g. local objects, database objects, etc), 请尽可能以更少时间处理,If you do need to hold locks (e.g. local objects, database objects, etc), try to hold them for as little time as possible.

其他见文章:
http://www.infoq.com/articles/scalability-principles

5.An Unorthodox Approach to Database Design : The Coming of the Shard
谈论了如何进行数据库的性能和伸缩性提高。
http://highscalability.com/unorthodox-approach-database-design-coming-shard

6.Domain Driven Design and Development In Practice领域驱动设计开发和实践
从建模 项目管理 代码实现,框架 等等各个方面论述了DDD在实践中应用。本站有大量Evans DDD讨论。
http://www.infoq.com/articles/ddd-in-practice
中文:
http://www.infoq.com/cn/articles/ddd-in-practice
本站讨论:
http://www.jdon.com/article/35600.html

[该贴被admin于2009-07-31 14:27修改过]

7.The Challenges of Latency延迟的挑战
零延迟是不存在的,不要以为分布式系统就能实现零延迟,不能消灭逃避,只能面对,通过引入异步来积极容忍延迟存在,这就象大禹治水,堵疏结合。

异步架构是将确定的响应转换为不确定的响应,很多人不适应,从应用业务中移除确定的request/response请求即时响应,是引入异步架构的关键。

您可以您的应用程序分解成一个收集松散耦合组件;使用异步接口实现您的服务。

分离数据库是一个坏主意,分离数据比分离应用更加复杂,Splitting data is more complex than splitting applications. 但是分离应用必须在系统开始就设计好,比如引入Restful(banQ私语)。

切分数据Partitioning data带来的是事务机制,这就需要分布式两段事务2PC,分布式事务的问题是他们创造了在多个数据库之间的同步耦合,同步耦合是延迟容忍设计的敌人。The problem with distributed transactions is they create synchronous couplings across the databases. Synchronous couplings are the antithesis of latency tolerant designs.

替代ACID事务机制,有几个办法BASE:
Basically Available(基本可用)
Soft state
Eventually consistent
取每个名词第一个大写字母就是BASE架构。 CAP 原理可以决定哪些数据需要ACID事务,哪些可以划分,

http://www.infoq.com/articles/pritchett-latency

第8和第9都是linkedin网站的架构
本站也有讨论,
http://www.jdon.com/jivejdon/thread/34214.html

PPT演示基于Java和敏捷的大型通讯架构:http://www.slideshare.net/linkedin/linkedins-communication-architecture
http://www.slideshare.net/linkedin/linked-in-javaone-2008-tech-session-comm

第十个是JAX TV: Java-Programmierung im Multicore-Zeitalter
不是英语,没看明白 ,大概是谈Java多核并发编程模型的
http://it-republik.de/jaxenter/news/JAX-TV-Java-Programmierung-im-Multicore-Zeitalter-047030.html
[该贴被banq于2009-07-31 14:22修改过]