8个常用于可扩展系统的设计模式

Ricky Ho 在文章 Scalable System Design Patterns 中列举了一系列构建可扩展系统的优秀实践,以下是对这些优秀实践模式的一个摘要:

1,负载均衡
– 把一个请求按一定hash算法或规则分配到服务器组中的一台去处理,以分担单个服务器的压力。这一般多见于大型网站的构架。

2,分头收集(Scatter and Gather) –  把一个请求分解成好几个服务请求分发到多个server上,每个server处理后返回的结果会被合并成一个返回结果给请求端。 常见于搜索引擎如google,百度,搜狗,对一个关键词的搜索结果是由多台server处理并合并成一个搜索结果页。
3,结果缓存 – 服务器缓存某个请求的结果,下次对同样的请求只返回缓存的结果就ok了,而避免下次同样的请求进来时去做重复的计算。Memcached就是做这个用的。

4,空间共享 – 分布式计算常用的模式,所有的数据、对象都放在一个共享虚拟空间,所有的计算进程共享并控制这些数据。


5,管道过滤
– 所有的请求都先进入某个管道,然后以先进先出的方式接受处理和返回结果。有点似曾经写的投票,推荐这样的应用时的处理方式。

6,MapReduce –  在处理批量任务时,如果磁盘I / O是主要瓶颈,则一般采取这种模式。它的使用分布式的文件系统,从而使多个I/O操作能够并行。这种模式在谷歌的内部应用程序中使用的较多,开源的Hadoop就是个典型案例

7,批量同步并行 –  该模式下的所有任务是基于锁步执行,由Master来协调。每个任务重复以下步骤,直到再没有活跃的任务。
每个任务从输入队列中读取数据
每个任务根据自己读取到的数据进行处理
每个任务将自己的处理结果直接返回

8,Execution Orchestrator – 该模型是基于一个智能调度的任务分配,还没太弄明白。

添加评论

  1. Yi Wang回复 2010-12-07 18:05

    6(MapReduce)不就是1(sharding), 2(shuffling), 4(gfs), 7(streaming in workers)的整合吗?