集中队列的模式

集中队列的模式

在阅读本文前,假设您对数据结构有一定认识.集中队列的模式是基本松耦合思想实现用户从界面提交命令请求到后端服务异步处理的方式.这个模式是CQRS模式的子集.这个模式用于允许用户交互式处理更新,甚至在Web服务器运行慢下.这是一个异步模型,发送者不需要为一个响应而等待.有助于用户界面保持一致快速响应.

这种模式通常应用于Web应用程序通讯,Web层与服务层之间解耦.这种方法是简单,但有在分布式系统中很多挑战.其中一个挑战是所有服务调用必须在一个web请求完前完成.这个模型也需要服务的伸缩性与可用性满足或超过脆弱的第三方服务与web层. 任何不可以靠的或运行慢的服务层将会毁掉整个web层中的用户体验,同时对伸缩性有负面影响.

解决方案是异步通讯.Web层发送命令来服务层,在这儿命令是一个做某事的请求.例如,创建一个新帐户,增加图片,更新状态,下订单,取消订单.命令发出去是以一个消息存储于Queue之中.Queue是简单的数据结构,通常2个基本操作:add与remove.最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。

发送者不需要一个web用户界面.它可以是移动应用.例如,通用REST API通讯.也可以有多个发送者与接收者.

 
如上图,Web层增加消息到Queue.服务层从Queue上删除与处理消息.Queue为大量的命令消息提供了缓冲,web层的工作能快速减负,服务层也不容易超载.服务层花时间在有效资源下只处理新的消息.

接收者的编程模型 
1. 从Queue上获取下一个有效消息 
2. 处理消息

3. 从Queue上删除消息 
实现上是先dequeues消息, 然后删除消息. 为什么分两个阶段才删除呢?这是确保至少一次处理

下面让我们再来看张图,Queued Message Handler示意图:

关于长时间处理任务

一些Queue服务支持在Queue上更新消息.为了实现多个步骤处理,每个步骤完成,它能顺便更新Queue中消息并标识它的最后完成一步.一个简单的例子,你能设计消息对象时可包含一个LastCompletedStep字段,你的应用程序能用它来追踪进度.如果进程被打断,更新LastCompletedStep字段的消息将在dequeued时返回; 消息处理能恢复LastCompletedStep相当于从新开始.

在对伸缩性要求高的情况下,Queue自己能变成瓶颈,这时需要多个Queue的实例,这不需要更改核心的模式.

总结 
这个模式用于你的应用程序各层之前的解耦,特别是web(用户界面)层与做业务处理的服务层.它不适用于路由,只读页面请求的场景下.通讯是单向的,从web层到服务层,方便增加消息到Queue中.云服务中Queue是简化实现的.一个解耦的web层更加具有响应性与可靠性,提升用户体验.关注独立伸缩性,也允许每个层以理想的调配各层的资源.

作者:Petter Liu 
出处:http://www.cnblogs.com/wintersun/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 
该文章也同时发布在我的独立博客中-Petter Liu Blog

分类: DesignPatternsDistributedDev

绿色通道: 好文要顶 关注我 收藏该文与我联系 

PetterLiu
关注 - 1
粉丝 - 211

+加关注

0

0

(请您对文章做出评价)

«上一篇:命行下的查询与替换字符串
»下一篇:一周开发新闻

posted on 2013-05-22 20:14 PetterLiu 阅读(290) 评论(2) 编辑 收藏

Feedback

#1楼

2013-05-26 17:30 | ㄟ荖樹炪厊ㄖ

没看到如何更新Web界面的地方,是ajax刷新吗?

支持(0)反对(0)

回复引用

#2楼[楼主]

2013-05-27 19:04 | PETTERLIU

@ㄟ荖樹炪厊ㄖ
Web端可以有很多选择, 可以是Ajax. 也可以是其它RIA的方案.

支持(0)反对(0)

回复引用

时间: 2024-10-09 17:14:29

集中队列的模式的相关文章

学习ActiveMQ(二):点对点(队列)模式消息演示

一:介绍 点对点的消息发送方式主要建立在 消息(Message ),队列(Queue),发送者(Sender),消费者(receiver)上,Queue 存贮消息,Sender 发送消息,receive接收消息.具体点就是Sender Client通过Queue发送message ,而 receiver Client从Queue中接收消息.消息发送客户端与接收客户端没有时间上的依赖,发送客户端可以在任何时刻发送信息到Queue,而不需要知道接收客户端是不是在运行. 二:通过jms编码接口之间的关

rabbitmq 消息队列工作模式

