[服务器开发]可伸缩系统的设计模式(译)

Scalable System Design Patterns

可伸缩系统的设计模式

Ricky Ho在他的博客中分享了该文章,该文章是一个简单的概括分享,详细的可以参见他博客的其它详细文章。下面主要是意译。

1、Load Balancer:负载均衡 – 由分发者来决定哪个工作者处理下一个请求,这种决定可以基于不同的策略。

“In
this model, there is a dispatcher that determines which worker instance
will handle the request based on different policies. The application
should best be "stateless" so any worker instance can handle the
request.

This pattern is deployed in almost every medium to large web site setup.”

该模式中,由分发器来决定哪个工作者来处理请求。应用最好是无状态的,以使任何一个工作者都能同等处理请求。几乎所有的中大型网站都应用了负载均衡器这个模式。

2、Scatter and Gather:分散和聚合 – 分发者将请求广播到处理池当中的所有工作者。每一个工作者单独计算其中一部分并将结果返回给分发者,由分发者来汇总所有的计算结果并返回。

”In
this model, the dispatcher multicast the request to all workers of the
pool. Each worker will compute a local result and send it back to the
dispatcher, who will consolidate them into a single response and then
send back to the client.

This pattern is used in Search engines like Yahoo, Google to handle user's keyword search request ... etc.“

该模式中,分发者将请求转发给池中的所有工作者,每个工作者处理请求的一部分并返回给分发器,分发器工作者返回的结果加工组合为一个响应返回给客户端。该模式在搜索引擎中使用处理用户的关键字,如Yahoo、Google。

3、Result Cache:结果缓存 – 分发者会首先检查这个请求之前是否有处理过,并试图找出之前的处理结果并返回,以便节省处理时间。

“In
this model, the dispatcher will first lookup if the request has been
made before and try to find the previous result to return, in order to
save the actual execution.

This pattern is commonly used in large enterprise application. Memcached is a very commonly deployed cache server.”

该模式,只是在分发器处理时加了一步查询结果缓存(译注:类似浏览器缓存),如果之前已经处理过并且可以使用之前的缓存,就返回之前的处理结果节省处理时间!该模式通常使用在大型企业应用。Memcached就是一个常用的cache服务器。

4、Shared Space:共享空间 – 所有的工作者都关注一块共享区域内的信息,并且都向这块区域提交自己的部分知识、信息。信息不断被完善,直到问题可以被解决为止。

“This
model also known as "Blackboard"; all workers monitors information from
the shared space and contributes partial knowledge back to the
blackboard. The information is continuously enriched until a solution is
reached.

This pattern is used in JavaSpace and also commercial product GigaSpace.”

这个模式也叫“黑板模式”。就是在处理流程中,存在一个全局传递的对象,它可能包含了请求参数、中间状态、响应结果等各种信息,供流程中的各个组件对其进行操作。该模式在JavaSpace(译注:JavaSpaces技术是进行分布式计算的一种简单机制)和GigaSpace(译注:是一个虚拟化的中间件层)中都有使用。

5、Pipe and Filter:管道和过滤器 – 所有的工作者按照数据处理的流程被串行连接起来。

“This model is also known as "Data Flow Programming"; all workers connected by pipes where data is flow across.

This pattern is a very common EAI pattern.”

这个模式也叫“面向数据流编程”,是很通用的企业集成模式。

6、Map Reduce:专门用于磁盘IO为瓶颈的批处理作业。使用分布式的文件系统使得文件能够被并行处理。

“The
model is targeting batch jobs where disk I/O is the major bottleneck.
It use a distributed file system so that disk I/O can be done in
parallel.

This pattern is used in many of Google's internal application, as well as implemented in open source Hadoopparallel processing framework. I also find this pattern can be used in many many application design scenarios.”

这个模式使用分布式文件系统,这样磁盘可以并行I/O。Google内部许多应用程序使用了这个模式。Hadoop就是基于MapReduce的一个实现。

 

7、Bulk Synchronous Parellel:批量同步并行 – 所有工作者一个接一个的执行,由主控来进行协调。

“This
model is based on lock-step execution across all workers, coordinated
by a master. Each worker repeat the following steps until the exit
condition is reached, when there is no more active workers.

1)        Each worker read data from input queue

2)        Each worker perform local processing based on the read data

3)        Each worker push local result along its direct connection

This pattern has been used in Google's Pregel graph processing model as well as the Apache Hama project.”

该模型基于一个master协调,所有的worker同步(lock-step)执行。

该模式被用于Google Pregel Graph Processing  google-pregel-graph-processingHama

8、Execution Orchestrator:执行集中管理 – 一个智能的调度者在一群简单的工作者上调配已经准备好运行的任务(基于依赖图)

“This
model is based on an intelligent scheduler / orchestrator to schedule
ready-to-run tasks (based on a dependency graph) across a clusters of
dumb workers.

This pattern is used in Microsoft's Dryad project

该模式基于一个智能调度者/管理者在一群工作者之间调配可运行任务。该模式在微软的:Microsoft’s Dryad project中使用。

时间: 2024-08-22 14:19:57

[服务器开发]可伸缩系统的设计模式(译)的相关文章

可伸缩系统的架构经验

可伸缩系统的架构经验 Feb 27th, 2013 | Comments 最近,阅读了Will Larson的文章Introduction to Architecting System for Scale,感觉很有价值.作者分享了他在Yahoo!与Digg收获的设计可伸缩系统的架构经验.在我过往的架构经验中,由于主要参与开发企业软件系统,这种面向企业内部的软件系统通常不会有太大的负载量,太多的并发量,因而对于系统的可伸缩性考虑较少.大体而言,只要在系统部署上考虑集群以及负载均衡即可.本文给了我很

