1 MQS简介
消息队列服务(Message Queue Service,简称MQS),是阿里云推出的分布式消息中间件服务。
MQS旨在提供可靠、海量、高并发的分布式消息队列服务,从而帮助应用开发者实现应用之间以及应用内部各组件之间的消息传递,解耦系统之间的依赖。
2 MQS功能特点
消息队列最早出现在操作系统中,解决了传统的进程通信模式中存在的很多弊端。消息队列具备的优点包括:
(1) 单独对消息的收、发进行管理,确保消息的成功传递。
(2) 提供异步的通信协议,消息产生者只需要将消息发送到消息队列中,即可立刻返回。
(3) 大大降低异构系统之间的耦合度。
在大数据时代,传统的消息队列无法满足日益增长的消息通信需求,用户个人搭建消息队列集群会带来较大的机器和运维成本;同时随着移动端规模的爆发式增长,对消息队列的安全性、可靠性以及可扩展性提出了挑战。阿里云推出的消息队列服务(MQS)是基于阿里云飞天云平台上的消息中间件服务,相比传统的消息队列而言,具备如下特点:
3 MQS基本架构
MQS的基本架构如图1所示。可以分为四部分:

图1 MQS架构图
3.1 数据多冗余
如图1所示,写入到MQS的所有消息数据都会对应三份拷贝,从而确保数据的高可靠性。
3.2 Qos控制
在Message Data Server层针对每个队列都设置有单独的QoS控制,针对该队列的访问请求量不得超过其QoS上限值。
3.3 数据多切片分布
队列的消息数据是按照特定的算法进行切片分布的,并由MQS Master进行集中管理,这不仅有效的实现了load balance,同时还能够动态的进行集群规模的弹性扩展。
4 MQS队列中消息存活周期
在具体介绍队列中消息存活周期之前,首先介绍下MQS涉及到的相关术语。
当队列中的某条消息超过了消息有效时间(TTL)之后仍未被取出,则该消息将变为过期消息,会被后台GC模块回收。
在介绍完一些基本术语之后,图2中显示了一条消息的整个生命周期。
在PutMessage之后,消息进入到队列中,即成为能够被取出的ActiveMessage;(如图2中A所示)
在消费者取出该条消息之后则转变为InactiveMessage;(如图2中B所示)
a) 如果在VisibilityTimeout时间段内,消费者将该条消息消费完毕,并发送删除请求,则该消息将会从队列中删除;(如图2中C所示)
b) 如果消费者未完成消费,则InactiveMessage将会在VisibilityTimeout之后自动转换成ActiveMessage,从而可以再次被取出消费;(如图2中D所示)
在消息有效时间过后,消息将变为ExpiredMessage,从队列中删除。(如图2中E.1和E.2所示)

图2 队列中消息的生命周期
5 MQS中多样的队列模式
在满足普通的消息收发模式的同时,MQS还向用户提供了多样的队列模式,分别包括延迟队列、长轮询队列以及优先级队列等。
5.1 延迟队列
在延迟队列中,发送到队列中的每一条消息都会保持一段等待时间,在等待时间过后才可以被取出消费。延迟队列可以帮用户轻松实现任务定时分发等功能。目前延迟队列支持最大的延迟时间长达7天。
5.2 长轮询队列
由于MQS实现的是基于HTTP协议的API接口,用户是通过拉(pull)的方式进行消息的获取,从而可能会出现消息数据获取不及时或者频繁发送空取消息的无用请求。MQS通过长轮询(long polling)的方式确保了用户能够在减少无用请求的基础上,又能及时获取到消息。
5.3 优先级队列
优先级队列能够为用户提供具备消息优先级别的队列。发送到队列中的每条消息都会设置有相应的优先级别;在进行消费时,较高优先级别的消息将会先被取出。目前优先级队列暂时无法确保百分百的优先级顺序。
6 技术展望
作为消息通讯的中间件服务,MQS会将服务的稳定性和安全性放在首位,主要工作将包括:
开放账户访问权限授予的API接口;
增加队列状态监控报警机制;
同时,在功能和性能方面将进行更多的尝试:
长连接功能打开;
后端server采用更高效的异步处理模式;
死信队列,消息数据备份等。
原文链接:http://blog.aliyun.com/1346?spm=0.0.0.0.R1KCex
下一篇:雷军为何拒绝了扎克伯格的橄榄枝