ceilemter-zmq -----> rabbitmq队列去塞数据, 这些数据是有boss平台的bill来取,从而的到计费系统的支持. 具体操作 rabbitmq,消息队列 rabbitmq 单机不需要配置,安装OK就可以启动服务. 查看消息队列: #  rabbitmqctl list_queues Listing queues ... notifications.billing   0   // ...done. 也可以用浏览器看消息队列 http://IP:15672 user=gue

快速入门系列--WCF--06并发限流、可靠会话和队列服务

这部分将介绍一些相对深入的知识点,包括通过并发限流来保证服务的可用性,通过可靠会话机制保证会话信息的可靠性,通过队列服务来解耦客户端和服务端,提高系统的可服务数量并可以起到削峰的作用,最后还会对之前的事务知识做一定补充. 对于WCF服务来说,其寄宿在一个资源有限的环境中,为了实现服务性能最大化,需要提高其吞吐量即服务的并发性.然而在不进行流量控制的情况下,并发量过多,会使整个服务由于资源耗尽而崩溃.因此为相对平衡的并发数和系统可用性,需要设计一个闸门(Throttling)控制并发的数量. 由于

Rabbitmq 相关介绍之单机镜像模式集群配置

一.镜像模式集群简介 如果RabbitMQ集群只有一个broker节点,那么该节点的失效将导致整个服务临时性的不可用,并且可能会导致message的丢失(尤其是在非持久化message存储于非持久化queue中的时候).当然可以将所有的publish的message都设置为持久化的,并且使用持久化的queue,但是这样仍然无法避免由于缓存导致的问题:因为message在发送之后和被写入磁盘并执行fsync之间存在一个虽然短暂但是会产生问题的时间窗.通过publisher的confirm机制能够确

【死磕Java并发】-----J.U.C之阻塞队列:SynchronousQueue

[注]:SynchronousQueue实现算法看的晕乎乎的,写了好久才写完,如果当中有什么错误之处,忘各位指正 作为BlockingQueue中的一员,SynchronousQueue与其他BlockingQueue有着不同特性: 没有容量.与其他BlockingQueue不同,是一个不存储元素的BlockingQueue.每一个put操作必须要等待一个take操作,否则不能继续添加元素,反之亦然. 因为没有容量,所以对应 peek, contains, clear, isEmpty - 等方

忙信号模式介绍

在阅读本文前,您需要了解云计算与互联网开发基础知识.[忙信号模式]是专注应用程序对当云服务请求响应不成功时忙信号如何处理.这种模式从客户端角度出发,这里主要描述的云计算中场景.客户端是每发出请求到服务端,服务端答复忙信号.客户端负责根据忙信号做出适当数量的重试次数处理.如果重试过程中继续收到忙信号,客户端将该服务视为不可用.我们偶尔地拨号电话结果是忙信号,正常的反应需要重拨,这时通常会导致能成功建立通话. 同样,偶尔会调用服务结果被返回失败代码,表明云服务目前不能够满足该请求.需要重试,在服务端

CDN模式介绍

CDN(content delivery network 或 content distribution network)模式专注于通过全球分布式缓存架构为经常访问的文件减少网络访问时的延迟.目标是加快交付应用程序内容给用户.内容是任何可以存储在一个文件,如图像. 视频和文档.内容交付网络 (CDN) 是一种全球分布式缓存的服务.CDN 在世界各地的许多地方保存了应用程序文件的副本.当用户访问时,会选择离这些地方接近结点,内容不需要走长距离网络来传递,所以它能访问到达速度更快,以此来改善用户体验.

互联网业务场景下消息队列架构

消息队列作为一种基础的抽象数据结构,被广泛应用在各类编程与系统设计中. 同步VS异步 通信的一个基本问题是:发出去的消息什么时候需要被接收到?这个问题引出了两个基础概念:"同步通信"和"异步通信".根据理论抽象模型,同步通信和异步通信最本质的差别来自于时钟机制的有无.同步通信的双方需要一个校准的时钟,异步通信的双方不需要时钟.现实的情况是,没有完全校准的时钟,所以没有绝对的同步通信.同样,绝对异步通信意味着无法控制一个发出去的消息被接收到的时间点,无期限的等待一个消

ActiveMQ消息队列介绍(转)

ActiveMQ是一个开源兼容Java Message Service (JMS) 1.1面向消息的中件间. 来自Apache Software Foundation. ActiveMQ提供松耦合的应用程序架构. 先来看两个应用通过RPC通讯的紧耦合: 通过面向消息的中件间, 架构演变为: 我们看到应用程序1发送message到中件间, 应用程序2从中件间接收message. ActiveMQ提供了灵活的应用程序架构. ActiveMQ消息存储也是FIFO: 什么时候使用ActiveMQ: 1.