使用ExtJs开发MIS系统(1):基于ExtJs的MIS构架设计

本系列主要包括以下内容: 基于ExtJs的MIS构架设计. Js的动态加载. 使用数据库保存客户端状态. 轮询和无状态设计. 使用Action抽象客户端操作. 客户端MVC. 最后,如果还有精力的话,再写一些ExtJs性能方面的心得. 本文中的例子.代码等来源于真实的的项目,所以恕不能提供完整的代码下载,但会尽量详细的阐述设计思路,并给出关键的代码片段. 欢迎大家交流和指教. 2,客户端的"致富"之路 在SilverLight.Flex等富客户端框架出现以前,系统中通常由服务器负责Ht

使用ExtJs开发MIS系统(7):ExtJs性能浅析

在使用ExtJs过程中,性能一直是一个比较头疼的问题,从用户的角度来看,就一个字:慢.从技术的角度来说,这个"慢"字可以分为两种,加载"慢"和渲染"慢".想分辨这两种情况很容易:如果居于网不慢而互联网上慢,说明是加载慢:如果Chrome不慢而IE慢,就是渲染慢.还有另一种情况:越用越慢,这个"慢"通常是内存泄露造成的. 针对以下这三种情况讨论一下解决方案: 1,加载慢 1.1 减少要加载的东西 不要动不动就ext-all.js

使用ExtJs开发MIS系统(4):轮询

众所周知,Http是无状态的,每次请求结束后,客户端都会和服务器端断开连接.请求总是从客户端发起的,除非客户端发起请求,否则服务器端没有办法主动地向客户端传递任何数据.然而对于MIS,常常需要从服务器端推送数据给客户端,例如当用户提交了一个新的申请后,需要管理员去审批.解决办法就是客户端"锲而不舍"的询问服务器,是否有新的事情要做,也就是所谓轮询技术. 轮询的过程可以用下面这个图来描述: 开发MIS系统(4):轮询-"> 我们仍然以用户登录为例,先来看轮询的过程: 每一

使用ExtJs开发MIS系统(3):使用数据库保存客户端状态

我们都知道,Vs.Net这样的工具每次打开时都会记住我们上次关闭时的状态:各个窗口的位置.大小:工具栏状态:自定义菜单项等.这无疑是一个使用的功能.ExtJs也包含提供了状态保存机制,其主要的控件:GirdPanel,FormPanel等,都提供了状态保存的功能.我们需要的仅仅是为其提供适当的Provider. 1,客户端状态的保存 我们先来看一下当一个ExtJs中的控件状态改变时,持久化该控件状态的流程: 开发MIS系统(3):使用数据库保存客户端状态-"> 流程中的前两步(红色)是控件

服务器和应用系统迁移方案

服务器和应用系统迁移方案 一.迁移方案总体思路 新旧系统的迁移是一个整体系统工程.迁移必须保证用户系统建设的相关要求,在迁移过程中,我们需要重点考虑几个问题: 1.数据迁移如何保障"业务中断停机时间".业务中断对用用户无论是生产环境还是测试环境均存在较大的恢复风险,这样的风险特别是对于时间敏感型数据还是对于数据完整性业务都是不可以接受的.我们基于这样的要求,考虑到如何将停机时间最小,能否实现0停机的建设目标? i. 对于服务器操作系统而言,我们可以采用P2V的方式,利用操作系统的Vol

写给那些傻傻的,想做服务器开发的应届生

前言 猿题库刚刚结束了北京地区的大规模校园招聘,国庆之后打算转战外地进行校招.我本人深度参与了此次的校招工作,包括笔试题命题.面试题命题以及具体的面试工作. 我在面试中发现了一个非常有意思的现象,就是大多数应届生都想做服务器端开发,但是他们却又不清楚服务器端开发具体要做些什么. 我和同事聊天的时候说起此事,我们认为可能应届生觉得:做服务器端开发可以让自己写的程序运行在很多台机器上,并且处理海量的数据,这很「牛逼」.而做客户端或前端开发太简单,成长会比较小. 于是我就写了本文,想给这些单纯的应届生

Android开发中的MVC设计模式浅析_Android

Android开发中的MVC设计模式的理解 1. Android系统中分层的理解: (1).在Android的软件开发工作中,应用程序的开发人员主要是应用Android Application Framework层封装好的Api进行快速开发. (2).在Android框架的四个层次中,下层为上层服务,上层需要下层的支持,上层需要调用下层的服务. (3).这种分层的方式带来极大的稳定性.灵活性和可扩展性,使得不同层的开发人员可以按照规范专心特定层的开发. (4). Android的官方建议应用程序

ios4年 想学习java linux服务器开发 请教一下学习步骤

问题描述 我因为主体是做ios开发近期想学学javalinux服务器开发不想学什么html之类的我就是想学习服务器什么postget方法以及调用数据库之类的请问我应该从哪里学起应该看些什么东西?是不是得租一个linxu服务器阿里云的按流量收费的服务器我来学习可以吗?请大家推荐个教程吧 解决方案 解决方案二:建议还是自己买个小本装linux吧,阿里云那个只是用来一个人学习的话,不划算解决方案三:虚拟机装个linux不就行了,红帽和乌班图都不错啊,而且都有图形化界面.再说,java和操作系统有什么关